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 movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 15 testl %eax,%eax # resolved entry null? 16 je .L${opcode}_resolve # if not, make it so 17.L${opcode}_finish: # field ptr in eax 18 movl offStaticField_value(%eax),%ecx # ecx<- lsw 19 movl 4+offStaticField_value(%eax),%eax # eax<- msw 20 SET_VREG_WORD %ecx rINST 0 21 FETCH_INST_OPCODE 2 %ecx 22 SET_VREG_WORD %eax rINST 1 23 ADVANCE_PC 2 24 GOTO_NEXT_R %ecx 25 26 /* 27 * Go resolve the field 28 */ 29.L${opcode}_resolve: 30 movl rSELF,%ecx 31 movzwl 2(rPC),%eax # eax<- field ref BBBB 32 movl offThread_method(%ecx),%ecx # ecx<- current method 33 EXPORT_PC # could throw, need to export 34 movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 35 movl %eax,OUT_ARG1(%esp) 36 movl %ecx,OUT_ARG0(%esp) 37 SPILL(rIBASE) 38 call dvmResolveStaticField # eax<- resolved StaticField ptr 39 UNSPILL(rIBASE) 40 testl %eax,%eax 41 jne .L${opcode}_finish # success, continue 42 jmp common_exceptionThrown # no, handle exception 43