<<<--- % Author M.Ruckert LOC #100 Main FLOT $2,15 PUSHJ $1,ToDouble PUSHJ $0,ToSingle TRAP 0,Halt,0 --->>> PREFIX :ToDouble: x IS $0 Parameter x0 IS $2 s IS $3 Local variables e IS $4 :ToDouble SRU s,x,63 \ul{\sl Unpack.} SLU e,x,1; SRU e,x,53 ANDNH x,#FFF0 Remove sign and exponent bits. INCL e,#3FFF-#3FF \ul{\sl Convert.} SLU x0,x,64-(52-48) SRU x,x,(52-48) SLU s,s,63 \ul{\sl Pack.} SLU e,e,48; OR $1,x,s; OR $1,$1,e Return $(x_1,x_0)$. SET $0,x0 POP 2,0 PREFIX :ToSingle: x1 IS $0 Parameter x0 IS $1 s IS $2 Local variables e IS $3 f IS $4 carry IS $5 tmp IS $6 :ToSingle SLU e,x1,1; SRU e,e,49 \ul{\sl Unpack.} SRU s,x1,63 ANDNH x1,#FFFF SET tmp,#3FFF-#3FF \ul{\sl Convert.} SUB e,e,tmp BNP e,Error Underflow. SET tmp,#7FF CMP tmp,e,tmp BNN tmp,Error Overflow. SLU f,x1,(52-48) SRU tmp,x0,64-(52-48) OR f,f,tmp SLU x0,x0,52-48 SETH tmp,#8000 \ul{\sl Round.} see 4.2.1 Program A CMPU tmp,x0,tmp CSOD carry,f,1 CSEV carry,f,tmp ZSNN carry,tmp,carry ADDU f,f,carry SLU $0,s,63 \ul{\sl Pack.} SLU e,e,52; OR $0,$0,e OR $0,$0,f POP 1,0 <<<--- Error SET $255,1 TRAP 0,:Halt,0