1/* Kcvtdl.s 1.2 86/01/03 */ 2 3#include "fp.h" 4#include "Kfp.h" 5#include "SYS.h" 6 7 8 .text 9 .globl _Kcvtdl 10 .globl _Kcvtdu 11_Kcvtdu: 12_Kcvtdl: 13 .word R5|R4|R3|R2 14 15 # 16 #Some initializations: 17 # 18 clrl r3 # r3 - negative flag. 19 movl 4(fp),r0 # fetch operand. 20 movl 8(fp),r1 21 # 22 #get exponent 23 # 24 andl3 $EXPMASK,r0,r2 # r2 will hold the exponent. 25 jeql retzero 26 cmpl $TWO_EXP,r2 # if exponent is less then -2,return zero. 27 jgtr retzero 28 andl2 $0!EXPSIGN,r2 # turn off biased exponent sign 29 shrl $EXPSHIFT,r2,r2 30 # 31 #get fraction 32 # 33 bbc $31,r0,positive # if negative remember it. 34 incl r3 35positive: 36 # clear the non fraction parts. 37 andl2 $(0!(EXPMASK | SIGNBIT)),r0 38 # add the hidden bit. 39 orl2 $(0!CLEARHID),r0 40 subl2 $24,r2 # compute the shift. 41 jgtr shift_left 42 mnegl r2,r2 43 shrl r2,r0,r0 # shift right. 44 jmp shifted 45shift_left: 46 cmpl r2,$7 47 jgtr overflow 48go_on: shlq r2,r0,r0 # shift right. 49shifted: 50 bbc $0,r3,done # check for negative 51 mnegl r0,r0 52done: 53 ret 54 55retzero: 56 clrl r0 57 ret 58overflow: 59 ret 60