optimize add/sub expr

This commit is contained in:
Irmen de Jong 2023-05-08 02:41:34 +02:00
parent 6db715d879
commit 6c233c6a0a
2 changed files with 41 additions and 25 deletions

View File

@ -529,7 +529,18 @@ internal class AssignmentAsmGen(private val program: PtProgram,
assignRegisterByte(assign.target, CpuRegister.A, dt in SignedDatatypes) assignRegisterByte(assign.target, CpuRegister.A, dt in SignedDatatypes)
return true return true
} }
else -> return false else -> {
assignExpressionToRegister(left, RegisterOrPair.A, left.type==DataType.BYTE)
asmgen.out(" pha")
assignExpressionToVariable(right, "P8ZP_SCRATCH_B1", right.type)
asmgen.out(" pla")
if(expr.operator=="+")
asmgen.out(" clc | adc P8ZP_SCRATCH_B1")
else
asmgen.out(" sec | sbc P8ZP_SCRATCH_B1")
assignRegisterByte(assign.target, CpuRegister.A, dt in SignedDatatypes)
return true
}
} }
} else if(dt in WordDatatypes) { } else if(dt in WordDatatypes) {
when (right) { when (right) {
@ -630,7 +641,30 @@ internal class AssignmentAsmGen(private val program: PtProgram,
} }
} }
} }
else -> return false else -> {
assignExpressionToVariable(right, "P8ZP_SCRATCH_W2", right.type)
assignExpressionToRegister(left, RegisterOrPair.AY, left.type==DataType.WORD)
if(expr.operator=="+")
asmgen.out("""
clc
adc P8ZP_SCRATCH_W2
pha
tya
adc P8ZP_SCRATCH_W2+1
tay
pla""")
else
asmgen.out("""
sec
sbc P8ZP_SCRATCH_W2
pha
tya
sbc P8ZP_SCRATCH_W2+1
tay
pla""")
assignRegisterpairWord(assign.target, RegisterOrPair.AY)
return true
}
} }
} }
} }

View File

@ -3,31 +3,13 @@
main { main {
uword vv = 60 word[5] dx = [111,222,333,444,555]
sub print_time(uword seconds) {
ubyte remainder = seconds % $0003 ==0
txt.print_uw(remainder)
txt.nl()
}
sub print_time2(ubyte seconds) {
ubyte remainder = seconds % 3 ==0
txt.print_uw(remainder)
txt.nl()
}
sub start() { sub start() {
print_time(9870) uword hit_x = 999
print_time(9871) cx16.r0=2
print_time(9872) uword new_head_x = hit_x + dx[cx16.r0L] as uword
print_time(9873) txt.print_uw(new_head_x)
txt.nl()
print_time2(50)
print_time2(51)
print_time2(52)
print_time2(53)
} }
} }