for loops now use 'bra' if available

This commit is contained in:
Irmen de Jong 2021-02-28 16:35:59 +01:00
parent dea775a9cd
commit 0e0278c84a

View File

@ -57,9 +57,9 @@ internal class ForLoopsAsmGen(private val program: Program, private val asmgen:
lda $varname lda $varname
$modifiedLabel cmp #0 ; modified $modifiedLabel cmp #0 ; modified
beq $endLabel beq $endLabel
$incdec $varname $incdec $varname""")
jmp $loopLabel asmgen.jmp(loopLabel)
$endLabel""") asmgen.out(endLabel)
} else { } else {
@ -117,16 +117,15 @@ $modifiedLabel2 cmp #0 ; modified
asmgen.out(""" asmgen.out("""
+ inc $varname + inc $varname
bne $loopLabel bne $loopLabel
inc $varname+1 inc $varname+1""")
jmp $loopLabel asmgen.jmp(loopLabel)
""")
} else { } else {
asmgen.out(""" asmgen.out("""
+ lda $varname + lda $varname
bne + bne +
dec $varname+1 dec $varname+1
+ dec $varname + dec $varname""")
jmp $loopLabel""") asmgen.jmp(loopLabel)
} }
asmgen.out(endLabel) asmgen.out(endLabel)
} }
@ -386,12 +385,14 @@ $loopLabel""")
} }
-2 -> { -2 -> {
when (range.last) { when (range.last) {
0 -> asmgen.out(""" 0 -> {
asmgen.out("""
lda $varname lda $varname
beq $endLabel beq $endLabel
dec $varname dec $varname
dec $varname dec $varname""")
jmp $loopLabel""") asmgen.jmp(loopLabel)
}
1 -> asmgen.out(""" 1 -> asmgen.out("""
dec $varname dec $varname
beq $endLabel beq $endLabel
@ -413,8 +414,8 @@ $loopLabel""")
beq $endLabel beq $endLabel
clc clc
adc #${range.step} adc #${range.step}
sta $varname sta $varname""")
jmp $loopLabel""") asmgen.jmp(loopLabel)
} }
} }
asmgen.out(endLabel) asmgen.out(endLabel)
@ -450,9 +451,9 @@ $loopLabel""")
sta $varname sta $varname
lda $varname+1 lda $varname+1
adc #>${range.step} adc #>${range.step}
sta $varname+1 sta $varname+1""")
jmp $loopLabel asmgen.jmp(loopLabel)
$endLabel""") asmgen.out(endLabel)
} }
} }
} }
@ -502,9 +503,9 @@ $loopLabel""")
asmgen.out(""" asmgen.out("""
lda $varname lda $varname
beq $endLabel beq $endLabel
dec $varname dec $varname""")
jmp $loopLabel asmgen.jmp(loopLabel)
$endLabel""") asmgen.out(endLabel)
} }
1 -> { 1 -> {
asmgen.out(""" asmgen.out("""
@ -545,9 +546,9 @@ $loopLabel""")
beq $endLabel beq $endLabel
+ inc $varname + inc $varname
bne $loopLabel bne $loopLabel
inc $varname+1 inc $varname+1""")
jmp $loopLabel asmgen.jmp(loopLabel)
$endLabel""") asmgen.out(endLabel)
asmgen.loopEndLabels.pop() asmgen.loopEndLabels.pop()
} }
@ -573,9 +574,9 @@ $loopLabel""")
+ lda $varname + lda $varname
bne + bne +
dec $varname+1 dec $varname+1
+ dec $varname + dec $varname""")
jmp $loopLabel asmgen.jmp(loopLabel)
$endLabel""") asmgen.out(endLabel)
asmgen.loopEndLabels.pop() asmgen.loopEndLabels.pop()
} }