optimize loading A from pointervar

This commit is contained in:
Irmen de Jong 2021-12-04 04:48:07 +01:00
parent e545ea9504
commit 397f98513b
4 changed files with 10 additions and 15 deletions

View File

@ -643,6 +643,13 @@ class AsmGen(private val program: Program,
out(" ldy #0 | sta ($zpPointerVar),y")
}
internal fun loadAFromZpPointerVar(zpPointerVar: String) {
if (isTargetCpu(CpuType.CPU65c02))
out(" lda ($zpPointerVar)")
else
out(" ldy #0 | lda ($zpPointerVar),y")
}
private fun fixNameSymbols(name: String): String {
val name2 = name.replace("<", "prog8_").replace(">", "") // take care of the autogenerated invalid (anon) label names
return name2.replace("prog8_lib.P8ZP_SCRATCH_", "P8ZP_SCRATCH_") // take care of the 'hooks' to the temp vars
@ -3237,5 +3244,4 @@ $label nop""")
else -> return false
}
}
}

View File

@ -125,10 +125,7 @@ internal class AssignmentAsmGen(private val program: Program, private val asmgen
SourceStorageKind.MEMORY -> {
fun assignViaExprEval(expression: Expression) {
assignExpressionToVariable(expression, "P8ZP_SCRATCH_W2", DataType.UWORD, assign.target.scope)
if (asmgen.isTargetCpu(CpuType.CPU65c02))
asmgen.out(" lda (P8ZP_SCRATCH_W2)")
else
asmgen.out(" ldy #0 | lda (P8ZP_SCRATCH_W2),y")
asmgen.loadAFromZpPointerVar("P8ZP_SCRATCH_W2")
assignRegisterByte(assign.target, CpuRegister.A)
}
@ -341,10 +338,7 @@ internal class AssignmentAsmGen(private val program: Program, private val asmgen
fun assignViaExprEval(addressExpression: Expression) {
asmgen.assignExpressionToVariable(addressExpression, "P8ZP_SCRATCH_W2", DataType.UWORD, null)
if (asmgen.isTargetCpu(CpuType.CPU65c02))
asmgen.out(" lda (P8ZP_SCRATCH_W2)")
else
asmgen.out(" ldy #0 | lda (P8ZP_SCRATCH_W2),y")
asmgen.loadAFromZpPointerVar("P8ZP_SCRATCH_W2")
assignRegisterByte(target, CpuRegister.A)
}

View File

@ -1816,9 +1816,8 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
}
else -> {
asmgen.assignExpressionToVariable(mem.addressExpression, "P8ZP_SCRATCH_W2", DataType.UWORD, target.scope)
asmgen.loadAFromZpPointerVar("P8ZP_SCRATCH_W2")
asmgen.out("""
ldy #0
lda (P8ZP_SCRATCH_W2),y
beq +
lda #1
+ eor #1""")

View File

@ -3,10 +3,6 @@ TODO
For next compiler release (7.5)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
BUG: imageviewer.p8 iff loader: winterqueen.iff (EHB image) is not displayed correctly!
--> make_ehb_palette() is wrong with optimizations, ok without.
--> caused by splitBinaryExpressions()
...