1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed"
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Array put, 32 bits or less.  vBB[vCC] <- vAA
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * for: aput, aput-object, aput-boolean, aput-byte, aput-char, aput-short
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* op vAA, vBB, vCC */
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    2(rPC),%eax               # eax<- BB
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    3(rPC),%ecx               # ecx<- CC
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    rINST_HI,rINST_FULL       # rINST_FULL<- AA
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(%eax,%eax)                 # eax<- vBB (array object)
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(%ecx,%ecx)                 # ecs<- vCC (requested index)
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(rINST_FULL,rINST_FULL)     # rINST_FULL<- vAA
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax                 # null array object?
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errNullObject      # bail if so
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl      offArrayObject_length(%eax),%ecx
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jb        .L${opcode}_continue
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp       common_errArrayIndex      # index >= length, bail
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* On entry:
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   eax<- array object
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   ecx<- index
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *   rINST_FULL<- vAA
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_continue:
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    leal      offArrayObject_contents(%eax,%ecx,4),%ecx
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     rINST_FULL,rINST_FULL     # storing null reference?
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        .L${opcode}_skip_check
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL(rPC)
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL_TMP(%ecx)
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offObject_clazz(%eax),%eax # eax<- arrayObj->clazz
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      offObject_clazz(rINST_FULL),%ecx # ecx<- obj->clazz
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %eax,OUT_ARG1(%esp)
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      %ecx,OUT_ARG0(%esp)
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call      dvmCanPutArrayElement     # test object type vs. array type
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL(rPC)
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL_TMP(%ecx)
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl     %eax,%eax
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je        common_errArrayStore
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_skip_check:
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl      rINST_FULL,(%ecx)
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST_WORD(2)
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ADVANCE_PC(2)
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48