| %default {"result":"","rem":"0"} |
| /* |
| * 32-bit binary div/rem operation. Handles special case of op1=-1. |
| */ |
| /* div/rem/lit16 vA, vB, #+CCCC */ |
| /* Need A in rINST, ssssCCCC in ecx, vB in eax */ |
| movl rINST, %eax # rax <- 000000BA |
| sarl $$4, %eax # eax <- B |
| GET_VREG %eax, %rax # eax <- vB |
| movswl 2(rPC), %ecx # ecx <- ssssCCCC |
| andb $$0xf, rINSTbl # rINST <- A |
| testl %ecx, %ecx |
| jz 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 |