1/* 2 * Copyright (c) 1988 Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Computer Consoles Inc. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11#if defined(LIBC_SCCS) && !defined(lint) 12 .asciz "@(#)udiv.s 5.1 (Berkeley) 01/30/91" 13#endif /* LIBC_SCCS and not lint */ 14 15/* 16 * Unsigned divide. 17 * 18 * udiv(dividend, divisor) 19 */ 20#include "DEFS.h" 21 22ASENTRY(udiv, 0) 23 bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 24 jeql 1f 25 cmpl 8(fp),4(fp) # if (divisor > dividend ) 26 jlequ 2f 27 clrl r0 # return(0); 28 ret 292: # else 30 movl $1,r0 # return(1);} 31 ret 321: 33 clrl r2 # return(dividend/divisor); 34 movl 4(fp),r3 35 ediv 8(fp),r2,r0,r1 36 ret 37 38/* 39 * audiv(dividendp, divisor) -- like udiv but uses address of dividend. 40 * Implements /= avoiding side effects in the dividend expression. 41 */ 42ASENTRY(audiv, 0) 43 bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 44 jeql 1f 45 cmpl 8(fp),*4(fp) # if (divisor > dividend ) 46 jlequ 2f 47 clrl r0 # return(0); 48 jbr 3f 492: # else 50 movl $1,r0 # return(1);} 51 jbr 3f 521: 53 clrl r2 # return(dividend/divisor); 54 movl *4(fp),r3 55 ediv 8(fp),r2,r0,r1 563: 57 movl r0,*4(fp) 58 ret 59