blob: 44162da3b64ea0a9357fd2b246d7f0c1632dd0e3 [file] [log] [blame]
%verify "Class already resolved"
%verify "Class not yet resolved"
%verify "Class cannot be resolved"
/* const-class/jumbo vBBBB, Class@AAAAAAAA */
movl rSELF,%ecx
movl 2(rPC),%eax # eax<- AAAAAAAA
movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex
movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses
FETCH_INST_OPCODE 4 %ecx
movl (%ecx,%eax,4),%eax # eax<- rResClasses[AAAAAAAA]
testl %eax,%eax # resolved yet?
je .L${opcode}_resolve
SET_VREG %eax rINST # vBBBB<- rResClasses[AAAAAAAA]
ADVANCE_PC 4
GOTO_NEXT_R %ecx
/* This is the less common path, so we'll redo some work
here rather than force spills on the common path */
.L${opcode}_resolve:
movl rSELF,%eax
EXPORT_PC
movl offThread_method(%eax),%eax # eax<- self->method
movl $$1,OUT_ARG2(%esp) # true
movl 2(rPC),%ecx # ecx<- AAAAAAAA
movl offMethod_clazz(%eax),%eax
movl %ecx,OUT_ARG1(%esp)
movl %eax,OUT_ARG0(%esp)
SPILL(rIBASE)
call dvmResolveClass # go resolve
UNSPILL(rIBASE)
testl %eax,%eax # failed?
je common_exceptionThrown
FETCH_INST_OPCODE 4 %ecx
SET_VREG %eax rINST
ADVANCE_PC 4
GOTO_NEXT_R %ecx