%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