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