1*25693Ssam/* Kdivd.s 1.3 86/01/05 */ 224119Ssam 3*25693Ssam#include "../tahoemath/fp.h" 4*25693Ssam#include "../tahoemath/Kfp.h" 5*25693Ssam#include "../tahoe/SYS.h" 624119Ssam 725664Ssam#define HIDDEN 23 # here we count from 0 not from 1 as in fp.h 824119Ssam 924119Ssam .text 1025664SsamENTRY(Kdivd, R9|R8|R7|R6|R5|R4|R3|R2) 1124119Ssam clrl r3 # r3 - sign: 0 for positive,1 for negative. 1224119Ssam movl 4(fp),r0 1324119Ssam jgeq 1f 1424119Ssam movl $1,r3 1524119Ssam1: movl 12(fp),r2 1624119Ssam jgeq 2f 1724119Ssam bbc $0,r3,1f # seconed operand is negative. 1824119Ssam clrl r3 # if first was negative, make result positive. 1924119Ssam jmp 2f 2024119Ssam1: movl $1,r3 # if first was positive, make result negative. 2124119Ssam2: andl2 $EXPMASK,r0 # compute first 'pure'exponent. 2224119Ssam jeql retz 2324119Ssam shrl $EXPSHIFT,r0,r0 2424119Ssam subl2 $BIAS,r0 2524119Ssam andl2 $EXPMASK,r2 # compute seconed 'pure'exponent. 2624119Ssam jeql retz2 2724119Ssam shrl $EXPSHIFT,r2,r2 2824119Ssam subl2 $BIAS,r2 2924119Ssam subl3 r2,r0,r2 # subtruct the exponents. 3024119Ssam addl2 $BIAS,r2 3124119Ssam jleq underf 3224119Ssam # normalization can make the exp. smaller. 3324119Ssam # 3424119Ssam # We have the sign in r3,the exponent in r2,now is the time to 3524119Ssam # perform the division... 3624119Ssam # 3724119Ssam # fetch dividend. (r4,r5) 3824119Ssam andl3 $(0!(EXPMASK | SIGNBIT)),4(fp),r4 3924119Ssam orl2 $(0!CLEARHID),r4 4024119Ssam movl 8(fp),r5 4124119Ssam 4224119Ssam # fetch divisor : (r6,r7) 4324119Ssam andl3 $(0!(EXPMASK | SIGNBIT)),12(fp),r6 4424119Ssam orl2 $(0!CLEARHID),r6 4524119Ssam movl 16(fp),r7 4624119Ssam 4724119Ssam movl $0,r0 # init r0,r1 to be zeros 4824119Ssam movl $0,r1 4924119Ssam movl $(0!CLEARHID),r8# r8 first bit to set (if). 5024119Ssam shll $1,r8,r8 # to have one more bit,because we might 5124119Ssam # have to shift left to normelize. 5224119Ssam movl $0,r9 5324119Ssam 5424119Ssam2: 5524119Ssam subl2 r7,r5 5624119Ssam sbwc r6,r4 5724119Ssam jgeq 1f 5824119Ssam addl2 r7,r5 5924119Ssam adwc r6,r4 6024119Ssam shlq $1,r4,r4 6124119Ssam shrq $1,r8,r8 6224119Ssam jeql over 6324119Ssam jmp 2b 6424119Ssam1: 6524119Ssam orl2 r8,r0 6624119Ssam orl2 r9,r1 6724119Ssam shlq $1,r4,r4 6824119Ssam shrq $1,r8,r8 6924119Ssam jneq 2b 7024119Ssam 7124119Ssamover: 7224119Ssam pushl 20(fp) 7325664Ssam callf $8,_Kfnorm 7424119Ssamsign: 7524119Ssam1: bbc $0,r3,done 7624119Ssam orl2 $SIGNBIT,r0 7724119Ssamdone: ret 7824119Ssam 7924119Ssamretz: 8024119Ssam clrl r0 8124119Ssam clrl r1 8224119Ssam ret 8324119Ssam 8424119Ssamretz2: bbc $31,12(fp),z_div 8524119Ssam clrl r0 8624119Ssam clrl r1 8724119Ssam ret 8824119Ssamunderf: 8924119Ssam orl2 $HFS_UNDF,*20(fp) 9024119Ssam ret 9124119Ssamz_div: 9224119Ssam orl2 $HFS_DIVZ,*20(fp) 9324119Ssam ret 94