Commit | Line | Data |
---|---|---|
9d1834ba | 1 | /* Kcvtdl.s 1.3 86/01/05 */ |
2b252132 | 2 | |
9d1834ba SL |
3 | #include "../tahoemath/fp.h" |
4 | #include "../tahoemath/Kfp.h" | |
5 | #include "../tahoe/SYS.h" | |
5fd8ec52 | 6 | |
5fd8ec52 SL |
7 | |
8 | .text | |
9 | .globl _Kcvtdl | |
10 | .globl _Kcvtdu | |
11 | _Kcvtdu: | |
2b252132 SL |
12 | _Kcvtdl: |
13 | .word R5|R4|R3|R2 | |
5fd8ec52 SL |
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 | |
35 | positive: | |
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 | |
45 | shift_left: | |
46 | cmpl r2,$7 | |
47 | jgtr overflow | |
48 | go_on: shlq r2,r0,r0 # shift right. | |
49 | shifted: | |
50 | bbc $0,r3,done # check for negative | |
51 | mnegl r0,r0 | |
52 | done: | |
53 | ret | |
54 | ||
55 | retzero: | |
56 | clrl r0 | |
57 | ret | |
58 | overflow: | |
59 | ret |