call to mcount must be callf $4,mcount
[unix-history] / usr / src / sys / tahoe / math / Kcvtdl.s
CommitLineData
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
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