diff options
author | Björn-Egil Dahlberg <[email protected]> | 2015-04-24 17:42:24 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2015-04-27 10:53:14 +0200 |
commit | 979d05fc326d0f6cf7c1c4a5182bb33942852dd7 (patch) | |
tree | a081f25e8816bcbe744fc08cc2aa077d45e4e341 /erts/emulator/beam/ops.tab | |
parent | dd4d7667f5ab60c76567a6f3d814b3b64583280a (diff) | |
download | otp-979d05fc326d0f6cf7c1c4a5182bb33942852dd7.tar.gz otp-979d05fc326d0f6cf7c1c4a5182bb33942852dd7.tar.bz2 otp-979d05fc326d0f6cf7c1c4a5182bb33942852dd7.zip |
erts: Specialize minus and plus instruction
Seen on SSL application where substraction with x registers were prevalent:
* i_minus specialization on x registers
* i_plus specialization on x registers
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r-- | erts/emulator/beam/ops.tab | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab index 22c7f14f0c..ece038131e 100644 --- a/erts/emulator/beam/ops.tab +++ b/erts/emulator/beam/ops.tab @@ -1660,7 +1660,9 @@ gc_bif2 p Live u$bif:erlang:sminus/2 Reg=d Int=i Dst | \ # GCing arithmetic instructions. # +gc_bif2 Fail I u$bif:erlang:splus/2 S1=x S2=x Dst=d => i_plus Fail I S1 S2 Dst gc_bif2 Fail I u$bif:erlang:splus/2 S1 S2 Dst=d => i_fetch S1 S2 | i_plus Fail I Dst +gc_bif2 Fail I u$bif:erlang:sminus/2 S1=x S2=x Dst=d => i_minus Fail I S1 S2 Dst gc_bif2 Fail I u$bif:erlang:sminus/2 S1 S2 Dst=d => i_fetch S1 S2 | i_minus Fail I Dst gc_bif2 Fail I u$bif:erlang:stimes/2 S1 S2 Dst=d => i_fetch S1 S2 | i_times Fail I Dst gc_bif2 Fail I u$bif:erlang:div/2 S1 S2 Dst=d => i_fetch S1 S2 | i_m_div Fail I Dst @@ -1686,7 +1688,9 @@ i_increment r I I d i_increment x I I d i_increment y I I d +i_plus j I x x d i_plus j I d +i_minus j I x x d i_minus j I d i_times j I d i_m_div j I d |