Bill Buzbee | 7c58bd4 | 2016-01-20 20:46:01 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Inter-instruction transfer stub. Call out to MterpCheckBefore to handle |
| 3 | * any interesting requests and then jump to the real instruction |
| 4 | * handler. Unlike the Arm handler, we can't do this as a tail call |
| 5 | * because rIBASE is caller save and we need to reload it. |
| 6 | * |
| 7 | * Note that unlike in the Arm implementation, we should never arrive |
| 8 | * here with a zero breakFlag because we always refresh rIBASE on |
| 9 | * return. |
| 10 | */ |
| 11 | .extern MterpCheckBefore |
| 12 | EXPORT_PC |
| 13 | |
| 14 | movl rSELF, %ecx |
| 15 | movl %ecx, OUT_ARG0(%esp) |
| 16 | leal OFF_FP_SHADOWFRAME(rFP), %eax |
| 17 | movl %eax, OUT_ARG1(%esp) |
Serguei Katkov | 05dfaaa | 2016-01-28 08:21:26 +0600 | [diff] [blame] | 18 | call SYMBOL(MterpCheckBefore) # (self, shadow_frame) |
Bill Buzbee | 7c58bd4 | 2016-01-20 20:46:01 +0000 | [diff] [blame] | 19 | REFRESH_IBASE |
| 20 | jmp .L_op_nop+(${opnum}*${handler_size_bytes}) |