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