aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/ops.tab
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-09-15 17:58:33 +0200
committerBjörn-Egil Dahlberg <[email protected]>2015-04-23 14:37:32 +0200
commit63949dcd13e24bdc73336b0f5e88d4f06cce56c1 (patch)
tree5a2fe60b50a6ce515b3518f4b35859fd8b79dc20 /erts/emulator/beam/ops.tab
parent177d20a7329d24aec0f4a0cbbbd3fc803bcbba4b (diff)
downloadotp-63949dcd13e24bdc73336b0f5e88d4f06cce56c1.tar.gz
otp-63949dcd13e24bdc73336b0f5e88d4f06cce56c1.tar.bz2
otp-63949dcd13e24bdc73336b0f5e88d4f06cce56c1.zip
erts: Add instruction move3 for xy and xx
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r--erts/emulator/beam/ops.tab8
1 files changed, 8 insertions, 0 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index 9330192d04..66339f8ace 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -302,6 +302,9 @@ move X1=x Y1=y | move X2=x Y2=y => move2 X1 Y1 X2 Y2
move Y1=y X1=x | move Y2=y X2=x => move2 Y1 X1 Y2 X2
move X1=x X2=x | move X3=x X4=x => move2 X1 X2 X3 X4
+move2 X1=x Y1=y X2=x Y2=y | move X3=x Y3=y => move3 X1 Y1 X2 Y2 X3 Y3
+move2 Y1=y X1=x Y2=y X2=x | move Y3=y X3=x => move3 Y1 X1 Y2 X2 Y3 X3
+
move C=aiq X=x==1 => move_x1 C
move C=aiq X=x==2 => move_x2 C
@@ -313,6 +316,11 @@ move2 x y x y
move2 y x y x
move2 x x x x
+%macro: move3 Move3
+move3 x y x y x y
+move3 y x y x y x
+move3 x x x x x x
+
# The compiler almost never generates a "move Literal y(Y)" instruction,
# so let's cheat if we encounter one.
move S=n D=y => init D