1 %default {"volatile":"0"}
3 %verify "field already resolved"
4 %verify "field not yet resolved"
5 %verify "field cannot be resolved"
9 # sget-wide vAA, field /* BBBB */
10 LOAD_rSELF_methodClassDex(a2) # a2 <- DvmDex
11 FETCH(a1, 1) # a1 <- field ref BBBB
12 LOAD_base_offDvmDex_pResFields(rBIX, a2) # rBIX <- dvmDex->pResFields
13 LOAD_eas2(a0, rBIX, a1) # a0 <- resolved StaticField ptr
14 # is resolved entry null?
15 bnez a0, .L${opcode}_finish
18 * Continuation if the field has not yet been resolved.
20 * rBIX: dvmDex->pResFields
22 * Returns StaticField pointer in v0.
24 LOAD_rSELF_method(a2) # a2 <- current method
26 EAS2(rBIX, rBIX, a1) # rBIX<- &dvmDex->pResFields[field]
28 EXPORT_PC() # resolve() could throw, so export now
29 LOAD_base_offMethod_clazz(a0, a2) # a0 <- method->clazz
30 JAL(dvmResolveStaticField) # v0 <- resolved StaticField ptr
33 beqz v0, common_exceptionThrown # no, handle exception
36 * If the JIT is actively building a trace we need to make sure
37 * that the field is fully resolved before including this instruction.
39 JAL(common_verifyField)
42 b .L${opcode}_finish # resume
46 GET_OPA(a1) # a1 <- AA
48 vLOAD64_off(a2, a3, a0, offStaticField_value) # a2/a3 <- field value (aligned)
50 LOAD64_off(a2, a3, a0, offStaticField_value) # a2/a3 <- field value (aligned)
52 FETCH_ADVANCE_INST(2) # advance rPC, load rINST
53 EAS2(a1, rFP, a1) # a1 <- &fp[AA]
54 STORE64(a2, a3, a1) # vAA/vAA+1 <- a2/a3
55 GET_INST_OPCODE(t0) # extract opcode from rINST
56 GOTO_OPCODE(t0) # jump to next instruction