%default {"result":"","special":""} /* * 32-bit binary div/rem operation. Handles special case of op0=minint and * op1=-1. */ /* div/rem/2addr vA, vB */ movzx rINST_HI,%ecx # eax<- BA sarl $$4,%ecx # ecx<- B GET_VREG(%ecx,%ecx) # eax<- vBB movzbl rINST_HI,rINST_FULL # rINST_FULL<- BA andb $$0xf,rINST_LO # rINST_FULL<- A GET_VREG(%eax,rINST_FULL) # eax<- vBB SPILL(rPC) cmpl $$0,%ecx je common_errDivideByZero cmpl $$-1,%ecx jne .L${opcode}_continue_div2addr cmpl $$0x80000000,%eax jne .L${opcode}_continue_div2addr movl $special,$result jmp .L${opcode}_finish_div2addr %break .L${opcode}_continue_div2addr: cltd idivl %ecx .L${opcode}_finish_div2addr: SET_VREG($result,rINST_FULL) UNSPILL(rPC) FETCH_INST_WORD(1) ADVANCE_PC(1) GOTO_NEXT