mirror of
https://github.com/irmen/prog8.git
synced 2024-10-18 01:24:51 +00:00
optimize add/sub expr
This commit is contained in:
parent
6db715d879
commit
6c233c6a0a
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user