diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2010-12-16 08:22:11 +0100 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2011-01-17 15:23:47 +0100 |
commit | d8a47b34744be64db10a458991bf340328af8f9c (patch) | |
tree | 07291b097e72ea44d3803811cdd3d983352e50f7 /erts | |
parent | 51ddd2047c70bce67c8644d85f5d5de72842c320 (diff) | |
download | otp-d8a47b34744be64db10a458991bf340328af8f9c.tar.gz otp-d8a47b34744be64db10a458991bf340328af8f9c.tar.bz2 otp-d8a47b34744be64db10a458991bf340328af8f9c.zip |
Introduce a few more variations of the move instructions
Frequency counts show that
move Const x(1)
move Const x(2)
are very common.
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/beam_emu.c | 11 | ||||
-rw-r--r-- | erts/emulator/beam/ops.tab | 6 |
2 files changed, 17 insertions, 0 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c index edb4d61ed2..16741aa2d7 100644 --- a/erts/emulator/beam/beam_emu.c +++ b/erts/emulator/beam/beam_emu.c @@ -1520,6 +1520,17 @@ void process_main(void) NextPF(1, next); } + OpCase(move_x1_c): { + x(1) = Arg(0); + Next(1); + } + + OpCase(move_x2_c): { + x(2) = Arg(0); + Next(1); + } + + OpCase(return): { SET_I(c_p->cp); /* diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab index ac63b352ef..e861f97e7a 100644 --- a/erts/emulator/beam/ops.tab +++ b/erts/emulator/beam/ops.tab @@ -291,6 +291,12 @@ 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 +move C=aiq X=x==1 => move_x1 C +move C=aiq X=x==2 => move_x2 C + +move_x1 c +move_x2 c + %macro: move2 Move2 -pack move2 x y x y move2 y x y x |