$$divI, $$divoI

Single precision divide for signed binary integers.

The quotient is truncated towards zero.  The sign of the quotient is the XOR of the signs of the dividend and divisor.  Divide by zero is trapped.  Divide of -2**31 by -1 is trapped for $$divoI but not for $$divI.

INPUT REGISTERS

.  arg0 == dividend . arg1 == divisor . mrp == return pc . sr0 == return space when called externally

OUTPUT REGISTERS

.  arg0 = undefined . arg1 = undefined . ret1 = quotient

OTHER REGISTERS AFFECTED

.  r1 = undefined

SIDE EFFECTS

.  Causes a trap under the following conditions: . divisor is zero (traps with ADDIT,= 0,25,0) . dividend==-2**31 and divisor==-1 and routine is $$divoI . (traps with ADDO 26,25,0) . Changes memory at the following places: . NONE

PERMISSIBLE CONTEXT

.  Unwindable.  . Suitable for internal or external millicode.  . Assumes the special millicode register conventions.

DISCUSSION

.  Branchs to other millicode routines using BE . $$div_# for # being 2,3,4,5,6,7,8,9,10,12,14,15 . . For selected divisors, calls a divide by constant routine written by . Karl Pettis.  Eligible divisors are 1..15 excluding 11 and 13.  . . The only overflow case is -2**31 divided by -1.  . Both routines return -2**31 but only $$divoI traps.