Skip to content

Commit a4c0dca

Browse files
committed
added __*equzero/__*cmpequ as a 'potentially' faster/smaller version of __*cmpzero/__*cmpu that only outputs the Zero flag
1 parent f9de2aa commit a4c0dca

File tree

9 files changed

+56
-7
lines changed

9 files changed

+56
-7
lines changed

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/i48cmpu.src

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,21 @@
1010
.assume adl=1
1111

1212
.section .text
13+
14+
.global __i48cmpequ
15+
.type __i48cmpequ, @function
16+
1317
.global __i48cmpu
1418
.type __i48cmpu, @function
1519

20+
__i48cmpequ:
21+
; Zero = (UDE:UHL == UIY:UBC)
1622
__i48cmpu:
1723
; CC: 15 bytes
1824
; Minimum: 11F + 6R + 3W + 2
1925
; Maximum: 16F + 6R + 3W + 2
26+
; Zero = (UDE:UHL == UIY:UBC)
27+
; Carry = (UDE:UHL unsigned_less_than UIY:UBC)
2028
push hl
2129
or a, a
2230
lea hl, iy + 0

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/lcmpu.src

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,25 @@
11
.assume adl=1
22

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

711
.ifdef PREFER_OS_CRT
812

913
.set __lcmpu, 0x0001AC
14+
.set __lcmpequ, __lcmpu
1015

1116
.else
1217

18+
__lcmpequ:
19+
; Zero = (E:UHL == A:UBC)
1320
__lcmpu:
21+
; Zero = (E:UHL == A:UBC)
22+
; Carry = (E:UHL unsigned_less_than A:UBC)
1423
cp a, e
1524
ccf
1625
ret nz

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/llcmpu.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 __llcmpequ
6+
.type __llcmpequ, @function
7+
48
.global __llcmpu
59
.type __llcmpu, @function
610

11+
__llcmpequ:
12+
; Zero = (BC:UDE:UHL == (SP64))
713
__llcmpu:
14+
; Zero = (BC:UDE:UHL == (SP64))
15+
; Carry = (BC:UDE:UHL unsigned_less_than (SP64))
816
push iy
917
ld iy, 0
1018
add iy, sp

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)