From 1dbc902513f383ef6706b0e6311d62ab4e0a0f67 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Thu, 18 Mar 2021 18:40:25 +0100 Subject: [PATCH] fix bugs in uword <= and >= comparisons --- .../cpu6502/codegen/ExpressionsAsmGen.kt | 15 ++- compiler/test/comparisons/old_ifs_uword.p8 | 110 ------------------ 2 files changed, 7 insertions(+), 118 deletions(-) delete mode 100644 compiler/test/comparisons/old_ifs_uword.p8 diff --git a/compiler/src/prog8/compiler/target/cpu6502/codegen/ExpressionsAsmGen.kt b/compiler/src/prog8/compiler/target/cpu6502/codegen/ExpressionsAsmGen.kt index c38ad8ad0..2782c4a44 100644 --- a/compiler/src/prog8/compiler/target/cpu6502/codegen/ExpressionsAsmGen.kt +++ b/compiler/src/prog8/compiler/target/cpu6502/codegen/ExpressionsAsmGen.kt @@ -790,16 +790,17 @@ internal class ExpressionsAsmGen(private val program: Program, private val asmge private fun translateUwordLessOrEqualJump(left: Expression, right: Expression, leftConstVal: NumericLiteralValue?, rightConstVal: NumericLiteralValue?, jumpIfFalseLabel: String) { - // TODO fix this uword <= - fun code(msbCpyOperand: String, lsbCmpOperand: String) { asmgen.out(""" cpy $msbCpyOperand beq + + bcc ++ bcs $jumpIfFalseLabel + cmp $lsbCmpOperand - bcs $jumpIfFalseLabel - bne $jumpIfFalseLabel""") + bcc + + beq + + bne $jumpIfFalseLabel ++""") } if(rightConstVal!=null) { @@ -959,14 +960,12 @@ internal class ExpressionsAsmGen(private val program: Program, private val asmge private fun translateUwordGreaterOrEqualJump(left: Expression, right: Expression, leftConstVal: NumericLiteralValue?, rightConstVal: NumericLiteralValue?, jumpIfFalseLabel: String) { - // TODO fix this uword >= - fun code(msbCpyOperand: String, lsbCmpOperand: String) { asmgen.out(""" cpy $msbCpyOperand - beq + bcc $jumpIfFalseLabel -+ cmp $lsbCmpOperand + bne + + cmp $lsbCmpOperand bcc $jumpIfFalseLabel +""") } diff --git a/compiler/test/comparisons/old_ifs_uword.p8 b/compiler/test/comparisons/old_ifs_uword.p8 deleted file mode 100644 index ab457adf1..000000000 --- a/compiler/test/comparisons/old_ifs_uword.p8 +++ /dev/null @@ -1,110 +0,0 @@ -%import textio -%zeropage basicsafe - -; Note: this program is compatible with C64 and CX16. - -main { - - sub start() { - - uword v1 - uword v2 - - v1 = 100 - v2 = 64444 - if v1==v2 - txt.print("error in 100==64444!\n") - else - txt.print("ok: 100 not == 64444\n") - - if v1!=v2 - txt.print("ok: 100 != 64444\n") - else - txt.print("error in 100!=64444!\n") - - if v1v2 - txt.print("error in 100>64444!\n") - else - txt.print("ok: 100 is not >64444\n") - - if v1>=v2 - txt.print("error in 100>=64444!\n") - else - txt.print("ok: 100 is not >=64444\n") - - - v1 = 5555 - v2 = 322 - if v1==v2 - txt.print("error in 5555==322!\n") - else - txt.print("ok: 5555 not == 322\n") - - if v1!=v2 - txt.print("ok: 5555 != 322\n") - else - txt.print("error in 5555!=322!\n") - - if v1v2 - txt.print("ok: 5555 > 322\n") - else - txt.print("error in 5555>322!\n") - - if v1>=v2 - txt.print("ok: 5555 >= 322\n") - else - txt.print("error in 5555>=322!\n") - - v1 = 322 - v2 = 322 - if v1==v2 - txt.print("ok: 322 == 322\n") - else - txt.print("error in 322==322!\n") - - if v1!=v2 - txt.print("error in 322!=322!\n") - else - txt.print("ok: 322 is not != 322\n") - - if v1v2 - txt.print("error in 322>322!\n") - else - txt.print("ok: 322 is not > 322\n") - - if v1>=v2 - txt.print("ok: 322 >= 322\n") - else - txt.print("error in 322>=322!\n") - } -}