1: /*
   2:  *	@(#)urem.s	7.1 (Berkeley) 6/5/86
   3:  *
   4:  *	urem - unsigned remainder for vax-11
   5:  *
   6:  *	arguments: dividend, divisor
   7:  *	result: remainder
   8:  *	uses r0-r2
   9:  *
  10:  *	if 1 < divisor <= 2147483647, zero-extend the dividend
  11:  *	to 64 bits and let ediv do the work.  If the divisor is 1,
  12:  *	ediv will overflow if bit 31 of the dividend is on, so
  13:  *	just return 0.  If the divisor is 0, do the ediv also,
  14:  *	so it will generate the proper exception.  All other values
  15:  *	of the divisor have bit 31 on: in this case the remainder
  16:  *	must be the dividend if divisor > dividend, and the dividend
  17:  *	minus the divisor otherwise.  The comparison must be unsigned.
  18:  */
  19:         .text
  20:         .align  1
  21:         .globl  urem
  22: urem:   .word   0x0000
  23: #ifdef GPROF
  24:         jsb     mcount
  25: #endif GPROF
  26:         movl    4(ap),r0        # Dividend
  27:         movl    8(ap),r2        # Divisor
  28:         jeql    div             # If divisor=0, force exception
  29:         cmpl    r2,$1           # If divisor <= 1 (signed),
  30:         jleq    nodiv           #  no division is necessary
  31: div:    clrl    r1              # Zero-extend the dividend
  32:         ediv    r2,r0,r2,r0     # Divide.  q->r2 (discarded), r->r0
  33:         ret
  34: nodiv:  jneq    nzero           # If divisor=1, return 0
  35:         clrl    r0              #  (because doing the divide will overflow
  36:         ret                     #  if the dividend has its high bit on)
  37: nzero:  cmpl    r0,r2           # If dividend < divisor (unsigned)
  38:         jlssu   retn            #  remainder is dividend
  39:         subl2   r2,r0           #  else remainder is dividend - divisor
  40: retn:   ret

Defined functions

nodiv defined in line 34; used 1 times
  • in line 30
nzero defined in line 37; used 1 times
  • in line 34
retn defined in line 40; used 1 times
  • in line 38
urem declared in line 21; defined in line 22; used 1 times
  • in line 21
Last modified: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 375
Valid CSS Valid XHTML 1.0 Strict