blob: f63d7c3eb153a0e53a374ed58d34f8df0cda292d [file] [log] [blame]
%verify "executed"
%verify "Class already resolved"
%verify "Class not yet resolved"
%verify "Class cannot be resolved"
# const/class vAA, Class /* BBBB */
FETCH(a1, 1) # a1 <- BBBB
LOAD_rSELF_methodClassDex(a2) # a2 <- self->methodClassDex
GET_OPA(rOBJ) # rOBJ <- AA
LOAD_base_offDvmDex_pResClasses(a2, a2) # a2 <- dvmDex->pResClasses
LOAD_eas2(v0, a2, a1) # v0 <- pResClasses[BBBB]
bnez v0, .L${opcode}_resolve # v0!=0 => resolved-ok
/*
* Continuation if the Class has not yet been resolved.
* a1: BBBB (Class ref)
* rOBJ: target register
*/
EXPORT_PC()
LOAD_rSELF_method(a0) # a0 <- self->method
li a2, 1 # a2 <- true
LOAD_base_offMethod_clazz(a0, a0) # a0 <- method->clazz
JAL(dvmResolveClass) # v0 <- Class reference
# failed==0?
beqz v0, common_exceptionThrown # yup, handle the exception
.L${opcode}_resolve:
FETCH_ADVANCE_INST(2) # advance rPC, load rINST
GET_INST_OPCODE(t0) # extract opcode from rINST
SET_VREG_GOTO(v0, rOBJ, t0) # vAA <- v0