1
1
assume adl=1
2
2
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
-
29
3
;-------------------------------------------------------------------------------
30
4
31
5
section .text
@@ -35,13 +9,15 @@ ___ez80_ctzc:
35
9
; unoptimized
36
10
ld hl, 3
37
11
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
42
15
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
45
21
46
22
;-------------------------------------------------------------------------------
47
23
@@ -50,19 +26,23 @@ ___ez80_ctzc:
50
26
public ___ez80_ctzi48
51
27
___ez80_ctzi48:
52
28
; 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
53
45
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
66
46
ret
67
47
68
48
;-------------------------------------------------------------------------------
@@ -74,13 +54,14 @@ ___ez80_ffsc:
74
54
; unoptimized
75
55
ld hl, 3
76
56
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
84
65
85
66
;-------------------------------------------------------------------------------
86
67
@@ -92,21 +73,21 @@ ___ez80_ffss:
92
73
ld hl, 3
93
74
add hl, sp
94
75
ld hl, (hl)
95
- xor a, a
96
- or a, h
97
- or a, l
98
- ret z
76
+ ; HL & -HL
99
77
ld b, h
100
78
ld c, l
101
- dec bc
102
- ; HL ^ (HL - 1)
79
+ sbc hl, hl
80
+ sbc hl, bc
103
81
ld a, h
104
- xor a, b
82
+ and a, b
105
83
ld h, a
106
84
ld a, l
107
- xor a, c
85
+ and a, c
108
86
ld l, a
109
- jp __spopcnt
87
+ call __sctlz
88
+ cpl
89
+ add a, 17
90
+ ret
110
91
111
92
;-------------------------------------------------------------------------------
112
93
@@ -115,36 +96,38 @@ ___ez80_ffss:
115
96
public ___ez80_ffsi48
116
97
___ez80_ffsi48:
117
98
; 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
130
115
131
116
;-------------------------------------------------------------------------------
132
117
133
118
section .text
134
119
135
120
public ___ez80_clrsbc
136
121
___ez80_clrsbc:
137
- ; unoptimized
138
122
ld hl, 3
139
123
add hl, sp
140
124
ld a, (hl)
141
- rlca
142
- sbc hl, hl
125
+ add a, a
126
+ ld l, a
127
+ sbc a, a
143
128
xor a, l
144
- rrca
145
- call __bctlz
146
- dec a
147
- ret
129
+ set 0, a
130
+ jp __bctlz
148
131
149
132
;-------------------------------------------------------------------------------
150
133
@@ -156,35 +139,31 @@ ___ez80_clrsbs:
156
139
ld hl, 3
157
140
add hl, sp
158
141
ld hl, (hl)
159
- ld a, h
160
- rla
142
+ add.s hl, hl
161
143
call c, __snot
162
- call __sctlz
163
- dec a
164
- ret
144
+ set 0, l
145
+ jp __sctlz
165
146
166
147
;-------------------------------------------------------------------------------
167
148
168
149
section .text
169
150
170
151
public ___ez80_clrsbi48
171
152
___ez80_clrsbi48:
172
- ; unoptimized
173
- ld hl, 8
153
+ ld hl, 6
174
154
add hl, sp
175
- ld a, (hl)
176
- dec hl
177
- dec hl
178
155
ld de, (hl)
179
156
dec hl
180
157
dec hl
181
158
dec hl
182
159
ld hl, (hl)
183
- rla
160
+ add hl, hl
161
+ ex de, hl
162
+ adc hl, hl
163
+ ex de, hl
184
164
call c, __i48not
185
- call __i48ctlz
186
- dec a
187
- ret
165
+ set 0, l
166
+ jp __i48ctlz
188
167
189
168
;-------------------------------------------------------------------------------
190
169
@@ -207,13 +186,14 @@ ___ez80_parityc:
207
186
208
187
public ___ez80_paritys
209
188
___ez80_paritys:
210
- ; unoptimized
211
189
ld hl, 3
212
190
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
217
197
ret
218
198
219
199
;-------------------------------------------------------------------------------
@@ -222,17 +202,17 @@ ___ez80_paritys:
222
202
223
203
public ___ez80_parityi48
224
204
___ez80_parityi48:
225
- ; unoptimized
226
- ld hl, 6
205
+ ld hl, 3
227
206
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
236
216
ret
237
217
238
218
;-------------------------------------------------------------------------------
@@ -278,14 +258,16 @@ ___ez80_popcounti48:
278
258
279
259
public ___ez80_bswap24
280
260
___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
289
271
ret
290
272
291
273
;-------------------------------------------------------------------------------
@@ -424,9 +406,8 @@ ___ez80_rotateright48:
424
406
425
407
extern __snot
426
408
extern __i48not
427
- extern __i48xor
428
- extern __i48cmpzero
429
- extern __i48sub_1
409
+ extern __i48and
410
+ extern __i48neg
430
411
431
412
extern __bctlz
432
413
extern __sctlz
0 commit comments