diff --git a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt index 281f3200d..a97de72e4 100644 --- a/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt +++ b/codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt @@ -446,8 +446,19 @@ internal class AssignmentAsmGen(private val program: PtProgram, ifPart.add(assignTrue) elsePart.add(assignFalse) val ifelse = PtIfElse(assign.position) - val exprClone = PtBinaryExpression(expr.operator, expr.type, expr.position) - expr.children.forEach { exprClone.children.add(it) } // doesn't seem to need a deep clone + val exprClone: PtBinaryExpression + if(!asmgen.isTargetCpu(CpuType.VIRTUAL) + && (expr.operator==">" || expr.operator=="<=") + && expr.right.type in WordDatatypes) { + // word X>Y -> X Y>=X , easier to do in 6502 (codegen also expects these to no longe exist!) + exprClone = PtBinaryExpression(if(expr.operator==">") "<" else ">=", expr.type, expr.position) + exprClone.children.add(expr.children[1]) // doesn't seem to need a deep clone + exprClone.children.add(expr.children[0]) // doesn't seem to need a deep clone + } else { + exprClone = PtBinaryExpression(expr.operator, expr.type, expr.position) + exprClone.children.add(expr.children[0]) // doesn't seem to need a deep clone + exprClone.children.add(expr.children[1]) // doesn't seem to need a deep clone + } ifelse.add(exprClone) ifelse.add(ifPart) ifelse.add(elsePart) @@ -511,8 +522,19 @@ internal class AssignmentAsmGen(private val program: PtProgram, } ifPart.add(assignTrue) val ifelse = PtIfElse(assign.position) - val exprClone = PtBinaryExpression(expr.operator, expr.type, expr.position) - expr.children.forEach { exprClone.children.add(it) } // doesn't seem to need a deep clone + val exprClone: PtBinaryExpression + if(!asmgen.isTargetCpu(CpuType.VIRTUAL) + && (expr.operator==">" || expr.operator=="<=") + && expr.right.type in WordDatatypes) { + // word X>Y -> X Y>=X , easier to do in 6502 (codegen also expects these to no longe exist!) + exprClone = PtBinaryExpression(if(expr.operator==">") "<" else ">=", expr.type, expr.position) + exprClone.children.add(expr.children[1]) // doesn't seem to need a deep clone + exprClone.children.add(expr.children[0]) // doesn't seem to need a deep clone + } else { + exprClone = PtBinaryExpression(expr.operator, expr.type, expr.position) + exprClone.children.add(expr.children[0]) // doesn't seem to need a deep clone + exprClone.children.add(expr.children[1]) // doesn't seem to need a deep clone + } ifelse.add(exprClone) ifelse.add(ifPart) ifelse.add(PtNodeGroup()) diff --git a/docs/source/todo.rst b/docs/source/todo.rst index f4b9c0f70..6aecd3ca2 100644 --- a/docs/source/todo.rst +++ b/docs/source/todo.rst @@ -2,6 +2,9 @@ TODO ==== larger programs: +dirlist +bobs +cobramk3-gfx automatons mandelbrot (quite a bit larger) mandelbrot-gfx