diff options
Diffstat (limited to 'vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S')
-rw-r--r-- | vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S b/vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S new file mode 100644 index 0000000..b062127 --- /dev/null +++ b/vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S @@ -0,0 +1,17 @@ +%verify "executed" +%verify "null object" + /* iput-wide-quick vA, vB, offset@CCCC */ + mov r0, rINST, lsr #8 @ r0<- A(+) + mov r1, rINST, lsr #12 @ r1<- B + and r0, r0, #15 + GET_VREG(r2, r1) @ r2<- fp[B], the object pointer + add r3, rFP, r0, lsl #2 @ r3<- &fp[A] + cmp r2, #0 @ check object for null + ldmia r3, {r0-r1} @ r0/r1<- fp[A] + beq common_errNullObject @ object was null + FETCH(r3, 1) @ r3<- field byte offset + FETCH_ADVANCE_INST(2) @ advance rPC, load rINST + add r2, r2, r3 @ r2<- object + byte offset + stmia r2, {r0-r1} @ obj.field (64 bits, aligned)<- r0/r1 + GET_INST_OPCODE(ip) @ extract opcode from rINST + GOTO_OPCODE(ip) @ jump to next instruction |