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