1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "String already resolved" 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "String not yet resolved" 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "String cannot be resolved" 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* const/string vAA, String@BBBB */ 69f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- BBBB 89f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx# ecx<- self->methodClassDex 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResStrings(%ecx),%ecx # ecx<- dvmDex->pResStrings 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- rResString[BBBB] 11a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee FETCH_INST_OPCODE 2 %ecx 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved yet? 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .L${opcode}_resolve 14a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee SET_VREG %eax rINST # vAA<- rResString[BBBB] 15f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 16a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee GOTO_NEXT_R %ecx 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* This is the less common path, so we'll redo some work 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project here rather than force spills on the common path */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_resolve: 219f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%eax 22f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC 239f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_method(%eax),%eax # eax<- self->method 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%ecx # ecx<- BBBB 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%eax),%eax 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG1(%esp) 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG0(%esp) 28a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee SPILL(rIBASE) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveString # go resolve 30a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee UNSPILL(rIBASE) 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # failed? 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_exceptionThrown 33a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee FETCH_INST_OPCODE 2 %ecx 34f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SET_VREG %eax rINST 35f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 36a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee GOTO_NEXT_R %ecx 37