fix bugs in uword <= and >= comparisons

This commit is contained in:
Irmen de Jong 2021-03-18 18:40:25 +01:00
parent 330e691b78
commit 1dbc902513
2 changed files with 7 additions and 118 deletions

View File

@ -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) { private fun translateUwordLessOrEqualJump(left: Expression, right: Expression, leftConstVal: NumericLiteralValue?, rightConstVal: NumericLiteralValue?, jumpIfFalseLabel: String) {
// TODO fix this uword <=
fun code(msbCpyOperand: String, lsbCmpOperand: String) { fun code(msbCpyOperand: String, lsbCmpOperand: String) {
asmgen.out(""" asmgen.out("""
cpy $msbCpyOperand cpy $msbCpyOperand
beq + beq +
bcc ++
bcs $jumpIfFalseLabel bcs $jumpIfFalseLabel
+ cmp $lsbCmpOperand + cmp $lsbCmpOperand
bcs $jumpIfFalseLabel bcc +
bne $jumpIfFalseLabel""") beq +
bne $jumpIfFalseLabel
+""")
} }
if(rightConstVal!=null) { 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) { private fun translateUwordGreaterOrEqualJump(left: Expression, right: Expression, leftConstVal: NumericLiteralValue?, rightConstVal: NumericLiteralValue?, jumpIfFalseLabel: String) {
// TODO fix this uword >=
fun code(msbCpyOperand: String, lsbCmpOperand: String) { fun code(msbCpyOperand: String, lsbCmpOperand: String) {
asmgen.out(""" asmgen.out("""
cpy $msbCpyOperand cpy $msbCpyOperand
beq +
bcc $jumpIfFalseLabel bcc $jumpIfFalseLabel
+ cmp $lsbCmpOperand bne +
cmp $lsbCmpOperand
bcc $jumpIfFalseLabel bcc $jumpIfFalseLabel
+""") +""")
} }

View File

@ -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 v1<v2
txt.print("ok: 100 < 64444\n")
else
txt.print("error in 100<64444!\n")
if v1<=v2
txt.print("ok: 100 <= 64444\n")
else
txt.print("error in 100<=64444!\n")
if v1>v2
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 v1<v2
txt.print("error in 5555<322!\n")
else
txt.print("ok: 5555 is not < 322\n")
if v1<=v2
txt.print("error in 5555<=322!\n")
else
txt.print("ok: 5555 is not <= 322\n")
if v1>v2
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 v1<v2
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")
if v1>v2
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")
}
}