aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/ops.tab
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2016-04-09 09:51:10 +0200
committerBjörn Gustavsson <[email protected]>2016-04-14 10:38:49 +0200
commit9b2ee6cfdc09090df81be40ca1d7358c3d273743 (patch)
tree31474128fd4e17b7fed209d9decf420aed625cfd /erts/emulator/beam/ops.tab
parent20ffaef67ccaf4f2a7df80d25a88ce8cb2a2a15a (diff)
downloadotp-9b2ee6cfdc09090df81be40ca1d7358c3d273743.tar.gz
otp-9b2ee6cfdc09090df81be40ca1d7358c3d273743.tar.bz2
otp-9b2ee6cfdc09090df81be40ca1d7358c3d273743.zip
Optimize get_tuple_element instructions that target Y registers
Several improvements in the compiler (e.g. c288ab87fd6) has lead to an Y register being the target for get_tuple_element instructions. Therefore, introduce i_get_tuple_element2y that combines two consecutive get_tuple_element instructions that target Y registers.
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r--erts/emulator/beam/ops.tab6
1 files changed, 6 insertions, 0 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index 96a3a72bb5..aa720c5b0c 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -229,6 +229,9 @@ i_get_tuple_element y P y
%macro: i_get_tuple_element2 GetTupleElement2 -pack
i_get_tuple_element2 x P x
+%macro: i_get_tuple_element2y GetTupleElement2Y -pack
+i_get_tuple_element2y x P y y
+
%macro: i_get_tuple_element3 GetTupleElement3 -pack
i_get_tuple_element3 x P x
@@ -649,6 +652,9 @@ get_tuple_element Reg=x P1 D1=x | get_tuple_element Reg=x P2 D2=x | \
get_tuple_element Reg=x P1 D1=x | get_tuple_element Reg=x P2 D2=x | \
succ(P1, P2) | succ(D1, D2) => i_get_tuple_element2 Reg P1 D1
+get_tuple_element Reg=x P1 D1=y | get_tuple_element Reg=x P2 D2=y | \
+ succ(P1, P2) => i_get_tuple_element2y Reg P1 D1 D2
+
get_tuple_element Reg P Dst => i_get_tuple_element Reg P Dst
is_integer Fail=f i =>