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