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      * Jumbo 32-bit SGET handler.
      7      *
      8      * for: sget/jumbo, sget-object/jumbo, sget-boolean/jumbo, sget-byte/jumbo,
      9      *      sget-char/jumbo, sget-short/jumbo
     10      */
     11     /* exop vBBBB, field@AAAAAAAA */
     12     movl      rSELF,%ecx
     13     movl      offThread_methodClassDex(%ecx),%ecx  # ecx<- DvmDex
     14     movl      2(rPC),%eax                        # eax<- field ref AAAAAAAA
     15     movl      offDvmDex_pResFields(%ecx),%ecx    # ecx<- dvmDex->pResFields
     16     movl      (%ecx,%eax,4),%eax                 # eax<- resolved StaticField ptr
     17     testl     %eax,%eax                          # resolved entry null?
     18     je        .L${opcode}_resolve                # if not, make it so
     19 .L${opcode}_finish:     # field ptr in eax
     20     movl      offStaticField_value(%eax),%eax
     21     FETCH_INST_OPCODE 4 %ecx
     22     ADVANCE_PC 4
     23     SET_VREG %eax rINST
     24     GOTO_NEXT_R %ecx
     25 
     26     /*
     27      * Go resolve the field
     28      */
     29 .L${opcode}_resolve:
     30     movl     rSELF,%ecx
     31     movl     2(rPC),%eax                        # eax<- field ref AAAAAAAA
     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