+#include "fp.h"
+#include "fp_in_krnl.h"
+
+ .text
+ .globl _Kcvtlf # _Kcvtlf(acc_most,acc_least,op_most,op_least,hfs)
+_Kcvtlf: .word 0x003c # we use r2,r3,r4,r5
+
+ #
+ #Some initializations:
+ #
+ clrl r1
+ clrl r4 # r4 - negative flag.
+ clrl r2 # r2 - exponent.
+ movl 12(fp),r0 # fetch operand.
+ movl r0,r5 # need another copy.
+ jeql retzero # return zero.
+ jgtr positive
+ mnegl r0,r0
+ jvs retmin # return minimum integer.
+ incl r4 # remember it was negative.
+ movl r0,r5 # remember the negated value.
+ #
+ #Compute exponent:
+ #
+positive:
+ ffs r0,r1
+ incl r1
+ addl2 r1,r2
+ shrl r1,r0,r0
+ jneq positive # look for more set bits.
+ #
+ #we have the exponent in r2.
+ #
+ movl r5,r0 # r0 will hold the resulting f.p. number.
+ #
+ #Shift the fraction part to its proper place:
+ #
+ subl3 r2,$HID_POS,r3
+ jlss shiftr # if less then zero we have to shift right.
+ shll r3,r0,r0 # else we shift left.
+ jmp shifted
+shiftr:
+ mnegl r3,r3
+ shrl r3,r0,r0
+shifted:
+ andl2 $CLEARHID,r0 # clear the hidden bit.
+ shal $EXPSHIFT,r2,r2 # shift the exponent to its proper place.
+ orl2 $EXPSIGN,r2 # set the exponent sign bit(to bias it).
+ orl2 r2,r0 # combine exponent & fraction.
+ bbc $0,r4,sign_ok # do we have to set the sign bit?
+ orl2 $SIGNBIT,r0 # yes...
+sign_ok:
+ ret
+
+retzero:
+ clrl r0
+ ret
+
+retmin:
+ movl $0xd0000000,r0
+ ret
+
+
+