diff --git a/src/crt/dtof.src b/src/crt/dtof.src index 6cfdb2138..a537e766c 100644 --- a/src/crt/dtof.src +++ b/src/crt/dtof.src @@ -173,7 +173,7 @@ __dtof: ; BC:UDE:UHL = 1 << shift ; (SP) = X call __lland - call __llcmpzero + call __llequzero pop hl ; DE and BC are swapped here pop bc @@ -215,6 +215,6 @@ __dtof: jr .L.ret_copysign .extern __lland - .extern __llcmpzero + .extern __llequzero .extern __llshru .extern __lshru diff --git a/src/crt/i48cmpu.src b/src/crt/i48cmpu.src index 5a19bb776..64c2937be 100644 --- a/src/crt/i48cmpu.src +++ b/src/crt/i48cmpu.src @@ -10,13 +10,21 @@ .assume adl=1 .section .text + + .global __i48cmpequ + .type __i48cmpequ, @function + .global __i48cmpu .type __i48cmpu, @function +__i48cmpequ: + ; Zero = (UDE:UHL == UIY:UBC) __i48cmpu: ; CC: 15 bytes ; Minimum: 11F + 6R + 3W + 2 ; Maximum: 16F + 6R + 3W + 2 + ; Zero = (UDE:UHL == UIY:UBC) + ; Carry = (UDE:UHL unsigned_less_than UIY:UBC) push hl or a, a lea hl, iy + 0 diff --git a/src/crt/i48cmpzero.src b/src/crt/i48cmpzero.src index 662aea245..18eb3c9c6 100644 --- a/src/crt/i48cmpzero.src +++ b/src/crt/i48cmpzero.src @@ -6,10 +6,18 @@ .assume adl=1 .section .text + + .global __i48equzero + .type __i48equzero, @function + .global __i48cmpzero .type __i48cmpzero, @function +__i48equzero: + ; Zero flag = (UDE:UHL == 0) __i48cmpzero: + ; Zero flag = (UDE:UHL == 0) + ; Sign flag = (UDE:UHL < 0) ; CC: 13 bytes ; Minimum: 8F + 3R + 2 ; Maximum: 14F + 3R + 3 diff --git a/src/crt/lcmpu.src b/src/crt/lcmpu.src index 9b809ff70..77c5c9dd8 100644 --- a/src/crt/lcmpu.src +++ b/src/crt/lcmpu.src @@ -1,16 +1,25 @@ .assume adl=1 .section .text + + .global __lcmpequ + .type __lcmpequ, @function + .global __lcmpu .type __lcmpu, @function .ifdef PREFER_OS_CRT .set __lcmpu, 0x0001AC + .set __lcmpequ, __lcmpu .else +__lcmpequ: + ; Zero = (E:UHL == A:UBC) __lcmpu: + ; Zero = (E:UHL == A:UBC) + ; Carry = (E:UHL unsigned_less_than A:UBC) cp a, e ccf ret nz diff --git a/src/crt/lcmpzero.src b/src/crt/lcmpzero.src index 1adaccfc6..a776f8911 100644 --- a/src/crt/lcmpzero.src +++ b/src/crt/lcmpzero.src @@ -1,10 +1,18 @@ .assume adl=1 .section .text + + .global __lequzero + .type __lequzero, @function + .global __lcmpzero .type __lcmpzero, @function +__lequzero: + ; Zero flag = (E:UHL == 0) __lcmpzero: + ; Zero flag = (E:UHL == 0) + ; Sign flag = (E:UHL < 0) inc e dec e ret nz diff --git a/src/crt/llcmpu.src b/src/crt/llcmpu.src index 79faf56b8..fddaeb2ce 100644 --- a/src/crt/llcmpu.src +++ b/src/crt/llcmpu.src @@ -1,10 +1,18 @@ .assume adl=1 .section .text + + .global __llcmpequ + .type __llcmpequ, @function + .global __llcmpu .type __llcmpu, @function +__llcmpequ: + ; Zero = (BC:UDE:UHL == (SP64)) __llcmpu: + ; Zero = (BC:UDE:UHL == (SP64)) + ; Carry = (BC:UDE:UHL unsigned_less_than (SP64)) push iy ld iy, 0 add iy, sp diff --git a/src/crt/llcmpzero.src b/src/crt/llcmpzero.src index c04353c89..fda8cfe8b 100644 --- a/src/crt/llcmpzero.src +++ b/src/crt/llcmpzero.src @@ -1,10 +1,18 @@ .assume adl=1 .section .text + + .global __llequzero + .type __llequzero, @function + .global __llcmpzero .type __llcmpzero, @function +__llequzero: + ; Zero flag = (BC:UDE:UHL == 0) __llcmpzero: + ; Zero flag = (BC:UDE:UHL == 0) + ; Sign flag = (BC:UDE:UHL < 0) inc b dec b ret nz diff --git a/src/libc/strtoll.src b/src/libc/strtoll.src index 28ec2e970..d40236051 100644 --- a/src/libc/strtoll.src +++ b/src/libc/strtoll.src @@ -26,7 +26,7 @@ _strtoll.maybe_out_of_range: ; negative ; check that the result is not an exact INT_MIN ld b, a ; B = (B << 1) - call __llcmpzero + call __llequzero set 7, b ret z ; exact INT_MIN _strtoll.underflow: @@ -344,4 +344,4 @@ __strtoll_common.set_overflow_bit: .extern _errno .extern __llneg - .extern __llcmpzero + .extern __llequzero diff --git a/src/softfloat/s_shiftRightJam64.src b/src/softfloat/s_shiftRightJam64.src index 5a43c00c3..f5acf02e7 100644 --- a/src/softfloat/s_shiftRightJam64.src +++ b/src/softfloat/s_shiftRightJam64.src @@ -41,7 +41,7 @@ _softfloat_shiftRightJam64: ld hl, (iy + 4) call __llshl xor a, a - call __llcmpzero + call __llequzero jr z, .L.no_round inc a ; ld a, 1 .L.no_round: @@ -58,7 +58,7 @@ _softfloat_shiftRightJam64: .L.overflow_shift: ; A is zero here ld hl, (iy + 4) - call __llcmpzero + call __llequzero ret z xor a, a sbc hl, hl @@ -69,6 +69,6 @@ _softfloat_shiftRightJam64: inc hl ret - .extern __llcmpzero + .extern __llequzero .extern __llshl .extern __llshru