aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/ops.tab
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2017-09-01 10:19:11 +0200
committerBjörn Gustavsson <[email protected]>2017-09-01 10:19:11 +0200
commit2d32a4d56c2e2bf9aeb3593efca5a2f9d8419d97 (patch)
treeed0f215f5d1697918540541ba7ec9035e77ee96b /erts/emulator/beam/ops.tab
parent661a422dd0d7b769dbb049f2d97fab04871cddd7 (diff)
parent84deb2692839ff876581f9ba8d74c5eefd6c3010 (diff)
downloadotp-2d32a4d56c2e2bf9aeb3593efca5a2f9d8419d97.tar.gz
otp-2d32a4d56c2e2bf9aeb3593efca5a2f9d8419d97.tar.bz2
otp-2d32a4d56c2e2bf9aeb3593efca5a2f9d8419d97.zip
Merge branch 'bjorn/erts/improve-beam-ops'
* bjorn/erts/improve-beam-ops: Optimize dispatch of loop_rec from recv_set Add missing -no_next directives Eliminate three arguments for erts_hibernate() Eliminate three arguments for the apply() helper Assign machine registers for X86-64 Annotate arithmetic instructions with likely/unlikely Add annotations for likely/unlikely ops.tab: Mark infrequently used instructions as %cold Introduce '%warm' and beam_warm.h
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r--erts/emulator/beam/ops.tab23
1 files changed, 21 insertions, 2 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index b6e995fdbe..d848c1cceb 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -59,6 +59,7 @@ put_tuple u==0 d => too_old_compiler
# All the other instructions.
#
+%cold
label L
i_func_info I a a I
int_code_end
@@ -68,6 +69,7 @@ i_debug_breakpoint
i_return_time_trace
i_return_to_trace
i_yield
+%hot
return
@@ -217,6 +219,11 @@ is_number Fail Literal=q => move Literal x | is_number Fail x
jump f
+#
+# Expection rasing instructions. Infrequently executed.
+#
+
+%cold
case_end NotInX=cy => move NotInX x | case_end x
badmatch NotInX=cy => move NotInX x | badmatch x
@@ -238,6 +245,12 @@ i_raise
badarg j
system_limit j
+%hot
+
+#
+# Move instructions.
+#
+
move C=cxy x==0 | jump Lbl => move_jump Lbl C
move_jump f ncxy
@@ -404,8 +417,10 @@ wait_timeout_unlocked s f
wait_timeout_locked_int I f
wait_timeout_locked s f
+%cold
i_wait_error
i_wait_error_locked
+%hot
send
@@ -515,6 +530,7 @@ put_list s s d
# Some more only used by the emulator
#
+%cold
normal_exit
continue_exit
apply_bif
@@ -522,6 +538,7 @@ call_nif
call_error_handler
error_action_code
return_trace
+%hot
#
# Instruction transformations & folded instructions.
@@ -939,9 +956,11 @@ i_apply_fun
i_apply_fun_last P
i_apply_fun_only
+%cold
i_hibernate
i_perf_counter
+%hot
call_bif e
@@ -1040,7 +1059,7 @@ func_info M F A => i_func_info u M F A
# New bit syntax matching (R11B).
# ================================================================
-%cold
+%warm
bs_start_match2 Fail=f ica X Y D => jump Fail
bs_start_match2 Fail Bin X Y D => i_bs_start_match2 Bin Fail X Y D
i_bs_start_match2 xy f I I x
@@ -1138,7 +1157,7 @@ i_bs_validate_unicode_retract j s s
#
# Constructing binaries
#
-%cold
+%warm
bs_init2 Fail Sz Words Regs Flags Dst | binary_too_big(Sz) => system_limit Fail