diff options
author | Björn Gustavsson <[email protected]> | 2017-09-15 12:29:58 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-10-05 12:37:57 +0200 |
commit | 985524704ddd62cf85385a323861377608d66c9c (patch) | |
tree | ae1deb50e492837ee0ca8837b4dff2447d6a9301 /erts | |
parent | f88bd45a2c76f84a16b004922945579898cc35ac (diff) | |
download | otp-985524704ddd62cf85385a323861377608d66c9c.tar.gz otp-985524704ddd62cf85385a323861377608d66c9c.tar.bz2 otp-985524704ddd62cf85385a323861377608d66c9c.zip |
Optimize instruction prefetch
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/beam_emu.c | 2 | ||||
-rwxr-xr-x | erts/emulator/utils/beam_makeops | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c index 73c4e3532b..aa94fbf536 100644 --- a/erts/emulator/beam/beam_emu.c +++ b/erts/emulator/beam/beam_emu.c @@ -52,11 +52,13 @@ # define CountCase(OpCode) case op_count_##OpCode # define IsOpCode(InstrWord, OpCode) (BeamCodeAddr(InstrWord) == (BeamInstr)op_##OpCode) # define Goto(Rel) {Go = BeamCodeAddr(Rel); goto emulator_loop;} +# define GotoPF(Rel) Goto(Rel) #else # define OpCase(OpCode) lb_##OpCode # define CountCase(OpCode) lb_count_##OpCode # define IsOpCode(InstrWord, OpCode) (BeamCodeAddr(InstrWord) == (BeamInstr)&&lb_##OpCode) # define Goto(Rel) goto *((void *)BeamCodeAddr(Rel)) +# define GotoPF(Rel) goto *((void *)Rel) # define LabelAddr(Label) &&Label #endif diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops index 388e3d164d..322d60b00e 100755 --- a/erts/emulator/utils/beam_makeops +++ b/erts/emulator/utils/beam_makeops @@ -1452,10 +1452,10 @@ sub code_gen { "ASSERT(VALID_INSTR(*I));\n" . "Goto(*I);"; } else { - $var_decls .= "BeamInstr next_pf = I[$instr_offset];\n"; + $var_decls .= "BeamInstr next_pf = BeamCodeAddr(I[$instr_offset]);\n"; $dispatch_next = "\nI += $instr_offset;\n" . "ASSERT(VALID_INSTR(next_pf));\n" . - "Goto(next_pf);"; + "GotoPF(next_pf);"; } # |