• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%default {"result":"","special":""}
2/*
3 * 32-bit binary div/rem operation.  Handles special case of op0=minint and
4 * op1=-1.
5 */
6    /* div/rem/lit16 vA, vB, #+CCCC */
7    /* Need A in rINST, ssssCCCC in ecx, vB in eax */
8    movzbl  rINSTbl, %eax                   # eax <- 000000BA
9    sarl    $$4, %eax                       # eax <- B
10    GET_VREG %eax, %eax                     # eax <- vB
11    movswl  2(rPC), %ecx                    # ecx <- ssssCCCC
12    andb    $$0xf, rINSTbl                  # rINST <- A
13    testl   %ecx, %ecx
14    je      common_errDivideByZero
15    cmpl    $$-1, %ecx
16    jne     .L${opcode}_continue_div
17    cmpl    $$0x80000000, %eax
18    jne     .L${opcode}_continue_div
19    movl    $special, %eax
20    SET_VREG %eax, rINST
21    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
22
23.L${opcode}_continue_div:
24    mov     rIBASE, LOCAL0(%esp)
25    cltd
26    idivl   %ecx
27    SET_VREG $result, rINST
28    mov     LOCAL0(%esp), rIBASE
29    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
30