Mercurial > hg > truffle
view test/compiler/5091921/output6890943.txt @ 11825:463f51256c86
AMD64HotSpot: emit jump to IC miss handler directly instead of emitting it inside verfied_entry
for empty methods we emitted something like this if a inline cache is needed:
prefix:
00: < IC check >
...
0b: jne <ic_miss_call>
11: nop
...
verified_entry:
20: ret
ic_miss_call:
21: jmp <entry of runtime function>
when a method is deoptimized, HotSpot patches the verified_entry (0x20) with a
jump to a stub that handles call-sites that has been made non-entrant. since this jump
is 5 bytes long, it will overwrite ic_miss_call and blow up every caller that
calls this method via the unverified entry (prefix).
the fix is to emit the jump to the runtime function inside the unverfied entry:
prefix:
00: < IC check >
...
0b: je <verified_entry>
11: jeq <entry of runtime function>
16: nop
...
verified_entry:
20: ret
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Mon, 30 Sep 2013 09:32:18 +0200 |
parents | bad7ecd0b6ed |
children |
line wrap: on
line source
Case #1: Yes 2 Case #2: Yes 2 Case #3: Yes 1 Case #4: Yes 0 Case #5: No Case #6: No Case #7: Yes 6 Case #8: Yes 6 Case #9: No Case #10: Yes 1 Case #11: Yes 6 Case #12: Yes 0 Case #13: No Case #14: Yes 22 Case #15: Yes 1225 Case #16: Yes 178 Case #17: No Case #18: Yes 1 Case #19: Yes 7 Case #20: Yes 2 Case #21: Yes 1 Case #22: No Case #23: Yes 3 Case #24: Yes 1 Case #25: Yes 7 Case #26: No Case #27: Yes 2 Case #28: Yes 4 Case #29: Yes 2 Case #30: Yes 1 Case #31: Yes 2 Case #32: Yes 20 Case #33: Yes 161 Case #34: Yes 48 Case #35: No Case #36: Yes 218 Case #37: Yes 51 Case #38: Yes 247 Case #39: Yes 32 Case #40: Yes 31 Case #41: Yes 31 Case #42: Yes 25 Case #43: Yes 17 Case #44: Yes 2 Case #45: Yes 61 Case #46: Yes 25 Case #47: No Case #48: No Case #49: Yes 8 Case #50: Yes 0