From c8d0bf27af89dc5c7f90a2a1f7265cb5a801f143 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 19 Mar 2023 00:58:45 +0100 Subject: [PATCH] get rid of useless scope param --- .../src/prog8/codegen/cpu6502/AsmGen.kt | 116 +++++++------- .../codegen/cpu6502/BuiltinFunctionsAsmGen.kt | 22 +-- .../codegen/cpu6502/ExpressionsAsmGen.kt | 4 +- .../prog8/codegen/cpu6502/ForLoopsAsmGen.kt | 11 +- .../codegen/cpu6502/FunctionCallAsmGen.kt | 4 +- .../cpu6502/assignment/AssignmentAsmGen.kt | 151 +++++++++--------- .../assignment/AugmentableAssignmentAsmGen.kt | 10 +- 7 files changed, 160 insertions(+), 158 deletions(-) diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt index 3d9c40496..1551df8f3 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/AsmGen.kt @@ -478,8 +478,8 @@ class AsmGen6502Internal ( internal fun assignExpressionToRegister(expr: PtExpression, register: RegisterOrPair, signed: Boolean=false) = assignmentAsmGen.assignExpressionToRegister(expr, register, signed) - internal fun assignExpressionToVariable(expr: PtExpression, asmVarName: String, dt: DataType, scope: IPtSubroutine?) = - assignmentAsmGen.assignExpressionToVariable(expr, asmVarName, dt, scope) + internal fun assignExpressionToVariable(expr: PtExpression, asmVarName: String, dt: DataType) = + assignmentAsmGen.assignExpressionToVariable(expr, asmVarName, dt) internal fun assignVariableToRegister(asmVarName: String, register: RegisterOrPair, scope: IPtSubroutine?, pos: Position, signed: Boolean=false) = assignmentAsmGen.assignVariableToRegister(asmVarName, register, signed, scope, pos) @@ -1024,7 +1024,7 @@ $repeatLabel lda $counterVar pointerOffsetExpr.children.removeLast() pointerOffsetExpr.children.removeLast() val tempvar = getTempVarName(DataType.UWORD) - assignExpressionToVariable(pointerOffsetExpr, tempvar, DataType.UWORD, pointerOffsetExpr.definingISub()) + assignExpressionToVariable(pointerOffsetExpr, tempvar, DataType.UWORD) val smallExpr = PtRpn(DataType.UWORD, pointerOffsetExpr.position) smallExpr.addRpnNode(PtIdentifier(tempvar, DataType.UWORD, pointerOffsetExpr.position)) smallExpr.addRpnNode(rightmostOperand) @@ -1120,14 +1120,14 @@ $repeatLabel lda $counterVar if(saveA) out(" pha") if(ptrAndIndex.second.isSimple()) { - assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(ptrAndIndex.second, RegisterOrPair.Y) if(saveA) out(" pla") out(" sta (P8ZP_SCRATCH_W2),y") } else { pushCpuStack(DataType.UBYTE, ptrAndIndex.second) - assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, true) if(saveA) out(" pla") @@ -1141,12 +1141,12 @@ $repeatLabel lda $counterVar } else { // copy the pointer var to zp first if(ptrAndIndex.second.isSimple()) { - assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(ptrAndIndex.second, RegisterOrPair.Y) out(" lda (P8ZP_SCRATCH_W2),y") } else { pushCpuStack(DataType.UBYTE, ptrAndIndex.second) - assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(ptrAndIndex.first, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) out(" lda (P8ZP_SCRATCH_W2),y") } @@ -1522,7 +1522,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -1567,7 +1567,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -1612,7 +1612,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -1657,7 +1657,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -1702,11 +1702,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -1743,11 +1743,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -1786,11 +1786,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -1832,11 +1832,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else { pushCpuStack(DataType.WORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -1879,11 +1879,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -1922,11 +1922,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.BYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -1971,11 +1971,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2022,11 +2022,11 @@ $repeatLabel lda $counterVar return if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD) assignExpressionToRegister(right, RegisterOrPair.AY) } else { pushCpuStack(DataType.WORD, right) - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2070,11 +2070,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -2113,11 +2113,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.BYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -2164,11 +2164,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2219,11 +2219,11 @@ $repeatLabel lda $counterVar } if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD) assignExpressionToRegister(right, RegisterOrPair.AY) } else { pushCpuStack(DataType.WORD, right) - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.WORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2263,11 +2263,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -2303,11 +2303,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else { pushCpuStack(DataType.BYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.BYTE) out(" pla") } return code("P8ZP_SCRATCH_B1") @@ -2345,11 +2345,11 @@ $repeatLabel lda $counterVar return if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(right, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, right) - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2391,11 +2391,11 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else { pushCpuStack(DataType.WORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.WORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2434,14 +2434,14 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(right, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) restoreRegisterStack(CpuRegister.A, false) } out(" cmp P8ZP_SCRATCH_B1 | bne $jumpIfFalseLabel") @@ -2480,14 +2480,14 @@ $repeatLabel lda $counterVar return if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(left, RegisterOrPair.A) } else if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_B1", DataType.UBYTE) assignExpressionToRegister(right, RegisterOrPair.A) } else { pushCpuStack(DataType.UBYTE, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) restoreRegisterStack(CpuRegister.A, false) } return code("P8ZP_SCRATCH_B1") @@ -2556,14 +2556,14 @@ $repeatLabel lda $counterVar } else -> { if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else if(right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(right, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2642,14 +2642,14 @@ $repeatLabel lda $counterVar } else -> { if(left.isSimple()) { - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(left, RegisterOrPair.AY) } else if (right.isSimple()) { - assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(left, "P8ZP_SCRATCH_W2", DataType.UWORD) assignExpressionToRegister(right, RegisterOrPair.AY) } else { pushCpuStack(DataType.UWORD, left) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", DataType.UWORD) restoreRegisterStack(CpuRegister.Y, false) restoreRegisterStack(CpuRegister.A, false) } @@ -2739,7 +2739,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -2824,7 +2824,7 @@ $repeatLabel lda $counterVar } else { val subroutine = left.definingSub()!! subroutineExtra(subroutine).usedFloatEvalResultVar1 = true - assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT, subroutine) + assignExpressionToVariable(right, subroutineFloatEvalResultVar1, DataType.FLOAT) assignExpressionToRegister(left, RegisterOrPair.FAC1) out(""" lda #<$subroutineFloatEvalResultVar1 @@ -2928,7 +2928,7 @@ $repeatLabel lda $counterVar internal fun translateDirectMemReadExpressionToRegAorStack(expr: PtMemoryByte, pushResultOnEstack: Boolean) { fun assignViaExprEval() { - assignExpressionToVariable(expr.address, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(expr.address, "P8ZP_SCRATCH_W2", DataType.UWORD) if (isTargetCpu(CpuType.CPU65c02)) { if (pushResultOnEstack) { out(" lda (P8ZP_SCRATCH_W2) | dex | sta P8ESTACK_LO+1,x") diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt index 6c0b028b2..18b9e7707 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/BuiltinFunctionsAsmGen.kt @@ -163,24 +163,24 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, asmgen.out(" cmp ${arg2.address.asConstInteger()!!.toHex()}") } else { if(arg1.isSimple()) { - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.assignExpressionToRegister(arg1, RegisterOrPair.A) asmgen.out(" cmp P8ZP_SCRATCH_B1") } else { asmgen.pushCpuStack(DataType.UBYTE, arg1) - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.out(" pla | cmp P8ZP_SCRATCH_B1") } } } else -> { if(arg1.isSimple()) { - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.assignExpressionToRegister(arg1, RegisterOrPair.A) asmgen.out(" cmp P8ZP_SCRATCH_B1") } else { asmgen.pushCpuStack(DataType.UBYTE, arg1) - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.out(" pla | cmp P8ZP_SCRATCH_B1") } } @@ -209,7 +209,7 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, } else -> { if(arg1.isSimple()) { - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_W1", DataType.UWORD, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_W1", DataType.UWORD) asmgen.assignExpressionToRegister(arg1, RegisterOrPair.AY) asmgen.out(""" cpy P8ZP_SCRATCH_W1+1 @@ -218,7 +218,7 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, +""") } else { asmgen.pushCpuStack(DataType.UWORD, arg1) - asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_W1", DataType.UWORD, fcall.definingISub()) + asmgen.assignExpressionToVariable(arg2, "P8ZP_SCRATCH_W1", DataType.UWORD) asmgen.restoreRegisterStack(CpuRegister.Y, false) asmgen.restoreRegisterStack(CpuRegister.A, false) asmgen.out(""" @@ -550,14 +550,14 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, if(arrayvar.type==DataType.UWORD) { if(dt!='b') throw AssemblyError("non-array var indexing requires bytes dt") - asmgen.assignExpressionToVariable(arrayvar, "prog8_lib.${operation}_array_u${dt}._arg_target", DataType.UWORD, null) + asmgen.assignExpressionToVariable(arrayvar, "prog8_lib.${operation}_array_u${dt}._arg_target", DataType.UWORD) } else { val addressOf = PtAddressOf(arrayvar.position) addressOf.add(arrayvar) addressOf.parent = arrayvar.parent.parent - asmgen.assignExpressionToVariable(addressOf, "prog8_lib.${operation}_array_u${dt}._arg_target", DataType.UWORD, null) + asmgen.assignExpressionToVariable(addressOf, "prog8_lib.${operation}_array_u${dt}._arg_target", DataType.UWORD) } - asmgen.assignExpressionToVariable(indexer.index, "prog8_lib.${operation}_array_u${dt}._arg_index", DataType.UBYTE, null) + asmgen.assignExpressionToVariable(indexer.index, "prog8_lib.${operation}_array_u${dt}._arg_index", DataType.UBYTE) } private fun funcSgn(fcall: PtBuiltinFunctionCall, resultToStack: Boolean, resultRegister: RegisterOrPair?, scope: IPtSubroutine?) { @@ -686,7 +686,7 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, } // fall through method: - asmgen.assignExpressionToVariable(fcall.args[0], "P8ZP_SCRATCH_W1", DataType.UWORD, null) + asmgen.assignExpressionToVariable(fcall.args[0], "P8ZP_SCRATCH_W1", DataType.UWORD) asmgen.assignExpressionToRegister(fcall.args[1], RegisterOrPair.AY) asmgen.out(" jsr prog8_lib.func_pokew") } @@ -970,7 +970,7 @@ internal class BuiltinFunctionsAsmGen(private val program: PtProgram, val addr = PtAddressOf(value.position) addr.add(variable) addr.parent = call - asmgen.assignExpressionToVariable(value, asmgen.asmVariableName(variable), DataType.FLOAT, scope) + asmgen.assignExpressionToVariable(value, asmgen.asmVariableName(variable), DataType.FLOAT) AsmAssignSource.fromAstSource(addr, program, asmgen) } } diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt index b2afb7134..5471ece68 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/ExpressionsAsmGen.kt @@ -950,8 +950,8 @@ internal class ExpressionsAsmGen(private val program: PtProgram, } private fun translateCompareStrings(s1: PtExpression, operator: String, s2: PtExpression) { - asmgen.assignExpressionToVariable(s1, "prog8_lib.strcmp_expression._arg_s1", DataType.UWORD, null) - asmgen.assignExpressionToVariable(s2, "prog8_lib.strcmp_expression._arg_s2", DataType.UWORD, null) + asmgen.assignExpressionToVariable(s1, "prog8_lib.strcmp_expression._arg_s1", DataType.UWORD) + asmgen.assignExpressionToVariable(s2, "prog8_lib.strcmp_expression._arg_s2", DataType.UWORD) asmgen.out(" jsr prog8_lib.strcmp_expression") // result of compare is in A compareStringsProcessResultInA(operator) } diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt index 2f1b1a686..5d609b974 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/ForLoopsAsmGen.kt @@ -50,8 +50,8 @@ internal class ForLoopsAsmGen(private val program: PtProgram, val incdec = if(stepsize==1) "inc" else "dec" // loop over byte range via loopvar val varname = asmgen.asmVariableName(stmt.variable) - asmgen.assignExpressionToVariable(range.from, varname, ArrayToElementTypes.getValue(iterableDt), null) - asmgen.assignExpressionToVariable(range.to, "$modifiedLabel+1", ArrayToElementTypes.getValue(iterableDt), null) + asmgen.assignExpressionToVariable(range.from, varname, ArrayToElementTypes.getValue(iterableDt)) + asmgen.assignExpressionToVariable(range.to, "$modifiedLabel+1", ArrayToElementTypes.getValue(iterableDt)) asmgen.out(loopLabel) asmgen.translate(stmt.statements) asmgen.out(""" @@ -68,8 +68,8 @@ $modifiedLabel cmp #0 ; modified // loop over byte range via loopvar val varname = asmgen.asmVariableName(stmt.variable) - asmgen.assignExpressionToVariable(range.from, varname, ArrayToElementTypes.getValue(iterableDt), null) - asmgen.assignExpressionToVariable(range.to, "$modifiedLabel+1", ArrayToElementTypes.getValue(iterableDt), null) + asmgen.assignExpressionToVariable(range.from, varname, ArrayToElementTypes.getValue(iterableDt)) + asmgen.assignExpressionToVariable(range.to, "$modifiedLabel+1", ArrayToElementTypes.getValue(iterableDt)) asmgen.out(loopLabel) asmgen.translate(stmt.statements) if(stepsize>0) { @@ -594,6 +594,5 @@ $loopLabel""") asmgen.assignExpressionToVariable( range.from, asmgen.asmVariableName(stmt.variable), - stmt.variable.type, - stmt.definingISub()) + stmt.variable.type) } diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt index 76c88720e..72816ee18 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/FunctionCallAsmGen.kt @@ -141,7 +141,7 @@ internal class FunctionCallAsmGen(private val program: PtProgram, private val as throw AssemblyError("argument type incompatible") val varName = asmgen.asmVariableName(sub.scopedName + "." + parameter.name) - asmgen.assignExpressionToVariable(value, varName, parameter.type, sub) + asmgen.assignExpressionToVariable(value, varName, parameter.type) } private fun argumentViaRegister(sub: IPtSubroutine, parameter: IndexedValue, value: PtExpression, registerOverride: RegisterOrPair? = null) { @@ -198,7 +198,7 @@ internal class FunctionCallAsmGen(private val program: PtProgram, private val as register!! if(requiredDt largerThan value.type) { // we need to sign extend the source, do this via temporary word variable - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_W1", DataType.UBYTE, sub) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_W1", DataType.UBYTE) asmgen.signExtendVariableLsb("P8ZP_SCRATCH_W1", value.type) asmgen.assignVariableToRegister("P8ZP_SCRATCH_W1", register, null, Position.DUMMY) } else { diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt index e5fa99193..045b08ef1 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt @@ -131,7 +131,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, } SourceStorageKind.MEMORY -> { fun assignViaExprEval(expression: PtExpression) { - assignExpressionToVariable(expression, "P8ZP_SCRATCH_W2", DataType.UWORD, assign.target.scope) + assignExpressionToVariable(expression, "P8ZP_SCRATCH_W2", DataType.UWORD) asmgen.loadAFromZpPointerVar("P8ZP_SCRATCH_W2") assignRegisterByte(assign.target, CpuRegister.A) } @@ -370,66 +370,9 @@ internal class AssignmentAsmGen(private val program: PtProgram, return true } - fun simpleLogicalBytesExpr() { - // both left and right expression operands are simple. - require(left is PtExpression && right is PtExpression) - if (right is PtNumber || right is PtIdentifier) - assignLogicalWithSimpleRightOperandByte(assign.target, left, oper.operator, right) - else if (left is PtNumber || left is PtIdentifier) - assignLogicalWithSimpleRightOperandByte(assign.target, right, oper.operator, left) - else { - assignExpressionToRegister(left, RegisterOrPair.A, false) - asmgen.saveRegisterStack(CpuRegister.A, false) - assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE, scope) - asmgen.restoreRegisterStack(CpuRegister.A, false) - when (oper.operator) { - "&", "and" -> asmgen.out(" and P8ZP_SCRATCH_B1") - "|", "or" -> asmgen.out(" ora P8ZP_SCRATCH_B1") - "^", "xor" -> asmgen.out(" eor P8ZP_SCRATCH_B1") - else -> throw AssemblyError("invalid operator") - } - assignRegisterByte(assign.target, CpuRegister.A) - } - } - - fun simpleLogicalWordsExpr() { - // both left and right expression operands are simple. - require(left is PtExpression && right is PtExpression) - if (right is PtNumber || right is PtIdentifier) - assignLogicalWithSimpleRightOperandWord(assign.target, left, oper.operator, right) - else if (left is PtNumber || left is PtIdentifier) - assignLogicalWithSimpleRightOperandWord(assign.target, right, oper.operator, left) - else { - assignExpressionToRegister(left, RegisterOrPair.AY, false) - asmgen.saveRegisterStack(CpuRegister.A, false) - asmgen.saveRegisterStack(CpuRegister.Y, false) - assignExpressionToVariable(right, "P8ZP_SCRATCH_W1", DataType.UWORD, scope) - when (oper.operator) { - "&", "and" -> asmgen.out(" pla | and P8ZP_SCRATCH_W1+1 | tay | pla | and P8ZP_SCRATCH_W1") - "|", "or" -> asmgen.out(" pla | ora P8ZP_SCRATCH_W1+1 | tay | pla | ora P8ZP_SCRATCH_W1") - "^", "xor" -> asmgen.out(" pla | eor P8ZP_SCRATCH_W1+1 | tay | pla | eor P8ZP_SCRATCH_W1") - else -> throw AssemblyError("invalid operator") - } - assignRegisterpairWord(assign.target, RegisterOrPair.AY) - } - } - - if(value.children.size==3 && oper.operator in setOf("&", "|", "^", "and", "or", "xor")) { - if(left is PtExpression && right is PtExpression) { - if (left.type in ByteDatatypes && right.type in ByteDatatypes) { - if (right.isSimple()) { - simpleLogicalBytesExpr() - return true - } - } - if (left.type in WordDatatypes && right.type in WordDatatypes) { - if (right.isSimple()) { - simpleLogicalWordsExpr() - return true - } - } - } - } + if(value.children.size==3 && left is PtExpression && right is PtExpression) + if(simpleLogicalExprRPN(left, oper.operator, right, assign.target)) + return true // TODO RPN add +,-,<<,>> and perhaps even == and != special behaviors of BinExpr @@ -509,7 +452,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, } is PtExpression -> { val varname = evalVarName(it.type, depth) - assignExpressionToVariable(it, varname, it.type, scope) + assignExpressionToVariable(it, varname, it.type) depth++ } else -> throw AssemblyError("weird rpn node") @@ -529,6 +472,66 @@ internal class AssignmentAsmGen(private val program: PtProgram, return true } + private fun simpleLogicalExprRPN(left: PtExpression, operator: String, right: PtExpression, target: AsmAssignTarget): Boolean { + fun simpleLogicalBytesExpr() { + // both left and right expression operands are simple. + if (right is PtNumber || right is PtIdentifier) + assignLogicalWithSimpleRightOperandByte(target, left, operator, right) + else if (left is PtNumber || left is PtIdentifier) + assignLogicalWithSimpleRightOperandByte(target, right, operator, left) + else { + assignExpressionToRegister(left, RegisterOrPair.A, false) + asmgen.saveRegisterStack(CpuRegister.A, false) + assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", DataType.UBYTE) + asmgen.restoreRegisterStack(CpuRegister.A, false) + when (operator) { + "&", "and" -> asmgen.out(" and P8ZP_SCRATCH_B1") + "|", "or" -> asmgen.out(" ora P8ZP_SCRATCH_B1") + "^", "xor" -> asmgen.out(" eor P8ZP_SCRATCH_B1") + else -> throw AssemblyError("invalid operator") + } + assignRegisterByte(target, CpuRegister.A) + } + } + + fun simpleLogicalWordsExpr() { + // both left and right expression operands are simple. + if (right is PtNumber || right is PtIdentifier) + assignLogicalWithSimpleRightOperandWord(target, left, operator, right) + else if (left is PtNumber || left is PtIdentifier) + assignLogicalWithSimpleRightOperandWord(target, right, operator, left) + else { + assignExpressionToRegister(left, RegisterOrPair.AY, false) + asmgen.saveRegisterStack(CpuRegister.A, false) + asmgen.saveRegisterStack(CpuRegister.Y, false) + assignExpressionToVariable(right, "P8ZP_SCRATCH_W1", DataType.UWORD) + when (operator) { + "&", "and" -> asmgen.out(" pla | and P8ZP_SCRATCH_W1+1 | tay | pla | and P8ZP_SCRATCH_W1") + "|", "or" -> asmgen.out(" pla | ora P8ZP_SCRATCH_W1+1 | tay | pla | ora P8ZP_SCRATCH_W1") + "^", "xor" -> asmgen.out(" pla | eor P8ZP_SCRATCH_W1+1 | tay | pla | eor P8ZP_SCRATCH_W1") + else -> throw AssemblyError("invalid operator") + } + assignRegisterpairWord(target, RegisterOrPair.AY) + } + } + + if(operator in setOf("&", "|", "^", "and", "or", "xor")) { + if (left.type in ByteDatatypes && right.type in ByteDatatypes) { + if (right.isSimple()) { + simpleLogicalBytesExpr() + return true + } + } + if (left.type in WordDatatypes && right.type in WordDatatypes) { + if (right.isSimple()) { + simpleLogicalWordsExpr() + return true + } + } + } + return false + } + private fun assignRPNComparison(assign: AsmAssignment, comparison: PtRpn) { val (left, oper, right) = comparison.finalOperation() val constRight = (right as PtExpression).asConstInteger() @@ -622,7 +625,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, else { assignExpressionToRegister(expr.left, RegisterOrPair.A, false) asmgen.saveRegisterStack(CpuRegister.A, false) - assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_B1", DataType.UBYTE, expr.definingISub()) + assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.restoreRegisterStack(CpuRegister.A, false) when (expr.operator) { "&", "and" -> asmgen.out(" and P8ZP_SCRATCH_B1") @@ -644,7 +647,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, assignExpressionToRegister(expr.left, RegisterOrPair.AY, false) asmgen.saveRegisterStack(CpuRegister.A, false) asmgen.saveRegisterStack(CpuRegister.Y, false) - assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_W1", DataType.UWORD, expr.definingISub()) + assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_W1", DataType.UWORD) when (expr.operator) { "&", "and" -> asmgen.out(" pla | and P8ZP_SCRATCH_W1+1 | tay | pla | and P8ZP_SCRATCH_W1") "|", "or" -> asmgen.out(" pla | ora P8ZP_SCRATCH_W1+1 | tay | pla | ora P8ZP_SCRATCH_W1") @@ -677,7 +680,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, expr.left.isSimple() && expr.right.isSimple()) { assignExpressionToRegister(expr.left, RegisterOrPair.A, false) asmgen.saveRegisterStack(CpuRegister.A, false) - assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_B1", DataType.UBYTE, expr.definingISub()) + assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_B1", DataType.UBYTE) asmgen.restoreRegisterStack(CpuRegister.A, false) if(expr.operator=="==") { asmgen.out(""" @@ -703,7 +706,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, assignExpressionToRegister(expr.left, RegisterOrPair.AY, false) asmgen.saveRegisterStack(CpuRegister.A, false) asmgen.saveRegisterStack(CpuRegister.Y, false) - assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_W1", DataType.UWORD, expr.definingISub()) + assignExpressionToVariable(expr.right, "P8ZP_SCRATCH_W1", DataType.UWORD) asmgen.restoreRegisterStack(CpuRegister.Y, false) asmgen.restoreRegisterStack(CpuRegister.A, false) if(expr.operator=="==") { @@ -1148,7 +1151,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, return } DataType.ARRAY_W, DataType.ARRAY_UW -> { - assignExpressionToVariable(containment.element, "P8ZP_SCRATCH_W1", elementDt, containment.definingISub()) + assignExpressionToVariable(containment.element, "P8ZP_SCRATCH_W1", elementDt) assignAddressOf(AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, DataType.UWORD, containment.definingISub(), symbol.astNode.position, "P8ZP_SCRATCH_W2"), varname) asmgen.out(" ldy #$numElements") asmgen.out(" jsr prog8_lib.containment_wordarray") @@ -1198,7 +1201,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, if(targetDt in WordDatatypes) { fun assignViaExprEval(addressExpression: PtExpression) { - asmgen.assignExpressionToVariable(addressExpression, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + asmgen.assignExpressionToVariable(addressExpression, "P8ZP_SCRATCH_W2", DataType.UWORD) asmgen.loadAFromZpPointerVar("P8ZP_SCRATCH_W2") asmgen.out(" ldy #0") assignRegisterpairWord(target, RegisterOrPair.AY) @@ -1262,7 +1265,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, } in PassByReferenceDatatypes -> { // str/array value cast (most likely to UWORD, take address-of) - assignExpressionToVariable(value, target.asmVarname, targetDt, null) + assignExpressionToVariable(value, target.asmVarname, targetDt) } else -> throw AssemblyError("strange dt in typecast assign to var: $valueDt --> $targetDt") } @@ -3123,13 +3126,13 @@ internal class AssignmentAsmGen(private val program: PtProgram, fun storeViaExprEval() { when(addressExpr) { is PtNumber, is PtIdentifier -> { - assignExpressionToVariable(addressExpr, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(addressExpr, "P8ZP_SCRATCH_W2", DataType.UWORD) asmgen.storeAIntoZpPointerVar("P8ZP_SCRATCH_W2") } else -> { // same as above but we need to save the A register asmgen.out(" pha") - assignExpressionToVariable(addressExpr, "P8ZP_SCRATCH_W2", DataType.UWORD, null) + assignExpressionToVariable(addressExpr, "P8ZP_SCRATCH_W2", DataType.UWORD) asmgen.out(" pla") asmgen.storeAIntoZpPointerVar("P8ZP_SCRATCH_W2") } @@ -3162,12 +3165,12 @@ internal class AssignmentAsmGen(private val program: PtProgram, translateNormalAssignment(assign, expr.definingISub()) } - internal fun assignExpressionToVariable(expr: PtExpression, asmVarName: String, dt: DataType, scope: IPtSubroutine?) { + internal fun assignExpressionToVariable(expr: PtExpression, asmVarName: String, dt: DataType) { if(expr.type==DataType.FLOAT && dt!=DataType.FLOAT) { throw AssemblyError("can't directly assign a FLOAT expression to an integer variable $expr") } else { val src = AsmAssignSource.fromAstSource(expr, program, asmgen) - val tgt = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, dt, scope, expr.position, variableAsmName = asmVarName) + val tgt = AsmAssignTarget(TargetStorageKind.VARIABLE, asmgen, dt, expr.definingISub(), expr.position, variableAsmName = asmVarName) val assign = AsmAssignment(src, tgt, program.memsizer, expr.position) translateNormalAssignment(assign, expr.definingISub()) } @@ -3207,7 +3210,7 @@ internal class AssignmentAsmGen(private val program: PtProgram, asmgen.out(" sta ($sourceName),y") } else -> { - asmgen.assignExpressionToVariable(memory.address, "P8ZP_SCRATCH_W2", DataType.UWORD, target.scope) + asmgen.assignExpressionToVariable(memory.address, "P8ZP_SCRATCH_W2", DataType.UWORD) asmgen.out(""" ldy #0 lda (P8ZP_SCRATCH_W2),y diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt index 8bbdf0857..b72284f39 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AugmentableAssignmentAsmGen.kt @@ -304,7 +304,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram, } private fun inplaceModification_byte_value_to_pointer(pointervar: PtIdentifier, operator: String, value: PtExpression) { - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", DataType.UBYTE, null) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", DataType.UBYTE) val sourceName = asmgen.loadByteFromPointerIntoA(pointervar) when (operator) { // note: ** (power) operator requires floats. @@ -454,7 +454,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram, asmgen.out(" clc | adc $name | sta $name") } "-" -> { - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", dt, null) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", dt) asmgen.out(" lda $name | sec | sbc P8ZP_SCRATCH_B1 | sta $name") } "*" -> { @@ -1359,7 +1359,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram, when (operator) { // note: ** (power) operator requires floats. "+" -> { - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", valueDt, null) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", valueDt) if(valueDt==DataType.UBYTE) asmgen.out(""" lda $name @@ -1383,7 +1383,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram, sta $name+1""") } "-" -> { - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", valueDt, null) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_B1", valueDt) if(valueDt==DataType.UBYTE) asmgen.out(""" lda $name @@ -1489,7 +1489,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram, asmgen.out(" clc | adc $name | sta $name | tya | adc $name+1 | sta $name+1") } "-" -> { - asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_W1", valueDt, null) + asmgen.assignExpressionToVariable(value, "P8ZP_SCRATCH_W1", valueDt) asmgen.out(" lda $name | sec | sbc P8ZP_SCRATCH_W1 | sta $name | lda $name+1 | sbc P8ZP_SCRATCH_W1+1 | sta $name+1") } "*" -> {