26 lines
806 B
ArmAsm
26 lines
806 B
ArmAsm
%default {"result":"","special":""}
|
|
/*
|
|
* 32-bit div/rem "lit8" binary operation. Handles special case of
|
|
* op0=minint & op1=-1
|
|
*/
|
|
/* div/rem/lit8 vAA, vBB, #+CC */
|
|
movzbl 2(rPC), %eax # eax <- BB
|
|
movsbl 3(rPC), %ecx # ecx <- ssssssCC
|
|
GET_VREG %eax, %eax # eax <- rBB
|
|
testl %ecx, %ecx
|
|
je common_errDivideByZero
|
|
cmpl $$0x80000000, %eax
|
|
jne .L${opcode}_continue_div
|
|
cmpl $$-1, %ecx
|
|
jne .L${opcode}_continue_div
|
|
movl $special, %eax
|
|
SET_VREG %eax, rINST
|
|
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
|
|
|
|
.L${opcode}_continue_div:
|
|
mov rIBASE, LOCAL0(%esp)
|
|
cltd
|
|
idivl %ecx
|
|
SET_VREG $result, rINST
|
|
mov LOCAL0(%esp), rIBASE
|
|
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
|