%default {"result":"","rem":"0"} | |
/* | |
* 32-bit div/rem "lit8" binary operation. Handles special case of | |
* op0=minint & op1=-1 | |
*/ | |
/* div/rem/lit8 vAA, vBB, #+CC */ | |
movzbq 2(rPC), %rax # eax <- BB | |
movsbl 3(rPC), %ecx # ecx <- ssssssCC | |
GET_VREG %eax, %rax # eax <- rBB | |
testl %ecx, %ecx | |
je common_errDivideByZero | |
cmpl $$-1, %ecx | |
je 2f | |
cdq # rax <- sign-extended of eax | |
idivl %ecx | |
1: | |
SET_VREG $result, rINSTq # vA <- result | |
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 | |
2: | |
.if $rem | |
xorl $result, $result | |
.else | |
negl $result | |
.endif | |
jmp 1b |