OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / dalvik / vm / mterp / x86 / OP_AGET.S
1 %default { "load":"movl", "shift":"4" }
2 %verify "executed"
3     /*
4      * Array get, 32 bits or less.  vAA <- vBB[vCC].
5      *
6      * for: aget, aget-object, aget-boolean, aget-byte, aget-char, aget-short
7      */
8     /* op vAA, vBB, vCC */
9     movzbl    2(rPC),%eax               # eax<- BB
10     movzbl    3(rPC),%ecx               # ecx<- CC
11     movzbl    rINST_HI,rINST_FULL       # rINST_FULL<- AA
12     GET_VREG(%eax,%eax)                 # eax<- vBB (array object)
13     GET_VREG(%ecx,%ecx)                 # ecs<- vCC (requested index)
14     testl     %eax,%eax                 # null array object?
15     je        common_errNullObject      # bail if so
16     cmpl      offArrayObject_length(%eax),%ecx
17     jae       common_errArrayIndex      # index >= length, bail
18     $load     offArrayObject_contents(%eax,%ecx,$shift),%eax
19     movl      rINST_FULL,%ecx
20     FETCH_INST_WORD(2)
21     SET_VREG(%eax,%ecx)
22     ADVANCE_PC(2)
23     GOTO_NEXT