File tree 1 file changed +41
-33
lines changed
1 file changed +41
-33
lines changed Original file line number Diff line number Diff line change 3
3
section .text
4
4
public __bcttz
5
5
__bcttz:
6
- tst a, 0Fh
6
+ cp a, 1
7
+ require __cttz_common
8
+
9
+ section .text
10
+ private __cttz_common
11
+ ; Input: A=byte, CF=(A==0)
12
+ ; Output: A=cttz(A)
13
+ __cttz_common:
14
+ adc a, a
15
+ add a, a
16
+ jr z, .high2
17
+ add a, a
18
+ add a, a
7
19
jr z, .high4
8
- tst a, 3
20
+ add a, a
21
+ add a, a
9
22
jr z, .high6
10
- cpl
11
- and a, 1
23
+ add a, a
24
+ add a, a
25
+ sbc a, -1
26
+ ret p
27
+ ld a, 8
12
28
ret
13
29
.high6:
14
- dec a
15
- and a, 6
16
- ret po
17
- rrca
30
+ sbc a, -3
18
31
ret
19
32
.high4:
20
- tst a, 030h
21
- jr z, .high2
22
- dec a
23
- and a, 014h
24
- ret po
25
- ld a, 5
33
+ sbc a, -5
26
34
ret
27
35
.high2:
28
- add a, a
29
- sbc a, -8
30
- ret p
31
- ld a, 6
36
+ sbc a, -7
32
37
ret
33
38
34
39
section .text
35
40
public __scttz
36
41
__scttz:
37
- ld a, l
38
- or a, a
39
- jr nz, __bcttz
40
- ld a, h
42
+ xor a, a
43
+ or a, l
44
+ jr nz, __cttz_common
45
+ sub a, h
46
+ ccf
41
47
require __scttz.hijack
42
48
43
49
section .text
44
50
private __scttz.hijack
45
51
__scttz.hijack:
46
- call __bcttz
52
+ call __cttz_common
47
53
add a, 8
48
54
ret
49
55
@@ -57,7 +63,7 @@ __icttz:
57
63
private __icttz.hijack
58
64
__icttz.hijack:
59
65
or a, l
60
- jr nz, __bcttz
66
+ jr nz, __cttz_common
61
67
or a, h
62
68
jr nz, __scttz.hijack
63
69
dec sp
@@ -75,8 +81,9 @@ __lcttz:
75
81
xor a, a
76
82
sbc hl, de
77
83
jr nz, __icttz.hijack
78
- ld a, e
79
- call __bcttz
84
+ sub a, e
85
+ ccf
86
+ call __cttz_common
80
87
add a, 24
81
88
ret
82
89
@@ -91,15 +98,16 @@ __llcttz:
91
98
sbc hl, de
92
99
jr nz, __i48cttz.hijack
93
100
or a, c
94
- jr z, .high
95
- call __bcttz
96
- add a, 48
97
- ret
98
- .high:
99
- ld a, b
100
- call __bcttz
101
+ jr nz, .low
102
+ sub a, b
103
+ ccf
104
+ call __cttz_common
101
105
add a, 56
102
106
ret
107
+ .low:
108
+ call __cttz_common
109
+ add a, 48
110
+ ret
103
111
104
112
section .text
105
113
public __i48cttz
You can’t perform that action at this time.
0 commit comments