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