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