4928fa5f49884f971ebdf7b01fc28e08718b370c
[fw/sdcc] / device / lib / _fsrshift.c
1 #define SDCC_FLOAT_LIB
2 #include <float.h>
3
4
5 static void dummy(void) _naked
6 {
7         _asm
8         .globl  fs_rshift_a
9 fs_rshift_a:
10         jz      00020$
11         mov     r0, a
12         add     a, exp_a        // adjust exponent
13         jnc     00001$
14         mov     a, #255         // don't roll over
15 00001$:
16         mov     exp_a, a
17 #ifdef FLOAT_SHIFT_SPEEDUP
18         mov     a, r0
19         add     a, #248
20         jnc     00003$
21         xch     a, r4
22         xch     a, r3
23         xch     a, r2
24         mov     r1, a
25         clr     a
26         xch     a, r4
27         //mov   r1, ar2         // avoid dependence on register bank
28         //mov   r2, ar3
29         //mov   r3, ar4
30         //mov   r4, #0
31         add     a, #248
32         jnc     00003$
33         xch     a, r3
34         xch     a, r2
35         mov     r1, a
36         clr     a
37         xch     a, r3
38         //mov   r1, ar2
39         //mov   r2, ar3
40         //mov   r3, #0
41         add     a, #248
42         jnc     00003$
43         xch     a, r2
44         mov     r1, a
45         clr     a
46         xch     a, r2
47         //mov   r1, ar2
48         //mov   r2, #0
49         add     a, #248
50         jnc     00003$
51         mov     r1, #0
52         ret
53 00003$:
54         add     a, #8
55         jz      00020$
56         mov     r0, a
57 #endif
58 00005$:
59         clr     c
60         mov     a, r4
61         rrc     a
62         mov     r4, a
63         mov     a, r3
64         rrc     a
65         mov     r3, a
66         mov     a, r2
67         rrc     a
68         mov     r2, a
69         mov     a, r1
70         rrc     a
71         mov     r1, a
72         djnz    r0, 00005$
73 00020$:
74         ret
75         _endasm;
76 }
77