• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%verify "executed"
2%verify "null object"
3%verify "field already resolved"
4%verify "field not yet resolved"
5%verify "field cannot be resolved"
6    /*
7     * Jumbo 64-bit instance field get.
8     */
9    /* iget-wide/jumbo vBBBB, vCCCC, field@AAAA */
10    movl    rSELF,%ecx
11    SPILL(rIBASE)                               # preserve rIBASE
12    movl    2(rPC),rIBASE                       # rIBASE<- AAAAAAAA
13    movl    offThread_methodClassDex(%ecx),%eax # eax<- DvmDex
14    movzwl  8(rPC),%ecx                         # ecx<- CCCC
15    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
16    GET_VREG_R %ecx %ecx                        # ecx<- fp[CCCC], the object ptr
17    movl    (%eax,rIBASE,4),%eax                # resolved entry
18    testl   %eax,%eax                           # is resolved entry null?
19    jne     .L${opcode}_finish                  # no, already resolved
20    movl    rIBASE,OUT_ARG1(%esp)               # for dvmResolveInstField
21    movl    rSELF,rIBASE
22    EXPORT_PC
23    movl    offThread_method(rIBASE),rIBASE     # rIBASE<- current method
24    movl    offMethod_clazz(rIBASE),rIBASE      # rIBASE<- method->clazz
25    SPILL_TMP1(%ecx)                            # save objpointer across call
26    movl    rIBASE,OUT_ARG0(%esp)               # pass in method->clazz
27    call    dvmResolveInstField                 #  ... to dvmResolveInstField
28    UNSPILL_TMP1(%ecx)
29    testl   %eax,%eax                           # returns InstrField ptr
30    jne     .L${opcode}_finish
31    jmp     common_exceptionThrown
32
33.L${opcode}_finish:
34    /*
35     * Currently:
36     *   eax holds resolved field
37     *   ecx holds object
38     *   rINST holds BBBB
39     */
40    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
41    testl   %ecx,%ecx                           # object null?
42    je      common_errNullObject                # object was null
43    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
44    movl    (%eax),%ecx                         # ecx<- lsw
45    movl    4(%eax),%eax                        # eax<- msw
46    SET_VREG_WORD %ecx rINST 0
47    FETCH_INST_OPCODE 5 %ecx
48    UNSPILL(rIBASE)                             # restore rIBASE
49    SET_VREG_WORD %eax rINST 1
50    ADVANCE_PC 5
51    GOTO_NEXT_R %ecx
52