|
|
1.1 root 1: /* Kcvtfl.s 1.3 86/01/05 */
2:
3: #include "../tahoemath/fp.h"
4: #include "../tahoe/SYS.h"
5:
6: .text
7: ENTRY(Kcvtfl, R5|R4|R3|R2)
8: clrl r1
9: clrl r4 # r4 - negative flag.
10: clrl r2 # r2 - exponent.
11: movl 4(fp),r0 # fetch operand.
12: movl r0,r5 # need another copy.
13: jeql retzero # return zero.
14: jgtr positive
15: mnegl r0,r0
16: jvs retmin # return minimum integer.
17: incl r4 # remember it was negative.
18: movl r0,r5 # remember the negated value.
19: #
20: #Compute exponent:
21: #
22: positive:
23: ffs r0,r1
24: incl r1
25: addl2 r1,r2
26: shrl r1,r0,r0
27: jneq positive # look for more set bits.
28: #
29: #we have the exponent in r2.
30: #
31: movl r5,r0 # r0 will hold the resulting f.p. number.
32: #
33: #Shift the fraction part to its proper place:
34: #
35: subl3 r2,$HID_POS,r3
36: jlss shiftr # if less then zero we have to shift right.
37: shll r3,r0,r0 # else we shift left.
38: jmp shifted
39: shiftr:
40: mnegl r3,r3
41: shrl r3,r0,r0
42: shifted:
43: andl2 $CLEARHID,r0 # clear the hidden bit.
44: shal $EXPSHIFT,r2,r2 # shift the exponent to its proper place.
45: orl2 $EXPSIGN,r2 # set the exponent sign bit(to bias it).
46: orl2 r2,r0 # combine exponent & fraction.
47: bbc $0,r4,sign_ok # do we have to set the sign bit?
48: orl2 $SIGNBIT,r0 # yes...
49: sign_ok:
50: ret
51:
52: retzero:
53: clrl r0
54: ret
55:
56: retmin:
57: movl $0xd0000000,r0
58: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.