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