1/* 2 * Check to see if an object reference is an instance of a class. 3 * 4 * Most common situation is a non-null object, being compared against 5 * an already-resolved class. 6 */ 7 /* instance-of vA, vB, class@CCCC */ 8 EXPORT_PC 9 movzwl 2(rPC), %eax # eax <- BBBB 10 movl %eax, OUT_ARG0(%esp) 11 movl rINST, %eax # eax <- BA 12 sarl $$4, %eax # eax <- B 13 leal VREG_ADDRESS(%eax), %ecx # Get object address 14 movl %ecx, OUT_ARG1(%esp) 15 movl OFF_FP_METHOD(rFP),%eax 16 movl %eax, OUT_ARG2(%esp) 17 movl rSELF, %ecx 18 movl %ecx, OUT_ARG3(%esp) 19 call SYMBOL(MterpInstanceOf) # (index, &obj, method, self) 20 movl rSELF, %ecx 21 RESTORE_IBASE_FROM_SELF %ecx 22 cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx) 23 jnz MterpException 24 andb $$0xf, rINSTbl # rINSTbl <- A 25 SET_VREG %eax, rINST 26 ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 27