blob: 0c3d0bd8f7aa4d1b6d8ee78794fb5aca880bd606 [file] [log] [blame]
%verify "executed"
%verify "String already resolved"
%verify "String not yet resolved"
%verify "String cannot be resolved"
# const/string vAA, String /* BBBBBBBB */
FETCH(a0, 1) # a0 <- bbbb (low)
FETCH(a1, 2) # a1 <- BBBB (high)
LOAD_rSELF_methodClassDex(a2) # a2 <- self->methodClassDex
GET_OPA(rOBJ) # rOBJ <- AA
LOAD_base_offDvmDex_pResStrings(a2, a2) # a2 <- dvmDex->pResStrings
sll a1, a1, 16
or a1, a1, a0 # a1 <- BBBBbbbb
LOAD_eas2(v0, a2, a1) # v0 <- pResStrings[BBBB]
bnez v0, .L${opcode}_resolve
/*
* Continuation if the String has not yet been resolved.
* a1: BBBBBBBB (String ref)
* rOBJ: target register
*/
EXPORT_PC()
LOAD_rSELF_method(a0) # a0 <- self->method
LOAD_base_offMethod_clazz(a0, a0) # a0 <- method->clazz
JAL(dvmResolveString) # v0 <- String reference
# failed?
beqz v0, common_exceptionThrown # yup, handle the exception
.L${opcode}_resolve:
FETCH_ADVANCE_INST(3) # advance rPC, load rINST
GET_INST_OPCODE(t1) # extract opcode from rINST
SET_VREG_GOTO(v0, rOBJ, t1) # vAA <- v0