1a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee/*
29a3147c7412f4794434b4c2604aa2ba784867774buzbee * Inter-instruction transfer stub.  Call out to dvmCheckBefore to handle
3a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee * any interesting requests and then jump to the real instruction
4a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee * handler.  Unlike the Arm handler, we can't do this as a tail call
5a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee * because rIBASE is caller save and we need to reload it.
69a3147c7412f4794434b4c2604aa2ba784867774buzbee *
79a3147c7412f4794434b4c2604aa2ba784867774buzbee * Note that unlike in the Arm implementation, we should never arrive
89a3147c7412f4794434b4c2604aa2ba784867774buzbee * here with a zero breakFlag because we always refresh rIBASE on
99a3147c7412f4794434b4c2604aa2ba784867774buzbee * return.
10a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee */
119a3147c7412f4794434b4c2604aa2ba784867774buzbee    EXPORT_PC
12a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    movl   rSELF, %eax
13a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    movl   rPC, OUT_ARG0(%esp)
149a3147c7412f4794434b4c2604aa2ba784867774buzbee    cmpb   $$0,offThread_breakFlags(%eax)    # anything to do?
159a3147c7412f4794434b4c2604aa2ba784867774buzbee    movl   rFP, OUT_ARG1(%esp)
169a3147c7412f4794434b4c2604aa2ba784867774buzbee    je     1f                                # reload rIBASE & resume if not
179a3147c7412f4794434b4c2604aa2ba784867774buzbee    movl   %eax, OUT_ARG2(%esp)
189a3147c7412f4794434b4c2604aa2ba784867774buzbee    call   dvmCheckBefore                    # (dPC, dFP, self)
199a3147c7412f4794434b4c2604aa2ba784867774buzbee    movl   rSELF, %eax
209a3147c7412f4794434b4c2604aa2ba784867774buzbee1:
219a3147c7412f4794434b4c2604aa2ba784867774buzbee    movl   offThread_curHandlerTable(%eax), rIBASE # reload rIBASE
22a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    jmp    *dvmAsmInstructionStart+(${opnum}*4)
23