1%default { "barrier":"                  #  no-op " }
2%verify "executed"
3%verify "field already resolved"
4%verify "field not yet resolved"
5%verify "field cannot be resolved"
6    /*
7     * General 32-bit SGET handler.
8     *
9     * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
10     */
11    # op vAA, field                        /* BBBB */
12    LOAD_rSELF_methodClassDex(a2)          #  a2 <- DvmDex
13    FETCH(a1, 1)                           #  a1 <- field ref BBBB
14    LOAD_base_offDvmDex_pResFields(rBIX, a2) #  rBIX <- dvmDex->pResFields
15    LOAD_eas2(a0, rBIX, a1)                #  a0 <- resolved StaticField ptr
16    # is resolved entry !null?
17    bnez      a0, .L${opcode}_finish
18
19    /*
20     * Continuation if the field has not yet been resolved.
21     *  a1:  BBBB field ref
22     *  rBIX: dvmDex->pResFields
23     */
24    LOAD_rSELF_method(a2)                  #  a2 <- current method
25#if defined(WITH_JIT)
26    EAS2(rBIX, rBIX, a1)                   #  rBIX<- &dvmDex->pResFields[field]
27#endif
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
31    move      a0, v0
32    # success?
33    beqz      v0, common_exceptionThrown   #  no, handle exception
34#if defined(WITH_JIT)
35    /*
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.
38     */
39    JAL(common_verifyField)
40#endif
41    b        .L${opcode}_finish            # resume
42%break
43
44.L${opcode}_finish:
45    LOAD_base_offStaticField_value(a1, a0) #  a1 <- field value
46    $barrier                               #  acquiring load
47    GET_OPA(a2)                            #  a2 <- AA
48    FETCH_ADVANCE_INST(2)                  #  advance rPC, load rINST
49    GET_INST_OPCODE(t0)                    #  extract opcode from rINST
50    SET_VREG_GOTO(a1, a2, t0)              #  fp[AA] <- a1
51