diff options
author | Björn Gustavsson <[email protected]> | 2019-08-16 16:04:02 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-08-22 13:37:41 +0200 |
commit | 8041849a8e55281b4d954e63e9415995607e1870 (patch) | |
tree | 834f0ef2393ca6e8a39222906dd7f3795d049740 /erts/emulator/beam/ops.tab | |
parent | 25fe3fb23c594d735cb6ebae120910e44f0cdae4 (diff) | |
download | otp-8041849a8e55281b4d954e63e9415995607e1870.tar.gz otp-8041849a8e55281b4d954e63e9415995607e1870.tar.bz2 otp-8041849a8e55281b4d954e63e9415995607e1870.zip |
Optimize deallocate_return instructions
Eliminating the CP register and putting continuation
pointers directly on the stack made the deallocate_return
instruction slower.
Try to mitigate this slow down by specializing deallocate_return
for small stack. For the move_deallocate_return instruction,
reorder instructions to make it possible to execute the read
instructions in parallel.
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r-- | erts/emulator/beam/ops.tab | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab index f525d126e7..c0ca9260a0 100644 --- a/erts/emulator/beam/ops.tab +++ b/erts/emulator/beam/ops.tab @@ -596,8 +596,20 @@ move S x==0 | deallocate D | return => move_deallocate_return S D move_deallocate_return xycn Q +deallocate u==0 | return => deallocate_return0 +deallocate u==1 | return => deallocate_return1 +deallocate u==2 | return => deallocate_return2 +deallocate u==3 | return => deallocate_return3 +deallocate u==4 | return => deallocate_return4 + deallocate D | return => deallocate_return D +deallocate_return0 +deallocate_return1 +deallocate_return2 +deallocate_return3 +deallocate_return4 + deallocate_return Q test_heap Need u==1 | put_list Y=y x==0 x==0 => test_heap_1_put_list Need Y |