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