diff options
author | Björn Gustavsson <[email protected]> | 2017-08-31 12:49:07 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-08-31 15:45:32 +0200 |
commit | 84deb2692839ff876581f9ba8d74c5eefd6c3010 (patch) | |
tree | 096d11c0f5e62d9d99dd8fe03f80bbf326eac753 | |
parent | c3b8fa5742b5fbcd262552fa1d6cad0706fa6a94 (diff) | |
download | otp-84deb2692839ff876581f9ba8d74c5eefd6c3010.tar.gz otp-84deb2692839ff876581f9ba8d74c5eefd6c3010.tar.bz2 otp-84deb2692839ff876581f9ba8d74c5eefd6c3010.zip |
Optimize dispatch of loop_rec from recv_set
We KNOW that recv_set instruction is immediately followed
by a loop_rec instruction.
-rw-r--r-- | erts/emulator/beam/msg_instrs.tab | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/erts/emulator/beam/msg_instrs.tab b/erts/emulator/beam/msg_instrs.tab index 3b91d8d61f..093d48c64c 100644 --- a/erts/emulator/beam/msg_instrs.tab +++ b/erts/emulator/beam/msg_instrs.tab @@ -66,7 +66,9 @@ i_recv_set() { if (c_p->msg.mark == (BeamInstr *) ($NEXT_INSTRUCTION)) { c_p->msg.save = c_p->msg.saved_last; } - /* Fall through to the loop_rec/2 instruction */ + SET_I($NEXT_INSTRUCTION); + goto loop_rec_top__; + //| -no_next } i_loop_rec(Dest) { @@ -79,6 +81,10 @@ i_loop_rec(Dest) { ErtsMessage* msgp; + /* Entry point from recv_set */ + loop_rec_top__: + ; + /* * We need to disable GC while matching messages * in the queue. This since messages with data outside @@ -87,7 +93,8 @@ i_loop_rec(Dest) { ASSERT(!(c_p->flags & F_DELAY_GC)); c_p->flags |= F_DELAY_GC; -loop_rec__: + /* Entry point from loop_rec_end */ + loop_rec__: PROCESS_MAIN_CHK_LOCKS(c_p); |