blob: e94108ca066b7e0a58f4165167b3f6f67d9f7dbb [file] [log] [blame]
buzbee1452bee2015-03-06 14:43:04 -08001 /*
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 FETCH r0, 1 @ r0<- CCCC
10 mov r1, rINST, lsr #12 @ r1<- B
11 GET_VREG r1, r1 @ r1<- vB (object)
12 ldr r2, [rFP, #OFF_FP_METHOD] @ r2<- method
13 mov r3, rSELF @ r3<- self
14 mov r9, rINST, lsr #8 @ r9<- A+
15 and r9, r9, #15 @ r9<- A
16 bl MterpInstanceOf @ (index, obj, method, self)
17 ldr r1, [rSELF, #THREAD_EXCEPTION_OFFSET]
18 PREFETCH_INST 2
19 cmp r1, #0 @ exception pending?
20 bne MterpException
21 ADVANCE 2 @ advance rPC
22 SET_VREG r0, r9 @ vA<- r0
23 GET_INST_OPCODE ip @ extract opcode from rINST
24 GOTO_OPCODE ip @ jump to next instruction