<<<--- % Author M.Ruckert LOC #100 w IS $0 return value u IS $0 1. parameter v IS $1 2. parameter s IS $2 $w$ unpacked e IS $3 f IS $4 f0 IS $5 The low 64 bit of $f$ carry IS $13 The shuttle between $f$ and $f_0$. su IS $6 $u$ unpacked eu IS $7 fu IS $8 sv IS $9 $v$ unpacked ev IS $10 fv IS $11 d IS $12 $e_u - e_v$ tmp IS $14 --->>> Flot ZSN s,u,1 Set sign SET f,0; NEG f0,u; CSNN f0,u,u $(f,f_0) \is |u|/2^{64}$. SET e,64+52+1023 Set raw exponent. JMP Normalize Normalize, round, and exit <<<--- Normalize SRU tmp,f,53; BP tmp,4F \ul{\sl N1.~Test $f$.} OR tmp,f,f0; BZ tmp,Error underflow 2H SRU tmp,f,52; BP tmp,5F \ul{\sl N2.~Is $f$ normalized?} ZSN carry,f0,1; SLU f0,f0,1 \ul{\sl N3.~Scale left.} SLU f,f,1; ADDU f,f,carry SUB e,e,1 JMP 2B 4H AND carry,f,1 \ul{\sl N4.~Scale right.} SLU carry,carry,63 SRU f0,f0,1; ADDU f0,f0,carry SRU f,f,1 ADD e,e,1 5H SETH tmp,#8000 \ul{\sl N5.~Round.} CMPU tmp,f0,tmp Compare $f_0$ to ${1\over 2}$ BOD f,Odd ZSNN carry,tmp,tmp $f_w$ is even. ADDU f,f,carry round up if $2^pf_0 > {1\over 2}$ JMP 0F Odd ZSNN carry,tmp,1 $f_w$ is odd. ADDU f,f,carry round up if $2^pf_0 \ge {1\over 2}$ 0H SET f0,0 SRU tmp,f,53; BP tmp,4B Rounding overflow SET tmp,#7FE; CMP tmp,e,tmp \ul{\sl N6.~Check $e$.} BP tmp,Error Overflow BNP e,Error Underflow SLU w,s,63 \ul{\sl N5.~Pack.} SLU tmp,e,52; OR w,w,tmp ANDNH f,#FFF0 remove hidden bit OR w,w,f SET $0,w POP 1,0 Main SET $1,77 PUSHJ $0,Flot NEG $1,33 PUSHJ $0,Flot SET $255,0 TRAP 0,Halt,0 Error SET $255,1 TRAP 0,Halt,0 --->>>