1 %verify "executed" 2 %verify "field already resolved" 3 %verify "field not yet resolved" 4 %verify "field cannot be resolved" 5 /* 6 * 64-bit SGET handler. 7 * 8 */ 9 /* sget-wide vAA, field@BBBB */ 10 movl rSELF,%ecx 11 movzwl 2(rPC),%eax # eax<- field ref BBBB 12 movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 13 movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 14 #if defined(WITH_JIT) 15 movl %ecx, TMP_SPILL1(%ebp) 16 lea (%ecx,%eax,4),%ecx 17 movl %ecx, TMP_SPILL2(%ebp) 18 movl TMP_SPILL1(%ebp), %ecx 19 #endif 20 movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 21 testl %eax,%eax # resolved entry null? 22 je .L${opcode}_resolve # if not, make it so 23 .L${opcode}_finish: # field ptr in eax 24 movl offStaticField_value(%eax),%ecx # ecx<- lsw 25 movl 4+offStaticField_value(%eax),%eax # eax<- msw 26 SET_VREG_WORD %ecx rINST 0 27 FETCH_INST_OPCODE 2 %ecx 28 SET_VREG_WORD %eax rINST 1 29 ADVANCE_PC 2 30 GOTO_NEXT_R %ecx 31 32 /* 33 * Go resolve the field 34 */ 35 .L${opcode}_resolve: 36 movl rSELF,%ecx 37 movzwl 2(rPC),%eax # eax<- field ref BBBB 38 movl offThread_method(%ecx),%ecx # ecx<- current method 39 EXPORT_PC # could throw, need to export 40 movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 41 movl %eax,OUT_ARG1(%esp) 42 movl %ecx,OUT_ARG0(%esp) 43 SPILL(rIBASE) 44 call dvmResolveStaticField # eax<- resolved StaticField ptr 45 UNSPILL(rIBASE) 46 testl %eax,%eax 47 je common_exceptionThrown # no, handle exception 48 #if defined(WITH_JIT) 49 movl TMP_SPILL2(%ebp), %ecx 50 SPILL(rIBASE) 51 call common_verifyField 52 UNSPILL(rIBASE) 53 #endif 54 jmp .L${opcode}_finish # success, continue 55