From 40f92b9bab3ee0a3b168e62428cdcc010681d762 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 14 Jun 2020 09:48:10 -0400 Subject: [PATCH] z80: optimize chkPS Inline it in next and make chkPS, call a newly reserved label for it directly, removing a layer of indirection. This frees a spot in the stable ABI. --- blk/243 | 2 +- blk/283 | 2 +- blk/299 | 16 ---------------- blk/300 | 10 +++++----- blk/305 | 24 ++++++++++++------------ blk/306 | 22 +++++++++++----------- emul/forth.bin | Bin 6189 -> 6194 bytes 7 files changed, 30 insertions(+), 46 deletions(-) diff --git a/blk/243 b/blk/243 index beb5ac2..0165ad0 100644 --- a/blk/243 +++ b/blk/243 @@ -5,7 +5,7 @@ : JPNEXT, 26 BJP, ; ( 26 == next ) -: chkPS, 29 BCALL, ; ( 29 == chkPS ) +: chkPS, L4 @ BCALL, ; ( chkPS, B305 ) : CODE ( same as CREATE, but with native word ) (entry) diff --git a/blk/283 b/blk/283 index 5dc07d8..b23332b 100644 --- a/blk/283 +++ b/blk/283 @@ -5,7 +5,7 @@ NOP, ( 0a, unused ) 0 JPnn, ( 0b, cellWord ) 0 JPnn, ( 0e, compiledWord ) 0 JPnn, ( 11, pushRS ) 0 JPnn, ( 14, popRS ) EXDEHL, JP(HL), NOP, ( 17, nativeWord ) -0 JPnn, ( 1a, next ) 0 JPnn, ( 1d, chkPS ) +0 JPnn, ( 1a, next ) 0 JPnn, ( unused ) NOP, NOP, ( 20, numberWord ) NOP, NOP, ( 22, litWord ) NOP, NOP, ( 24, addrWord ) NOP, NOP, ( 26, unused ) 0 JPnn, ( RST 28 ) diff --git a/blk/299 b/blk/299 index d0246db..e69de29 100644 --- a/blk/299 +++ b/blk/299 @@ -1,16 +0,0 @@ -L1 BSET PC ORG @ 0x1e + ! ( chkPS ) -( Note that you only need to call this in words that push - back to PSP. If they don't, calling chkPS is redundant with - check in next ) - EXX, -( We have the return address for this very call on the stack - and protected registers. 2 - is to compensate that. ) - HL PS_ADDR 2 - LDddnn, - SP SUBHLss, - EXX, - CNC RETcc, ( PS_ADDR >= SP? good ) - JR, L2 BWR ( abortUnderflow-B298 ) - - - - diff --git a/blk/300 b/blk/300 index 517be4c..04cef3b 100644 --- a/blk/300 +++ b/blk/300 @@ -3,14 +3,14 @@ PC ORG @ 0x1b + ! ( next ) we jump to current IP, but we also take care of increasing it by 2 before jumping. ) ( Before we continue: are stacks within bounds? ) - L1 @ ( chkPS ) BCALL, - ( check RS ) - IX PUSHqq, HL POPqq, + ( PS ) HL PS_ADDR LDddnn, + SP SUBHLss, + JRC, L2 BWR ( abortUnderflow-B298 ) + ( RS ) IX PUSHqq, HL POPqq, DE RS_ADDR LDddnn, DE SUBHLss, JRC, L2 BWR ( IX < RS_ADDR? abortUnderflow-B298 ) E 0 IY+ LDrIXY, D 1 IY+ LDrIXY, - IY INCss, - IY INCss, + IY INCss, IY INCss, ( continue to execute ) diff --git a/blk/305 b/blk/305 index a3d756d..8779003 100644 --- a/blk/305 +++ b/blk/305 @@ -1,15 +1,15 @@ -( Core words ) -( KEY and EMIT are not defined here. There're - expected to be defined in platform-specific code. ) - - -CODE EXECUTE - DE POPqq, - chkPS, - JR, L3 BWR ( execute-B301 ) - - - +L4 BSET ( chkPS ) +( Note that you only need to call this in words that push + back to PSP. If they don't, calling chkPS is redundant with + check in next ) + EXX, +( We have the return address for this very call on the stack + and protected registers. 2 - is to compensate that. ) + HL PS_ADDR 2 - LDddnn, + SP SUBHLss, + EXX, + CNC RETcc, ( PS_ADDR >= SP? good ) + JR, L2 BWR ( abortUnderflow-B298 ) diff --git a/blk/306 b/blk/306 index 942a8b9..360be1c 100644 --- a/blk/306 +++ b/blk/306 @@ -1,16 +1,16 @@ +( Core words ) +( KEY and EMIT are not defined here. There're + expected to be defined in platform-specific code. ) + +CODE EXECUTE + DE POPqq, + chkPS, + JR, L3 BWR ( execute-B301 ) + ( a b c -- b c a ) CODE ROT - HL POPqq, ( C ) - DE POPqq, ( B ) - BC POPqq, ( A ) + HL POPqq, ( C ) DE POPqq, ( B ) BC POPqq, ( A ) chkPS, - DE PUSHqq, ( B ) - HL PUSHqq, ( C ) - BC PUSHqq, ( A ) + DE PUSHqq, ( B ) HL PUSHqq, ( C ) BC PUSHqq, ( A ) ;CODE - - - - - diff --git a/emul/forth.bin b/emul/forth.bin index a8d3ae16b24628bf0b0018e3ae78c73c5f6b1632..eca4d9607b12a5ae65f0a8102825324b1acd9baa 100644 GIT binary patch literal 6194 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