1 %verify "Class already resolved" 2 %verify "Class not yet resolved" 3 %verify "Class cannot be resolved" 4 /* const-class/jumbo vBBBB, Class@AAAAAAAA */ 5 movl rSELF,%ecx 6 movl 2(rPC),%eax # eax<- AAAAAAAA 7 movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 8 movl offDvmDex_pResClasses(%ecx),%ecx # ecx<- dvmDex->pResClasses 9 movl (%ecx,%eax,4),%eax # eax<- rResClasses[AAAAAAAA] 10 FETCH_INST_OPCODE 4 %ecx 11 testl %eax,%eax # resolved yet? 12 je .L${opcode}_resolve 13 SET_VREG %eax rINST # vBBBB<- rResClasses[AAAAAAAA] 14 ADVANCE_PC 4 15 GOTO_NEXT_R %ecx 16 17 /* This is the less common path, so we'll redo some work 18 here rather than force spills on the common path */ 19 .L${opcode}_resolve: 20 movl rSELF,%eax 21 EXPORT_PC 22 movl offThread_method(%eax),%eax # eax<- self->method 23 movl $$1,OUT_ARG2(%esp) # true 24 movl 2(rPC),%ecx # ecx<- AAAAAAAA 25 movl offMethod_clazz(%eax),%eax 26 movl %ecx,OUT_ARG1(%esp) 27 movl %eax,OUT_ARG0(%esp) 28 SPILL(rIBASE) 29 call dvmResolveClass # go resolve 30 UNSPILL(rIBASE) 31 testl %eax,%eax # failed? 32 je common_exceptionThrown 33 FETCH_INST_OPCODE 4 %ecx 34 SET_VREG %eax rINST 35 ADVANCE_PC 4 36 GOTO_NEXT_R %ecx 37