1INCLUDE "config_private.inc"
2
3IF (__CLIB_OPT_UNROLL & 0xc0)
4   SECTION smc_clib
5   SECTION smc_l
6ELSE
7   SECTION code_clib
8   SECTION code_l
9ENDIF
10
11PUBLIC l_ldi
12
13PUBLIC l_ldi_256
14PUBLIC l_ldi_128
15PUBLIC l_ldi_64
16PUBLIC l_ldi_32
17PUBLIC l_ldi_16
18PUBLIC l_ldi_8
19PUBLIC l_ldi_4
20PUBLIC l_ldi_2
21PUBLIC l_ldi_1
22
23defc l_ldi_32 = l_ldi_64 + 64
24defc l_ldi_16 = l_ldi_32 + 32
25defc l_ldi_8  = l_ldi_16 + 16
26defc l_ldi_4  = l_ldi_8  +  8
27defc l_ldi_2  = l_ldi_4  +  4
28defc l_ldi_1  = l_ldi_2  +  2
29
30l_ldi_256:
31
32   call l_ldi_128
33
34l_ldi_128:
35
36   call l_ldi_64
37
38IF (__CLIB_OPT_UNROLL & 0xc0)
39
40   jp l_ldi_64
41
42sub_14:
43
44   or a
45   ret z
46
47   ldir
48   ret
49
50PUBLIC l_ldi_loop_smc
51PUBLIC l_ldi_loop_smc_0
52PUBLIC l_ldi_loop_smc_small
53
54l_ldi_loop_smc:
55
56   ld a,b
57
58   or a
59   jp z, fine
60
61l_ldi_loop_smc_0:
62coarse:
63
64   call l_ldi_256
65
66   dec a
67   jp nz, coarse
68
69l_ldi_loop_smc_small:
70fine:
71
72   ld a,c
73
74   cp 14
75   jp c, sub_14
76
77   add a,a
78   call c, l_ldi_128
79
80   add a,a
81   call c, l_ldi_64
82
83   ret z
84
85enter_loop:
86
87   xor a
88   sub c
89   and $3f
90   add a,a
91
92   ld (active_jr + 1),a
93
94active_jr:
95
96   jr 0
97
98ENDIF
99
100l_ldi_64:
101
102   ldi
103   ldi
104   ldi
105   ldi
106   ldi
107   ldi
108   ldi
109   ldi
110
111   ldi
112   ldi
113   ldi
114   ldi
115   ldi
116   ldi
117   ldi
118   ldi
119
120   ldi
121   ldi
122   ldi
123   ldi
124   ldi
125   ldi
126   ldi
127   ldi
128
129   ldi
130   ldi
131   ldi
132   ldi
133   ldi
134   ldi
135   ldi
136   ldi
137
138   ldi
139   ldi
140   ldi
141   ldi
142   ldi
143   ldi
144   ldi
145   ldi
146
147   ldi
148   ldi
149   ldi
150   ldi
151   ldi
152   ldi
153   ldi
154   ldi
155
156   ldi
157   ldi
158   ldi
159   ldi
160   ldi
161   ldi
162   ldi
163   ldi
164
165   ldi
166   ldi
167   ldi
168   ldi
169   ldi
170   ldi
171   ldi
172   ldi
173
174l_ldi:
175
176   ret
177