Commit | Line | Data |
---|---|---|
a6730a00 | 1 | /* Kfrexpf.s 1.4 90/12/04 */ |
2b252132 | 2 | |
9d1834ba | 3 | #include "../tahoe/SYS.h" |
2b252132 | 4 | |
8d43dc87 | 5 | .text |
2b252132 | 6 | ENTRY(Kfrexpf, 0) |
8d43dc87 SL |
7 | subl3 $60,fp,sp |
8 | clrl -60(fp) # j=0; | |
9 | clrl -56(fp) # neg=0; | |
10 | tstl 4(fp) # if(x<0){ | |
2b252132 | 11 | jgeq 1f |
8d43dc87 SL |
12 | lnd 4(fp) |
13 | std 4(fp) # x = -x; | |
14 | movl $1,-56(fp) # neg=1;} | |
2b252132 SL |
15 | 1: |
16 | cmpd2 4(fp),one # if (x>1){ | |
17 | jleq 1f | |
18 | 2: | |
19 | cmpd2 4(fp),one # while(x>1){ | |
20 | jleq 3f | |
8d43dc87 SL |
21 | addl2 $1,-60(fp) # j=j+1; |
22 | pushl 16(fp) # hfs | |
2b252132 | 23 | ldd two |
8d43dc87 SL |
24 | pushd |
25 | ldd 4(fp) | |
26 | pushd | |
27 | callf $24,_Kdivd | |
28 | ldd r0 | |
29 | std 4(fp) # x= x/2; | |
2b252132 SL |
30 | jbr 2b |
31 | 1: | |
32 | cmpd2 4(fp),half # if(x<0.5){ | |
33 | jlss 2f | |
34 | jbr 3f | |
35 | 0: | |
8d43dc87 SL |
36 | subl2 $1,-60(fp) # j = j-1; |
37 | pushl 16(fp) # hfs | |
38 | ldd 4(fp) | |
39 | pushd | |
2b252132 | 40 | ldd two |
8d43dc87 SL |
41 | pushd |
42 | callf $24,_Kmuld | |
43 | ldd r0 | |
44 | std 4(fp) # x = 2*x; | |
2b252132 SL |
45 | 2: |
46 | cmpd2 4(fp),half # while (x<0.5){ | |
47 | jlss 0b | |
48 | 3: | |
49 | movl -60(fp),*12(fp) # *i=j; | |
8d43dc87 | 50 | tstl -56(fp) # if (neg) |
2b252132 | 51 | jeql 1f |
8d43dc87 SL |
52 | lnd 4(fp) |
53 | std 4(fp) | |
2b252132 SL |
54 | 1: |
55 | ldd 4(fp) | |
8d43dc87 SL |
56 | cvdf |
57 | stf r0 | |
58 | ret | |
2b252132 SL |
59 | |
60 | .data | |
61 | .align 2 | |
62 | one: .long 0x40800000, 0x00000000 # .double 1 | |
63 | two: .long 0x41000000, 0x00000000 # .double 2 | |
64 | half: .long 0x40000000, 0x00000000 # .double .5 |