/* | |
* Check to see if an object reference is an instance of a class. | |
* | |
* Most common situation is a non-null object, being compared against | |
* an already-resolved class. | |
*/ | |
/* instance-of vA, vB, class//CCCC */ | |
EXPORT_PC | |
FETCH w0, 1 // w0<- CCCC | |
lsr w1, wINST, #12 // w1<- B | |
VREG_INDEX_TO_ADDR x1, w1 // w1<- &object | |
ldr x2, [xFP, #OFF_FP_METHOD] // w2<- method | |
mov x3, xSELF // w3<- self | |
bl MterpInstanceOf // (index, &obj, method, self) | |
ldr x1, [xSELF, #THREAD_EXCEPTION_OFFSET] | |
ubfx w2, wINST, #8, #4 // w2<- A | |
PREFETCH_INST 2 | |
cbnz x1, MterpException | |
ADVANCE 2 // advance rPC | |
SET_VREG w0, w2 // vA<- w0 | |
GET_INST_OPCODE ip // extract opcode from rINST | |
GOTO_OPCODE ip // jump to next instruction |