Skip to content

Commit 4666037

Browse files
committed
Fix return types of ez80_builtin functions, optimize some implementations
1 parent dcf9dfd commit 4666037

File tree

3 files changed

+149
-152
lines changed

3 files changed

+149
-152
lines changed

src/libc/ez80_builtin.src

+100-119
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,5 @@
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

Comments
 (0)