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)
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) {
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 {
uword vv = 60
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()
}
word[5] dx = [111,222,333,444,555]
sub start() {
print_time(9870)
print_time(9871)
print_time(9872)
print_time(9873)
txt.nl()
print_time2(50)
print_time2(51)
print_time2(52)
print_time2(53)
uword hit_x = 999
cx16.r0=2
uword new_head_x = hit_x + dx[cx16.r0L] as uword
txt.print_uw(new_head_x)
}
}