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 /* iput-object/jumbo vBBBB, vCCCC, field@AAAAAAAA */
11 FETCH(a1, 1) # a1<- aaaa (lo)
12 FETCH(a2, 2) # a2<- AAAA (hi)
13 FETCH(a0, 4) # a0<- CCCC
14 LOAD_rSELF_methodClassDex(a3) # a3 <- DvmDex
16 or a1, a1, a2 # a1<- AAAAaaaa
17 LOAD_base_offDvmDex_pResFields(a2, a3) # a2 <- pDvmDex->pResFields
18 GET_VREG(rOBJ, a0) # rOBJ <- fp[B], the object pointer
19 LOAD_eas2(a0, a2, a1) # a0 <- resolved InstField ptr
20 # is resolved entry null?
21 bnez a0, .L${opcode}_finish # no, already resolved
22 LOAD_rSELF_method(a2) # a2 <- current method
23 EXPORT_PC() # resolve() could throw
24 LOAD_base_offMethod_clazz(a0, a2) # a0 <- method->clazz
25 JAL(dvmResolveInstField) # v0 <- resolved InstField ptr
26 b .L${opcode}_resolved
32 * a0 holds resolved field
37 beqz a0, common_exceptionThrown
38 # fall through to ${opcode}_finish
41 #BAL(common_squeak${sqnum})
42 LOAD_base_offInstField_byteOffset(a3, a0) # a3 <- byte offset of field
43 FETCH(a1, 3) # a1<- BBBB
44 GET_VREG(a0, a1) # a0 <- fp[BBBB]
45 lw a2, offThread_cardTable(rSELF) # a2 <- card table base
46 # check object for null
47 beqz rOBJ, common_errNullObject # object was null
48 FETCH_ADVANCE_INST(5) # advance rPC, load rINST
49 GET_INST_OPCODE(t0) # extract opcode from rINST
50 addu t2, rOBJ, a3 # form address
51 $prebarrier # releasing store
52 $store a0, (t2) # obj.field (32 bits) <- a0
54 beqz a0, 1f # stored a null reference?
55 srl t1, rOBJ, GC_CARD_SHIFT
57 sb a2, (t2) # mark card if not
59 GOTO_OPCODE(t0) # jump to next instruction