From 630ccd88fa1673a90df0275ec749826c49a0d2ea Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Sat, 31 Mar 2018 15:13:13 -0700 Subject: [PATCH] Improve LLA opts a little --- src/libsrc/apple/cleanjit.pla | 33 ++++++++++++++++++++----------- src/libsrc/apple/jit.pla | 37 +++++++++++++++++++++++------------ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/src/libsrc/apple/cleanjit.pla b/src/libsrc/apple/cleanjit.pla index 3d91ba2..8a86ff2 100644 --- a/src/libsrc/apple/cleanjit.pla +++ b/src/libsrc/apple/cleanjit.pla @@ -360,19 +360,30 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("LLA "); puti(^(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = $D095+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+(j<<8) // LDA #imm - codeptr->2 = $18 // CLC - codeptr=>3 = $E065 // ADC IFPL - codeptr=>5 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>7 = $00A9 // LDA #$00 - codeptr=>9 = $E165 // ADC IFPH - codeptr=>11 = $C095+(VX<<8) // STA ESTKH,X - codeptr = codeptr + 13 - A_IS_TOSL = FALSE + VX-- // DEX + if VY == j + ^codeptr = $98; codeptr++ // TYA -> LDA #imm + else + *codeptr = $A9+(j<<8) // LDA #imm + codeptr = codeptr + 2 + fin + codeptr->0 = $18 // CLC + codeptr=>1 = $E065 // ADC IFPL + codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X + if VY == 0 + codeptr->5 = $98 // TYA -> LDA #00 + codeptr = codeptr + 6 + else + codeptr=>5 = $00A9 // LDA #$00 + codeptr = codeptr + 7 + fin + codeptr=>0 = $E165 // ADC IFPH + codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr = codeptr + 4 + A_IS_TOSL = FALSE break is $2A // CB i++ diff --git a/src/libsrc/apple/jit.pla b/src/libsrc/apple/jit.pla index 55a4027..dde73e7 100644 --- a/src/libsrc/apple/jit.pla +++ b/src/libsrc/apple/jit.pla @@ -344,19 +344,30 @@ def compiler(defptr)#0 j = ^(bytecode+i) //puts("LLA "); puti(^(bytecode+i)) if A_IS_TOSL & TOS_DIRTY - *codeptr = $D095+(VX<<8) // STA ESTKL,X + *codeptr = $D095+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - VX-- // DEX - codeptr=>0 = $A9+(j<<8) // LDA #imm - codeptr->2 = $18 // CLC - codeptr=>3 = $E065 // ADC IFPL - codeptr=>5 = $D095+(VX<<8) // STA ESTKL,X - codeptr=>7 = $00A9 // LDA #$00 - codeptr=>9 = $E165 // ADC IFPH - codeptr=>11 = $C095+(VX<<8) // STA ESTKH,X - codeptr = codeptr + 13 - A_IS_TOSL = FALSE + VX-- // DEX + if VY == j + ^codeptr = $98; codeptr++ // TYA -> LDA #imm + else + *codeptr = $A9+(j<<8) // LDA #imm + codeptr = codeptr + 2 + fin + codeptr->0 = $18 // CLC + codeptr=>1 = $E065 // ADC IFPL + codeptr=>3 = $D095+(VX<<8) // STA ESTKL,X + if VY == 0 + codeptr->5 = $98 // TYA -> LDA #00 + codeptr = codeptr + 6 + else + codeptr=>5 = $00A9 // LDA #$00 + codeptr = codeptr + 7 + fin + codeptr=>0 = $E165 // ADC IFPH + codeptr=>2 = $C095+(VX<<8) // STA ESTKH,X + codeptr = codeptr + 4 + A_IS_TOSL = FALSE break is $2A // CB is $5E // CFFB @@ -1590,10 +1601,10 @@ end // Install JIT compiler // if *jitcomp - puts("JIT compiler already installed!\n") + //puts("JIT compiler already installed!\n") return 0 fin -puts("Installing JIT compiler\n") +puts("JITC installed\n") *jitcomp = @compiler return modkeep done