Home | History | Annotate | Download | only in x86
      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