OP_IGET_WIDE.S revision 9f601a917c8878204482c37aec7005054b6776fa
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     * 64-bit instance field get.
8     *
9     */
10    /* op vA, vB, field@CCCC */
11    movl    rSELF,%ecx
12    movzwl  2(rPC),%edx                         # edx<- 0000CCCC
13    movl    offThread_methodClassDex(%ecx),%eax   # eax<- DvmDex
14    movzbl  rINSTbl,%ecx                        # ecx<- BA
15    sarl    $$4,%ecx                            # ecx<- B
16    movl    offDvmDex_pResFields(%eax),%eax     # eax<- pDvmDex->pResFields
17    andb    $$0xf,rINSTbl                       # rINST<- A
18    GET_VREG_R %ecx %ecx                        # ecx<- fp[B], the object ptr
19    movl    (%eax,%edx,4),%eax                  # resolved entry
20    testl   %eax,%eax                           # is resolved entry null?
21    jne     .L${opcode}_finish                  # no, already resolved
22    movl    %edx,OUT_ARG1(%esp)                 # for dvmResolveInstField
23    movl    rSELF,%edx
24    jmp     .L${opcode}_resolve
25%break
26
27
28.L${opcode}_resolve:
29    EXPORT_PC
30    movl    offThread_method(%edx),%edx           # edx<- current method
31    movl    offMethod_clazz(%edx),%edx          # edx<- method->clazz
32    SPILL_TMP1(%ecx)                            # save objpointer across call
33    movl    rPC,OUT_ARG0(%esp)                  # pass in method->clazz
34    call    dvmResolveInstField                 #  ... to dvmResolveInstField
35    UNSPILL_TMP1(%ecx)
36    testl   %eax,%eax                           # returns InstrField ptr
37    jne     .L${opcode}_finish
38    jmp     common_exceptionThrown
39
40.L${opcode}_finish:
41    /*
42     * Currently:
43     *   eax holds resolved field
44     *   ecx holds object
45     *   rINST holds A
46     */
47    movl    offInstField_byteOffset(%eax),%eax  # eax<- byte offset of field
48    testl   %ecx,%ecx                           # object null?
49    je      common_errNullObject                # object was null
50    leal    (%ecx,%eax,1),%eax                  # eax<- address of field
51    movl    (%eax),%ecx                         # ecx<- lsw
52    movl    4(%eax),%eax                        # eax<- msw
53    FETCH_INST_OPCODE 2 %edx
54    SET_VREG_WORD %ecx rINST 0
55    SET_VREG_WORD %eax rINST 1
56    ADVANCE_PC 2
57    GOTO_NEXT_R %edx
58