1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Long integer shift. This is different from the generic 32/64-bit 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * binary operations because vAA/vBB are 64-bit but vCC (the shift 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distance) is 32-bit. Also, Dalvik requires us to mask off the low 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 6 bits of the shift distance. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* shr-long vAA, vBB, vCC */ 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r0, 1) @ r0<- CCBB 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r3, r0, #255 @ r3<- BB 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr #8 @ r0<- CC 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r3, rFP, r3, lsl #2 @ r3<- &fp[BB] 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(r2, r0) @ r2<- vCC 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project and r2, r2, #63 @ r0<- r0 & 0x3f 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r0, lsr r2 @ r0<- r2 >> r2 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rsb r3, r2, #32 @ r3<- 32 - r2 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2)) 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project subs ip, r2, #32 @ ip<- r2 - 32 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32) 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b .L${opcode}_finish 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish: 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r1, asr r2 @ r1<- r1 >> r2 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 33