summaryrefslogtreecommitdiff
path: root/vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S
diff options
context:
space:
mode:
Diffstat (limited to 'vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S')
-rw-r--r--vm/mterp/armv4t/OP_IPUT_WIDE_QUICK.S17
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