Skip to content

Commit 4dc40f8

Browse files
committed
added __*equzero as a 'potentially' faster/smaller version of __*cmpzero that only outputs the Zero flag
1 parent 0394937 commit 4dc40f8

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
@@ -41,7 +41,7 @@ _softfloat_shiftRightJam64:
4141
ld hl, (iy + 4)
4242
call __llshl
4343
xor a, a
44-
call __llcmpzero
44+
call __llequzero
4545
jr z, .L.no_round
4646
inc a ; ld a, 1
4747
.L.no_round:
@@ -58,7 +58,7 @@ _softfloat_shiftRightJam64:
5858
.L.overflow_shift:
5959
; A is zero here
6060
ld hl, (iy + 4)
61-
call __llcmpzero
61+
call __llequzero
6262
ret z
6363
xor a, a
6464
sbc hl, hl
@@ -69,6 +69,6 @@ _softfloat_shiftRightJam64:
6969
inc hl
7070
ret
7171

72-
.extern __llcmpzero
72+
.extern __llequzero
7373
.extern __llshl
7474
.extern __llshru

0 commit comments

Comments
 (0)