xref: /original-bsd/sys/tahoe/tahoe/urem.s (revision f1656be1)
1/*
2 *	@(#)urem.s	7.1 (Berkeley) 05/21/88
3 */
4
5/*
6 * Unsigned remainder.
7 *
8 * urem(dividend, divisor)
9 */
10#include "../tahoe/SYS.h"
11
12ASENTRY(urem, 0)
13	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
14	jeql	1f
15	movl	4(fp),r0
16	cmpl	8(fp),r0		#  if (divisor <= dividend )
17	jgtru	2f
18	subl2	8(fp),r0		#       return(dividend-divisor);
192:					#  else return(dividend);}
20	ret
211:
22	clrl	r2			#  return(dividend%divisor);
23	movl	4(fp),r3
24	ediv	8(fp),r2,r1,r0
25	ret
26
27/*
28 * aurem(dividendp, divisor) -- like urem but uses address of dividend.
29 *	Implements %= avoiding side effects in the dividend expression.
30 */
31ASENTRY(aurem, 0)
32	bitl	$0x80000000,8(fp)	#  if (divisor & 0x80000000){
33	jeql	1f
34	movl	*4(fp),r0
35	cmpl	8(fp),r0		#  if (divisor <= dividend )
36	jgtru	2f
37	subl2	8(fp),r0		#       return(dividend-divisor);
38					#  else return(dividend);}
39	jbr	2f
401:
41	clrl	r2			#  return(dividend%divisor);
42	movl	*4(fp),r3
43	ediv	8(fp),r2,r1,r0
442:
45	movl	r0,*4(fp)
46	ret
47