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 * Redistribution and use in source and binary forms are permitted 9 * provided that this notice is preserved and that due credit is given 10 * to the University of California at Berkeley. The name of the University 11 * may not be used to endorse or promote products derived from this 12 * software without specific prior written permission. This software 13 * is provided ``as is'' without express or implied warranty. 14 */ 15 16#if defined(LIBC_SCCS) && !defined(lint) 17_sccsid:.asciz "@(#)udiv.s 1.3 (Berkeley) 05/23/88" 18#endif /* LIBC_SCCS and not lint */ 19 20/* 21 * Unsigned divide. 22 * 23 * udiv(dividend, divisor) 24 */ 25#include "DEFS.h" 26 27ASENTRY(udiv, 0) 28 bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 29 jeql 1f 30 cmpl 8(fp),4(fp) # if (divisor > dividend ) 31 jlequ 2f 32 clrl r0 # return(0); 33 ret 342: # else 35 movl $1,r0 # return(1);} 36 ret 371: 38 clrl r2 # return(dividend/divisor); 39 movl 4(fp),r3 40 ediv 8(fp),r2,r0,r1 41 ret 42 43/* 44 * audiv(dividendp, divisor) -- like udiv but uses address of dividend. 45 * Implements /= avoiding side effects in the dividend expression. 46 */ 47ASENTRY(audiv, 0) 48 bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 49 jeql 1f 50 cmpl 8(fp),*4(fp) # if (divisor > dividend ) 51 jlequ 2f 52 clrl r0 # return(0); 53 jbr 3f 542: # else 55 movl $1,r0 # return(1);} 56 jbr 3f 571: 58 clrl r2 # return(dividend/divisor); 59 movl *4(fp),r3 60 ediv 8(fp),r2,r0,r1 613: 62 movl r0,*4(fp) 63 ret 64