Home | History | Annotate | Download | only in x86
      1 %default {"result":"","special":""}
      2 /*
      3  * 32-bit div/rem "lit8" binary operation.  Handles special case of
      4  * op0=minint & op1=-1
      5  */
      6     /* div/rem/lit8 vAA, vBB, #+CC */
      7     movzbl  2(rPC), %eax                    # eax <- BB
      8     movsbl  3(rPC), %ecx                    # ecx <- ssssssCC
      9     GET_VREG  %eax, %eax                    # eax <- rBB
     10     testl   %ecx, %ecx
     11     je      common_errDivideByZero
     12     cmpl    $$0x80000000, %eax
     13     jne     .L${opcode}_continue_div
     14     cmpl    $$-1, %ecx
     15     jne     .L${opcode}_continue_div
     16     movl    $special, %eax
     17     SET_VREG %eax, rINST
     18     ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
     19 
     20 .L${opcode}_continue_div:
     21     mov     rIBASE, LOCAL0(%esp)
     22     cltd
     23     idivl   %ecx
     24     SET_VREG $result, rINST
     25     mov     LOCAL0(%esp), rIBASE
     26     ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
     27