Skip to content

Commit 1533db4

Browse files
committed
added __*equzero as a 'potentially' faster/smaller version of __*cmpzero that only outputs the Zero flag
1 parent 759558b commit 1533db4

6 files changed

Lines changed: 31 additions & 7 deletions

File tree

src/crt/dtof.src

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ __dtof:
173173
; BC:UDE:UHL = 1 << shift
174174
; (SP) = X
175175
call __lland
176-
call __llcmpzero
176+
call __llequzero
177177
pop hl
178178
; DE and BC are swapped here
179179
pop bc
@@ -215,6 +215,6 @@ __dtof:
215215
jr .L.ret_copysign
216216

217217
.extern __lland
218-
.extern __llcmpzero
218+
.extern __llequzero
219219
.extern __llshru
220220
.extern __lshru

src/crt/i48cmpzero.src

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,18 @@
66
.assume adl=1
77

88
.section .text
9+
10+
.global __i48equzero
11+
.type __i48equzero, @function
12+
913
.global __i48cmpzero
1014
.type __i48cmpzero, @function
1115

16+
__i48equzero:
17+
; Zero flag = (UDE:UHL == 0)
1218
__i48cmpzero:
19+
; Zero flag = (UDE:UHL == 0)
20+
; Sign flag = (UDE:UHL < 0)
1321
; CC: 13 bytes
1422
; Minimum: 8F + 3R + 2
1523
; Maximum: 14F + 3R + 3

src/crt/lcmpzero.src

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
.assume adl=1
22

33
.section .text
4+
5+
.global __lequzero
6+
.type __lequzero, @function
7+
48
.global __lcmpzero
59
.type __lcmpzero, @function
610

11+
__lequzero:
12+
; Zero flag = (E:UHL == 0)
713
__lcmpzero:
14+
; Zero flag = (E:UHL == 0)
15+
; Sign flag = (E:UHL < 0)
816
inc e
917
dec e
1018
ret nz

src/crt/llcmpzero.src

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
.assume adl=1
22

33
.section .text
4+
5+
.global __llequzero
6+
.type __llequzero, @function
7+
48
.global __llcmpzero
59
.type __llcmpzero, @function
610

11+
__llequzero:
12+
; Zero flag = (BC:UDE:UHL == 0)
713
__llcmpzero:
14+
; Zero flag = (BC:UDE:UHL == 0)
15+
; Sign flag = (BC:UDE:UHL < 0)
816
inc b
917
dec b
1018
ret nz

src/libc/strtoll.src

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ _strtoll.maybe_out_of_range:
2626
; negative
2727
; check that the result is not an exact INT_MIN
2828
ld b, a ; B = (B << 1)
29-
call __llcmpzero
29+
call __llequzero
3030
set 7, b
3131
ret z ; exact INT_MIN
3232
_strtoll.underflow:
@@ -344,4 +344,4 @@ __strtoll_common.set_overflow_bit:
344344

345345
.extern _errno
346346
.extern __llneg
347-
.extern __llcmpzero
347+
.extern __llequzero

src/softfloat/s_shiftRightJam64.src

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ _softfloat_shiftRightJam64:
4343
ld hl, (iy + 4)
4444
call __llshl
4545
xor a, a
46-
call __llcmpzero
46+
call __llequzero
4747
jr z, .L.no_round
4848
inc a ; ld a, 1
4949
.L.no_round:
@@ -60,7 +60,7 @@ _softfloat_shiftRightJam64:
6060
.L.overflow_shift:
6161
; A is zero here
6262
ld hl, (iy + 4)
63-
call __llcmpzero
63+
call __llequzero
6464
ret z
6565
xor a, a
6666
sbc hl, hl
@@ -71,6 +71,6 @@ _softfloat_shiftRightJam64:
7171
inc hl
7272
ret
7373

74-
.extern __llcmpzero
74+
.extern __llequzero
7575
.extern __llshl
7676
.extern __llshru

0 commit comments

Comments
 (0)