1 %default { "store":"sw","postbarrier":"# noop ", "prebarrier":" # noop", "sqnum":"0" }
4 %verify "field already resolved"
5 %verify "field not yet resolved"
6 %verify "field cannot be resolved"
8 * Jumbo 32-bit instance field put.
10 * for: iput/jumbo, iput-boolean/jumbo, iput-byte/jumbo, iput-char/jumbo,
13 /* exop vBBBB, vCCCC, field@AAAAAAAA */
14 FETCH(a1, 1) # a1<- aaaa (lo)
15 FETCH(a2, 2) # a2<- AAAA (hi)
16 FETCH(a0, 4) # a0<- CCCC
17 LOAD_rSELF_methodClassDex(a3) # a3 <- DvmDex
19 or a1, a1, a2 # a1<- AAAAaaaa
20 LOAD_base_offDvmDex_pResFields(a2, a3) # a2 <- pDvmDex->pResFields
21 GET_VREG(rOBJ, a0) # rOBJ <- fp[B], the object pointer
22 LOAD_eas2(a0, a2, a1) # a0 <- resolved InstField ptr
23 # is resolved entry null?
24 bnez a0, .L${opcode}_finish # no, already resolved
25 LOAD_rSELF_method(a2) # a2 <- current method
26 EXPORT_PC() # resolve() could throw
27 LOAD_base_offMethod_clazz(a0, a2) # a0 <- method->clazz
28 JAL(dvmResolveInstField) # v0 <- resolved InstField ptr
29 b .L${opcode}_resolved # resolved, continue
35 beqz a0, common_exceptionThrown
36 # fall through to ${opcode}_finish
41 * a0 holds resolved field
45 #BAL(common_squeak${sqnum})
46 LOAD_base_offInstField_byteOffset(a3, a0) # a3 <- byte offset of field
47 FETCH(a1, 3) # a1<- BBBB
48 GET_VREG(a0, a1) # a0 <- fp[BBBB]
49 # check object for null
50 beqz rOBJ, common_errNullObject # object was null
51 FETCH_ADVANCE_INST(5) # advance rPC, load rINST
52 GET_INST_OPCODE(t0) # extract opcode from rINST
53 addu rOBJ, rOBJ, a3 # form address
54 $prebarrier # releasing store
55 $store a0, (rOBJ) # obj.field (8/16/32 bits) <- a0
57 GOTO_OPCODE(t0) # jump to next instruction