Fix nearly all the comparisons, a lot of which were broken. Using a rst for
unsigned comparisons is surprisingly not that useful due to marshalling overhead; it's only four bytes to do inline (plus jc), or six for a constant. Also add some useful top optimisations. Star Trek goes from 39890 to 39450 bytes.
This commit is contained in:
parent
91c75f81b5
commit
d63a359a49
|
@ -15,4 +15,5 @@
|
||||||
xra h
|
xra h
|
||||||
jp .cmpu_mag ! signs are the same, so an unsigned comparison will do
|
jp .cmpu_mag ! signs are the same, so an unsigned comparison will do
|
||||||
xra h ! set A=H and set the sign flag
|
xra h ! set A=H and set the sign flag
|
||||||
|
ral ! move sign flag into carry
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -15,5 +15,4 @@
|
||||||
sub l
|
sub l
|
||||||
mov a, d
|
mov a, d
|
||||||
sbb h
|
sbb h
|
||||||
rar
|
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
!
|
!
|
||||||
! Also:
|
! Also:
|
||||||
! 48 call .cmps_mag
|
! 48 call .cmps_mag
|
||||||
! 25 call .cmpu_mag
|
|
||||||
|
|
||||||
.define .rst_init
|
.define .rst_init
|
||||||
.rst_init:
|
.rst_init:
|
||||||
|
@ -28,8 +27,6 @@
|
||||||
lxi h, .fstoren2
|
lxi h, .fstoren2
|
||||||
call copy
|
call copy
|
||||||
lxi h, .cmps_mag
|
lxi h, .cmps_mag
|
||||||
call copy
|
|
||||||
lxi h, .cmpu_mag
|
|
||||||
jmp copy
|
jmp copy
|
||||||
|
|
||||||
! Copies eight bytes from HL to DE.
|
! Copies eight bytes from HL to DE.
|
||||||
|
@ -39,7 +36,7 @@ copy:
|
||||||
mov a, m
|
mov a, m
|
||||||
stax d
|
stax d
|
||||||
inx h
|
inx h
|
||||||
inx d
|
inr e
|
||||||
dcr c
|
dcr c
|
||||||
jnz .1
|
jnz .1
|
||||||
ret
|
ret
|
|
@ -1618,6 +1618,70 @@ leaving cal ".cmf4" asp 8 lfr 2
|
||||||
pat cmf $1==8
|
pat cmf $1==8
|
||||||
leaving cal ".cmf8" asp 16 lfr 2
|
leaving cal ".cmf8" asp 16 lfr 2
|
||||||
|
|
||||||
|
pat cmu zlt $1==2
|
||||||
|
with regpair regpair STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mov a, %2.2
|
||||||
|
sub %1.2
|
||||||
|
mov a, %2.1
|
||||||
|
sbb %1.1
|
||||||
|
jc {label, $2}
|
||||||
|
with const2 regpair STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mov a, %2.2
|
||||||
|
sbi {const1, %1.num & 0xff}
|
||||||
|
mov a, %2.1
|
||||||
|
sbi {const1, %1.num >> 8}
|
||||||
|
jc {label, $2}
|
||||||
|
with regpair const2 STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mvi a, {const1, %2.num & 0xff}
|
||||||
|
sub %1.2
|
||||||
|
mvi a, {const1, %2.num >> 8}
|
||||||
|
sbb %1.1
|
||||||
|
jc {label, $2}
|
||||||
|
|
||||||
|
pat cmu zgt $1==2
|
||||||
|
leaving
|
||||||
|
exg 2
|
||||||
|
cmu 2
|
||||||
|
zlt $2
|
||||||
|
|
||||||
|
pat cmu zge $1==2
|
||||||
|
with regpair regpair STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mov a, %2.2
|
||||||
|
sub %1.2
|
||||||
|
mov a, %2.1
|
||||||
|
sbb %1.1
|
||||||
|
jnc {label, $2}
|
||||||
|
with const2 regpair STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mov a, %2.2
|
||||||
|
sbi {const1, %1.num & 0xff}
|
||||||
|
mov a, %2.1
|
||||||
|
sbi {const1, %1.num >> 8}
|
||||||
|
jnc {label, $2}
|
||||||
|
with regpair const2 STACK
|
||||||
|
uses areg
|
||||||
|
gen
|
||||||
|
mvi a, {const1, %2.num & 0xff}
|
||||||
|
sub %1.2
|
||||||
|
mvi a, {const1, %2.num >> 8}
|
||||||
|
sbb %1.1
|
||||||
|
jnc {label, $2}
|
||||||
|
|
||||||
|
pat cmu zle $1==2
|
||||||
|
leaving
|
||||||
|
exg 2
|
||||||
|
cmu 2
|
||||||
|
zge $2
|
||||||
|
|
||||||
pat cmu $1==2
|
pat cmu $1==2
|
||||||
with hl_or_de hl_or_de
|
with hl_or_de hl_or_de
|
||||||
uses areg
|
uses areg
|
||||||
|
@ -1883,7 +1947,7 @@ pat blt
|
||||||
#else
|
#else
|
||||||
Call {label, ".cmps_mag"}
|
Call {label, ".cmps_mag"}
|
||||||
#endif
|
#endif
|
||||||
jm {label, $1}
|
jc {label, $1}
|
||||||
|
|
||||||
pat bgt
|
pat bgt
|
||||||
leaving
|
leaving
|
||||||
|
@ -1899,7 +1963,7 @@ pat bge
|
||||||
#else
|
#else
|
||||||
Call {label, ".cmps_mag"}
|
Call {label, ".cmps_mag"}
|
||||||
#endif
|
#endif
|
||||||
jp {label, $1}
|
jnc {label, $1}
|
||||||
|
|
||||||
pat ble
|
pat ble
|
||||||
leaving
|
leaving
|
||||||
|
|
|
@ -19,4 +19,6 @@ call X : ret -> jmp X ;
|
||||||
push h : lxi h, X : pop d -> lxi d, X : xchg ;
|
push h : lxi h, X : pop d -> lxi d, X : xchg ;
|
||||||
push d : lxi d, X : pop h -> lxi h, X : xchg ;
|
push d : lxi d, X : pop h -> lxi h, X : xchg ;
|
||||||
|
|
||||||
|
push h : lhld h, X : pop d -> xchg : lhld X ;
|
||||||
|
|
||||||
%%;
|
%%;
|
||||||
|
|
Loading…
Reference in a new issue