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