11 assume adl=1
22
3- ;-------------------------------------------------------------------------------
4-
5- section .text
6-
7- public ___ez80_clzc
8- ___ez80_clzc:
9- ld hl, 3
10- add hl, sp
11- ld a, (hl)
12- jp __bctlz
13-
14- ;-------------------------------------------------------------------------------
15-
16- section .text
17-
18- public ___ez80_clzi48
19- ___ez80_clzi48:
20- ld hl, 6
21- add hl, sp
22- ld de, (hl)
23- dec hl
24- dec hl
25- dec hl
26- ld hl, (hl)
27- jp __i48ctlz
28-
293;-------------------------------------------------------------------------------
304
315 section .text
@@ -35,13 +9,15 @@ ___ez80_ctzc:
359 ; unoptimized
3610 ld hl, 3
3711 add hl, sp
38- ld a, (hl)
39- ld l, a
40- cpl
41- dec l
12+ ld l, (hl)
13+ xor a, a
14+ sub a, l
4215 and a, l
43- ld l, a
44- jp __bpopcnt
16+ call __bctlz
17+ bit 3, a
18+ ret nz
19+ xor a, 7
20+ ret
4521
4622;-------------------------------------------------------------------------------
4723
@@ -50,19 +26,23 @@ ___ez80_ctzc:
5026 public ___ez80_ctzi48
5127___ez80_ctzi48:
5228 ; unoptimized
29+ ld hl, 3
30+ add hl, sp
31+ ld bc, (hl)
32+ inc hl
33+ inc hl
34+ inc hl
35+ ld iy, (hl)
36+ sbc hl, hl
37+ add hl, bc
38+ lea de, iy
39+ call __i48neg
40+ call __i48and
41+ call __i48ctlz
42+ cpl
43+ add a, 48
44+ ret p
5345 ld a, 48
54- ld iy, 0
55- add iy, sp
56- ld hl, (iy + 3)
57- ld de, (iy + 6)
58- call __i48cmpzero
59- ret z
60- ld bc, (iy + 3)
61- ld iy, (iy + 6)
62- call __i48sub_1
63- call __i48xor
64- call __i48popcnt
65- dec a
6646 ret
6747
6848;-------------------------------------------------------------------------------
@@ -74,13 +54,14 @@ ___ez80_ffsc:
7454 ; unoptimized
7555 ld hl, 3
7656 add hl, sp
77- ld a, (hl)
78- or a, a
79- ret z
80- ld l, a
81- dec l
82- xor a, l
83- jp __bpopcnt
57+ ld l, (hl)
58+ xor a, a
59+ sub a, l
60+ and a, l
61+ call __bctlz
62+ cpl
63+ add a, 9
64+ ret
8465
8566;-------------------------------------------------------------------------------
8667
@@ -92,21 +73,21 @@ ___ez80_ffss:
9273 ld hl, 3
9374 add hl, sp
9475 ld hl, (hl)
95- xor a, a
96- or a, h
97- or a, l
98- ret z
76+ ; HL & -HL
9977 ld b, h
10078 ld c, l
101- dec bc
102- ; HL ^ (HL - 1)
79+ sbc hl, hl
80+ sbc hl, bc
10381 ld a, h
104- xor a, b
82+ and a, b
10583 ld h, a
10684 ld a, l
107- xor a, c
85+ and a, c
10886 ld l, a
109- jp __spopcnt
87+ call __sctlz
88+ cpl
89+ add a, 17
90+ ret
11091
11192;-------------------------------------------------------------------------------
11293
@@ -115,36 +96,38 @@ ___ez80_ffss:
11596 public ___ez80_ffsi48
11697___ez80_ffsi48:
11798 ; unoptimized
118- xor a, a
119- ld iy, 0
120- add iy, sp
121- ld hl, (iy + 3)
122- ld de, (iy + 6)
123- call __i48cmpzero
124- ret z
125- ld bc, (iy + 3)
126- ld iy, (iy + 6)
127- call __i48sub_1
128- call __i48xor
129- jp __i48popcnt
99+ ld hl, 3
100+ add hl, sp
101+ ld bc, (hl)
102+ inc hl
103+ inc hl
104+ inc hl
105+ ld iy, (hl)
106+ sbc hl, hl
107+ add hl, bc
108+ lea de, iy
109+ call __i48neg
110+ call __i48and
111+ call __i48ctlz
112+ cpl
113+ add a, 49
114+ ret
130115
131116;-------------------------------------------------------------------------------
132117
133118 section .text
134119
135120 public ___ez80_clrsbc
136121___ez80_clrsbc:
137- ; unoptimized
138122 ld hl, 3
139123 add hl, sp
140124 ld a, (hl)
141- rlca
142- sbc hl, hl
125+ add a, a
126+ ld l, a
127+ sbc a, a
143128 xor a, l
144- rrca
145- call __bctlz
146- dec a
147- ret
129+ set 0, a
130+ jp __bctlz
148131
149132;-------------------------------------------------------------------------------
150133
@@ -156,35 +139,31 @@ ___ez80_clrsbs:
156139 ld hl, 3
157140 add hl, sp
158141 ld hl, (hl)
159- ld a, h
160- rla
142+ add.s hl, hl
161143 call c, __snot
162- call __sctlz
163- dec a
164- ret
144+ set 0, l
145+ jp __sctlz
165146
166147;-------------------------------------------------------------------------------
167148
168149 section .text
169150
170151 public ___ez80_clrsbi48
171152___ez80_clrsbi48:
172- ; unoptimized
173- ld hl, 8
153+ ld hl, 6
174154 add hl, sp
175- ld a, (hl)
176- dec hl
177- dec hl
178155 ld de, (hl)
179156 dec hl
180157 dec hl
181158 dec hl
182159 ld hl, (hl)
183- rla
160+ add hl, hl
161+ ex de, hl
162+ adc hl, hl
163+ ex de, hl
184164 call c, __i48not
185- call __i48ctlz
186- dec a
187- ret
165+ set 0, l
166+ jp __i48ctlz
188167
189168;-------------------------------------------------------------------------------
190169
@@ -207,13 +186,14 @@ ___ez80_parityc:
207186
208187 public ___ez80_paritys
209188___ez80_paritys:
210- ; unoptimized
211189 ld hl, 3
212190 add hl, sp
213- ld hl, (hl)
214- call __spopcnt
215- rrca
216- sbc a, a
191+ ld a, (hl)
192+ inc hl
193+ xor a, (hl)
194+ ld a, 0
195+ ret pe
196+ dec a
217197 ret
218198
219199;-------------------------------------------------------------------------------
@@ -222,17 +202,17 @@ ___ez80_paritys:
222202
223203 public ___ez80_parityi48
224204___ez80_parityi48:
225- ; unoptimized
226- ld hl, 6
205+ ld hl, 3
227206 add hl, sp
228- ld de, (hl)
229- dec hl
230- dec hl
231- dec hl
232- ld hl, (hl)
233- call __i48popcnt
234- rrca
235- sbc a, a
207+ ld a, (hl)
208+ ld b, 5
209+ .loop:
210+ inc hl
211+ xor a, (hl)
212+ djnz .loop
213+ ld a, b
214+ ret pe
215+ dec a
236216 ret
237217
238218;-------------------------------------------------------------------------------
@@ -278,14 +258,16 @@ ___ez80_popcounti48:
278258
279259 public ___ez80_bswap24
280260___ez80_bswap24:
281- ; unoptimized
282- ld iy, 0
283- add iy, sp
284- ld h, (iy + 3)
285- ld l, (iy + 5)
286- ld (iy + 3), l
287- ld (iy + 5), h
288- ld hl, (iy + 3)
261+ ld hl, 1
262+ add hl, sp
263+ ld de, (hl)
264+ inc hl
265+ inc hl
266+ inc hl
267+ ld d, (hl)
268+ inc hl
269+ ld e, (hl)
270+ ex de, hl
289271 ret
290272
291273;-------------------------------------------------------------------------------
@@ -424,9 +406,8 @@ ___ez80_rotateright48:
424406
425407 extern __snot
426408 extern __i48not
427- extern __i48xor
428- extern __i48cmpzero
429- extern __i48sub_1
409+ extern __i48and
410+ extern __i48neg
430411
431412 extern __bctlz
432413 extern __sctlz
0 commit comments