1/*- 2 * Copyright (c) 1991 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8#if defined(LIBC_SCCS) && !defined(lint) 9 .asciz "@(#)udiv.s 5.5 (Berkeley) 04/08/91" 10#endif /* LIBC_SCCS and not lint */ 11 12/* 13 * Unsigned division, PCC flavor. 14 * udiv() takes an ordinary dividend/divisor pair; 15 * audiv() takes a pointer to a dividend and an ordinary divisor. 16 */ 17 18#include "DEFS.h" 19 20#define DIVIDEND 4(ap) 21#define DIVISOR 8(ap) 22 23ASENTRY(udiv,0) 24 movl DIVISOR,r2 25 jlss Leasy # big divisor: settle by comparison 26 movl DIVIDEND,r0 27 jlss Lhard # big dividend: extended division 28 divl2 r2,r0 # small divisor and dividend: signed division 29 ret 30Lhard: 31 clrl r1 32 ediv r2,r0,r0,r1 33 ret 34Leasy: 35 cmpl DIVIDEND,r2 36 jgequ Lone # if dividend is as big or bigger, return 1 37 clrl r0 # else return 0 38 ret 39Lone: 40 movl $1,r0 41 ret 42 43ASENTRY(audiv,0) 44 movl DIVIDEND,r3 45 movl DIVISOR,r2 46 jlss La_easy # big divisor: settle by comparison 47 movl (r3),r0 48 jlss La_hard # big dividend: extended division 49 divl2 r2,r0 # small divisor and dividend: signed division 50 movl r0,(r3) # leave the value of the assignment in r0 51 ret 52La_hard: 53 clrl r1 54 ediv r2,r0,r0,r1 55 movl r0,(r3) 56 ret 57La_easy: 58 cmpl (r3),r2 59 jgequ La_one # if dividend is as big or bigger, return 1 60 clrl r0 # else return 0 61 clrl (r3) 62 ret 63La_one: 64 movl $1,r0 65 movl r0,(r3) 66 ret 67