diff options
author | Björn Gustavsson <[email protected]> | 2019-03-20 06:03:40 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2019-03-20 15:06:08 +0100 |
commit | db5e8bda8cad4f16e0573d23a3ab1e37cadf78c4 (patch) | |
tree | 53984ec1a13c233a4b772d4fe560aedc486b2af2 /erts/emulator/beam/instrs.tab | |
parent | 6e87e37bdd01401aa340a0f47e2d10fd8fe472ee (diff) | |
download | otp-db5e8bda8cad4f16e0573d23a3ab1e37cadf78c4.tar.gz otp-db5e8bda8cad4f16e0573d23a3ab1e37cadf78c4.tar.bz2 otp-db5e8bda8cad4f16e0573d23a3ab1e37cadf78c4.zip |
Optimize moving of several Y registers to X registers
Introduce move_src_window[234] instructions for moving several
consecutively numbered Y registers to discontiguously numbered X
registers. This optimization is effective because the compiler has
sorted the `move` instructions in Y register order.
Diffstat (limited to 'erts/emulator/beam/instrs.tab')
-rw-r--r-- | erts/emulator/beam/instrs.tab | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/erts/emulator/beam/instrs.tab b/erts/emulator/beam/instrs.tab index 3cb12dba4a..692408e212 100644 --- a/erts/emulator/beam/instrs.tab +++ b/erts/emulator/beam/instrs.tab @@ -515,6 +515,39 @@ move_shift(Src, SD, D) { $SD = V; } +move_src_window2(Src, D1, D2) { + Eterm* src = &$Src; + Eterm s1, s2; + s1 = src[0]; + s2 = src[1]; + $D1 = s1; + $D2 = s2; +} + +move_src_window3(Src, D1, D2, D3) { + Eterm* src = &$Src; + Eterm s1, s2, s3; + s1 = src[0]; + s2 = src[1]; + s3 = src[2]; + $D1 = s1; + $D2 = s2; + $D3 = s3; +} + +move_src_window4(Src, D1, D2, D3, D4) { + Eterm* src = &$Src; + Eterm s1, s2, s3, s4; + s1 = src[0]; + s2 = src[1]; + s3 = src[2]; + s4 = src[3]; + $D1 = s1; + $D2 = s2; + $D3 = s3; + $D4 = s4; +} + move_window2(S1, S2, D) { Eterm xt0, xt1; Eterm* y = &$D; |