16cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov%default {"result":"","rem":"0"}
26cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov/*
36cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * 32-bit div/rem "lit8" binary operation.  Handles special case of
46cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * op0=minint & op1=-1
56cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov */
66cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    /* div/rem/lit8 vAA, vBB, #+CC */
76cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    movzbq  2(rPC), %rax                    # eax <- BB
86cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    movsbl  3(rPC), %ecx                    # ecx <- ssssssCC
96cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    GET_VREG  %eax, %rax                    # eax <- rBB
106cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    testl   %ecx, %ecx
116cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    je      common_errDivideByZero
126cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    cmpl    $$-1, %ecx
136cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    je      2f
146cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    cdq                                     # rax <- sign-extended of eax
156cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    idivl   %ecx
166cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov1:
176cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    SET_VREG $result, rINSTq                # vA <- result
186cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
196cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov2:
206cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    .if $rem
216cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    xorl    $result, $result
226cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    .else
236cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    negl    $result
246cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    .endif
256cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov    jmp     1b
26