summaryrefslogtreecommitdiff
path: root/vm/mterp/x86/OP_IPUT_WIDE_QUICK.S
blob: d2a1ae4c76d9d7cc5c0e19df732bc9215e931bb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
%verify "executed"
%verify "null object"
    /* For: iput-wide-quick */
    /* op vA, vB, offset@CCCC */
    movzbl    rINST_HI,%ecx             # ecx<- BA
    sarl      $$4,%ecx                  # ecx<- B
    GET_VREG(%ecx,%ecx)                 # vB (object we're operating on)
    movzwl    2(rPC),%eax               # eax<- field byte offset
    testl      %ecx,%ecx                # is object null?
    je        common_errNullObject
    leal      (%ecx,%eax,1),%ecx        # ecx<- Address of 64-bit target
    movzbl    rINST_HI,rINST_FULL
    andb      $$0xf,rINST_LO            # rINST_FULL<- A
    GET_VREG_WORD(%eax,rINST_FULL,0)    # eax<- lsw
    GET_VREG_WORD(rINST_FULL,rINST_FULL,1) # rINST_FULL<- msw
    movl      %eax,(%ecx)
    movl      rINST_FULL,4(%ecx)
    FETCH_INST_WORD(2)
    ADVANCE_PC(2)
    GOTO_NEXT