redo include files for kernel reorg
[unix-history] / usr / src / sys / tahoe / math / Kfnorm.s
CommitLineData
a6730a00 1/* Kfnorm.s 1.4 90/12/04 */
3c2fd3a8 2
a6730a00
KB
3#include "../math/fp.h"
4#include "../math/Kfp.h"
9d1834ba 5#include "../tahoe/SYS.h"
3c2fd3a8
SL
6
7 .text
2b252132 8ENTRY(Kfnorm, R6|R5|R4|R3|R2)
3c2fd3a8
SL
9 # clrl r1
10 movl r0,r4 # copy to temporary.
11 jneq inr0
12 movl r1,r5
13 clrl r3 # r3 - pos of m.s.b
14inr1: ffs r5,r6
15 incl r6
16 addl2 r6,r3
17 shrl r6,r5,r5
18 jneq inr1
19 cmpl $0,r3
20 jeql retzero
21 jmp cmpshift
22inr0: movl $32,r3
23inr00: ffs r4,r6
24 incl r6
25 addl2 r6,r3
26 shrl r6,r4,r4
27 jneq inr00
28
29cmpshift:
30 # compute the shift (r4).
31 subl3 r3,$HID_R0R1,r4
32 jlss shiftr # if less then zero we shift right.
33 shlq r4,r0,r0 # else we shift left.
34 subl2 r4,r2 # uodate exponent.
35 jleq underflow # if less then 0 (biased) it is underflow.
36 jmp combine # go to combine exponent and fraction.
37shiftr:
38 mnegl r4,r4
39 shrq r4,r0,r0 # shift right.
40 addl2 r4,r2 # update exponent
41 cmpl r2,$256
42 jgeq overflow # check for overflow.
43combine:
44 andl2 $CLEARHID,r0 # clear the hidden bit.
45 shal $EXPSHIFT,r2,r2 # shift the exponent to its proper place.
46 orl2 r2,r0
47 ret
48
49underflow:
50 clrl r0
51 orl2 $HFS_UNDF,*4(fp)
52 ret
53
54overflow:
55 orl2 $HFS_OVF,*4(fp)
56 ret
57retzero:
58 clrl r0
59 clrl r1
60 ret