129702Ssam#ifdef LIBC_SCCS 2*32977Sdonn .asciz "@(#)udiv.s 1.2 (Berkeley/CCI) 12/11/87" 329702Ssam#endif LIBC_SCCS 429702Ssam 529702Ssam/* 629702Ssam * Unsigned divide. 729702Ssam * 829702Ssam * udiv(dividend, divisor) 929702Ssam */ 1029702Ssam#include "DEFS.h" 1129702Ssam 1229702SsamASENTRY(udiv, 0) 1329702Ssam bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 1429702Ssam jeql 1f 1529702Ssam cmpl 8(fp),4(fp) # if (divisor > dividend ) 1629702Ssam jlequ 2f 1729702Ssam clrl r0 # return(0); 1829702Ssam ret 1929702Ssam2: # else 2029702Ssam movl $1,r0 # return(1);} 2129702Ssam ret 2229702Ssam1: 23*32977Sdonn clrl r2 # return(dividend/divisor); 24*32977Sdonn movl 4(fp),r3 25*32977Sdonn ediv 8(fp),r2,r0,r1 2629702Ssam ret 27*32977Sdonn 28*32977Sdonn/* 29*32977Sdonn * audiv(dividendp, divisor) -- like udiv but uses address of dividend. 30*32977Sdonn * Implements /= avoiding side effects in the dividend expression. 31*32977Sdonn */ 32*32977SdonnASENTRY(audiv, 0) 33*32977Sdonn bitl $0x80000000,8(fp) # if (divisor & 0x80000000){ 34*32977Sdonn jeql 1f 35*32977Sdonn cmpl 8(fp),*4(fp) # if (divisor > dividend ) 36*32977Sdonn jlequ 2f 37*32977Sdonn clrl r0 # return(0); 38*32977Sdonn jbr 3f 39*32977Sdonn2: # else 40*32977Sdonn movl $1,r0 # return(1);} 41*32977Sdonn jbr 3f 42*32977Sdonn1: 43*32977Sdonn clrl r2 # return(dividend/divisor); 44*32977Sdonn movl *4(fp),r3 45*32977Sdonn ediv 8(fp),r2,r0,r1 46*32977Sdonn3: 47*32977Sdonn movl r0,*4(fp) 48*32977Sdonn ret 49