aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2017-08-31 12:49:07 +0200
committerBjörn Gustavsson <[email protected]>2017-08-31 15:45:32 +0200
commit84deb2692839ff876581f9ba8d74c5eefd6c3010 (patch)
tree096d11c0f5e62d9d99dd8fe03f80bbf326eac753 /erts
parentc3b8fa5742b5fbcd262552fa1d6cad0706fa6a94 (diff)
downloadotp-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.
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/msg_instrs.tab11
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);