1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%default {"result":"","special":""} 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 32-bit binary div/rem operation. Handles special case of op0=minint and 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * op1=-1. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* div/rem/2addr vA, vB */ 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzx rINST_HI,%ecx # eax<- BA 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sarl $$4,%ecx # ecx<- B 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%ecx,%ecx) # eax<- vBB 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $$0xf,rINST_LO # rINST_FULL<- A 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_VREG(%eax,rINST_FULL) # eax<- vBB 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rPC) 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $$0,%ecx 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je common_errDivideByZero 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $$-1,%ecx 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .L${opcode}_continue_div2addr 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmpl $$0x80000000,%eax 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jne .L${opcode}_continue_div2addr 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl $special,$result 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project jmp .L${opcode}_finish_div2addr 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_continue_div2addr: 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cltd 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project idivl %ecx 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish_div2addr: 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SET_VREG($result,rINST_FULL) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rPC) 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_INST_WORD(1) 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ADVANCE_PC(1) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_NEXT 33