1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%default { "store":"str", "shift":"2" } 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Array put, 32 bits or less. vBB[vCC] <- vAA. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note: using the usual FETCH/and/shift stuff, this fits in exactly 17 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instructions. We use a pair of FETCH_Bs instead. 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for: aput, aput-boolean, aput-byte, aput-char, aput-short 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, vBB, vCC */ 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r2, 1, 0) @ r2<- BB 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_B(r3, 1, 1) @ r3<- CC 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r0, r2) @ r0<- vBB (array object) 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r1, r3) @ r1<- vCC (requested index) 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ null array object? 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes, bail 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r0, r0, r1, lsl #$shift @ r0<- arrayObj + index*width 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r1, r3 @ compare unsigned index, length 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bcs common_errArrayIndex @ index >= length, bail 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r9) @ r2<- vAA 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project $store r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 28