mirror of
https://github.com/irmen/prog8.git
synced 2024-12-25 23:29:55 +00:00
fix for loop with signed byte loopvar over non-const
This commit is contained in:
parent
afd155ac4f
commit
fefd9b52a8
@ -54,11 +54,11 @@ internal class ForLoopsAsmGen(private val program: Program, private val asmgen:
|
||||
asmgen.out(loopLabel)
|
||||
asmgen.translate(stmt.body)
|
||||
asmgen.out("""
|
||||
lda $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
beq $endLabel
|
||||
$incdec $varname
|
||||
jmp $loopLabel
|
||||
lda $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
beq $endLabel
|
||||
$incdec $varname
|
||||
jmp $loopLabel
|
||||
$endLabel""")
|
||||
|
||||
} else {
|
||||
@ -71,22 +71,23 @@ $endLabel""")
|
||||
asmgen.assignExpressionToVariable(range.to, "$modifiedLabel+1", ArrayElementTypes.getValue(iterableDt), null)
|
||||
asmgen.out(loopLabel)
|
||||
asmgen.translate(stmt.body)
|
||||
asmgen.out(" lda $varname")
|
||||
if(stepsize>0) {
|
||||
asmgen.out("""
|
||||
clc
|
||||
adc #$stepsize
|
||||
sta $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
bcc $loopLabel
|
||||
beq $loopLabel""")
|
||||
lda $varname
|
||||
clc
|
||||
adc #$stepsize
|
||||
sta $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
bmi $loopLabel
|
||||
beq $loopLabel""")
|
||||
} else {
|
||||
asmgen.out("""
|
||||
sec
|
||||
sbc #${stepsize.absoluteValue}
|
||||
sta $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
bcs $loopLabel""")
|
||||
lda $varname
|
||||
sec
|
||||
sbc #${stepsize.absoluteValue}
|
||||
sta $varname
|
||||
$modifiedLabel cmp #0 ; modified
|
||||
bpl $loopLabel""")
|
||||
}
|
||||
asmgen.out(endLabel)
|
||||
}
|
||||
|
@ -12,10 +12,10 @@ main {
|
||||
uword uw
|
||||
word ww
|
||||
|
||||
ubyte arrub = 10
|
||||
uword arruw = 10
|
||||
byte arrb = 10
|
||||
word arrw = 10
|
||||
const ubyte arrub = 10
|
||||
const uword arruw = 10
|
||||
const byte arrb = 10
|
||||
const word arrw = 10
|
||||
|
||||
test_stack.test()
|
||||
|
||||
@ -73,11 +73,11 @@ main {
|
||||
}
|
||||
txt.chrout('\n')
|
||||
|
||||
for ww in arrw-2 to -2 step -2 {
|
||||
txt.print_w(ww)
|
||||
txt.chrout(',')
|
||||
}
|
||||
txt.chrout('\n')
|
||||
; for ww in arrw-2 to -2 step -2 {
|
||||
; txt.print_w(ww)
|
||||
; txt.chrout(',')
|
||||
; }
|
||||
; txt.chrout('\n')
|
||||
|
||||
test_stack.test()
|
||||
txt.chrout('\n')
|
||||
|
Loading…
Reference in New Issue
Block a user