Home | History | Annotate | Download | only in x86
      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/2addr vA, vB */
      7     movzx    rINSTbl,%ecx          # eax<- BA
      8     SPILL(rIBASE)
      9     sarl     $$4,%ecx              # ecx<- B
     10     GET_VREG_R %ecx %ecx           # eax<- vBB
     11     andb     $$0xf,rINSTbl         # rINST<- A
     12     GET_VREG_R %eax rINST          # eax<- vBB
     13     cmpl     $$0,%ecx
     14     je       common_errDivideByZero
     15     cmpl     $$-1,%ecx
     16     jne      .L${opcode}_continue_div2addr
     17     cmpl     $$0x80000000,%eax
     18     jne      .L${opcode}_continue_div2addr
     19     movl     $special,$result
     20     SET_VREG $result rINST
     21     UNSPILL(rIBASE)
     22     FETCH_INST_OPCODE 1 %ecx
     23     ADVANCE_PC 1
     24     GOTO_NEXT_R %ecx
     25 
     26 .L${opcode}_continue_div2addr:
     27     cltd
     28     idivl   %ecx
     29     SET_VREG $result rINST
     30     UNSPILL(rIBASE)
     31     FETCH_INST_OPCODE 1 %ecx
     32     ADVANCE_PC 1
     33     GOTO_NEXT_R %ecx
     34