mult todos.

This commit is contained in:
Irmen de Jong 2020-09-10 00:53:35 +02:00
parent 949d536e42
commit 836509c1d1
2 changed files with 30 additions and 11 deletions

View File

@ -36,6 +36,7 @@ internal class AsmGen(private val program: Program,
private val outputDir: Path): IAssemblyGenerator { private val outputDir: Path): IAssemblyGenerator {
// for expressions and augmented assignments: // for expressions and augmented assignments:
// TODO add 50, 80 and 100 as well (especially for the commanderX16)
val optimizedByteMultiplications = setOf(3,5,6,7,9,10,11,12,13,14,15,20,25,40) val optimizedByteMultiplications = setOf(3,5,6,7,9,10,11,12,13,14,15,20,25,40)
val optimizedWordMultiplications = setOf(3,5,6,7,9,10,12,15,20,25,40) val optimizedWordMultiplications = setOf(3,5,6,7,9,10,12,15,20,25,40)

View File

@ -372,10 +372,10 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
asmgen.out(" sta (P8ZP_SCRATCH_W1),y") asmgen.out(" sta (P8ZP_SCRATCH_W1),y")
} }
"*" -> { "*" -> {
if(value.absoluteValue in asmgen.optimizedByteMultiplications) { if(value in asmgen.optimizedByteMultiplications) {
TODO("optimized mem mul byte litval $value") TODO("optimized mem mul ubyte litval $value")
} else { } else {
TODO("mem mul byte litval $value") TODO("mem mul ubyte litval $value")
// asmgen.out(" jsr prog8_lib.mul_byte") // asmgen.out(" jsr prog8_lib.mul_byte")
} }
} }
@ -581,11 +581,20 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
"+" -> asmgen.out(" lda $name | clc | adc #$value | sta $name") "+" -> asmgen.out(" lda $name | clc | adc #$value | sta $name")
"-" -> asmgen.out(" lda $name | sec | sbc #$value | sta $name") "-" -> asmgen.out(" lda $name | sec | sbc #$value | sta $name")
"*" -> { "*" -> {
if(value.absoluteValue in asmgen.optimizedByteMultiplications) { if(dt == DataType.UBYTE) {
TODO("optimized var mul byte litval $value") if(value in asmgen.optimizedByteMultiplications) {
TODO("optimized var mul ubyte litval $value")
} else {
TODO("var mul ubyte litval $value")
// asmgen.out(" jsr prog8_lib.mul_byte")
}
} else { } else {
TODO("var mul byte litval $value") if(value.absoluteValue in asmgen.optimizedByteMultiplications) {
// asmgen.out(" jsr prog8_lib.mul_byte") TODO("optimized var mul sbyte litval $value")
} else {
TODO("var mul sbyte litval $value")
// asmgen.out(" jsr prog8_lib.mul_byte")
}
} }
} }
"/" -> { "/" -> {
@ -681,11 +690,19 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
} }
} }
"*" -> { "*" -> {
if(value.absoluteValue in asmgen.optimizedWordMultiplications) { if(dt == DataType.UWORD){
TODO("optimized var word mul litval $value") if(value in asmgen.optimizedWordMultiplications) {
TODO("optimized var uword mul litval $value")
} else {
TODO("var uword mul litval $value")
}
} else { } else {
// TODO don't use stack here if(value.absoluteValue in asmgen.optimizedWordMultiplications) {
asmgen.out(""" TODO("optimized var sword mul litval $value")
} else {
// TODO don't use stack here
// TODO does this work for signed words?
asmgen.out("""
lda $name lda $name
sta P8ZP_SCRATCH_W1 sta P8ZP_SCRATCH_W1
lda $name+1 lda $name+1
@ -697,6 +714,7 @@ internal class AugmentableAssignmentAsmGen(private val program: Program,
sta $name sta $name
lda math.multiply_words.result+1 lda math.multiply_words.result+1
sta $name+1""") sta $name+1""")
}
} }
} }
"/" -> { "/" -> {