mirror of
https://github.com/irmen/prog8.git
synced 2025-02-18 20:30:43 +00:00
get rid of some empty lines in the generated asm
This commit is contained in:
parent
3b5cda85ff
commit
f0e8ff0326
@ -100,7 +100,7 @@ class DataType private constructor(val base: BaseDataType, val sub: BaseDataType
|
|||||||
if(actualElementDt.isNumericOrBool && actualElementDt != BaseDataType.LONG)
|
if(actualElementDt.isNumericOrBool && actualElementDt != BaseDataType.LONG)
|
||||||
DataType(BaseDataType.ARRAY, actualElementDt)
|
DataType(BaseDataType.ARRAY, actualElementDt)
|
||||||
else
|
else
|
||||||
throw NoSuchElementException("invalid element dt "+elementDt)
|
throw NoSuchElementException("invalid element dt $elementDt")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -961,8 +961,7 @@ $repeatLabel""")
|
|||||||
bne +
|
bne +
|
||||||
cpy #>${value.toHex()}
|
cpy #>${value.toHex()}
|
||||||
beq $choiceLabel
|
beq $choiceLabel
|
||||||
+
|
+""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1109,8 +1108,7 @@ $repeatLabel""")
|
|||||||
cmp #$80
|
cmp #$80
|
||||||
bcc +
|
bcc +
|
||||||
dey
|
dey
|
||||||
+
|
+""")
|
||||||
""")
|
|
||||||
else -> throw AssemblyError("need byte type")
|
else -> throw AssemblyError("need byte type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1124,8 +1122,7 @@ $repeatLabel""")
|
|||||||
cmp #$80
|
cmp #$80
|
||||||
bcc +
|
bcc +
|
||||||
dex
|
dex
|
||||||
+
|
+""")
|
||||||
""")
|
|
||||||
else -> throw AssemblyError("need byte type")
|
else -> throw AssemblyError("need byte type")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1491,8 +1491,7 @@ internal class AssignmentAsmGen(
|
|||||||
assignExpressionToRegister(left, RegisterOrPair.AY, dt.isSigned)
|
assignExpressionToRegister(left, RegisterOrPair.AY, dt.isSigned)
|
||||||
val castedSymname = asmgen.asmVariableName(castedValue)
|
val castedSymname = asmgen.asmVariableName(castedValue)
|
||||||
if (expr.operator == "+")
|
if (expr.operator == "+")
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
clc
|
clc
|
||||||
adc $castedSymname
|
adc $castedSymname
|
||||||
bcc +
|
bcc +
|
||||||
@ -1500,8 +1499,7 @@ internal class AssignmentAsmGen(
|
|||||||
+"""
|
+"""
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
sec
|
sec
|
||||||
sbc $castedSymname
|
sbc $castedSymname
|
||||||
bcs +
|
bcs +
|
||||||
@ -2677,8 +2675,7 @@ $endLabel""")
|
|||||||
lda #<$sourceName
|
lda #<$sourceName
|
||||||
ldy #>$sourceName
|
ldy #>$sourceName
|
||||||
sta ${target.asmVarname}
|
sta ${target.asmVarname}
|
||||||
sty ${target.asmVarname}+1
|
sty ${target.asmVarname}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
target.datatype.isString || target.datatype.isUnsignedByteArray || target.datatype.isByteArray -> {
|
target.datatype.isString || target.datatype.isUnsignedByteArray || target.datatype.isByteArray -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -2798,13 +2795,11 @@ $endLabel""")
|
|||||||
RegisterOrPair.AY -> asmgen.out(" ldy $sourceName+1 | lda $sourceName")
|
RegisterOrPair.AY -> asmgen.out(" ldy $sourceName+1 | lda $sourceName")
|
||||||
RegisterOrPair.XY -> asmgen.out(" ldy $sourceName+1 | ldx $sourceName")
|
RegisterOrPair.XY -> asmgen.out(" ldy $sourceName+1 | ldx $sourceName")
|
||||||
in Cx16VirtualRegisters -> {
|
in Cx16VirtualRegisters -> {
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
lda $sourceName
|
lda $sourceName
|
||||||
sta cx16.${target.register.toString().lowercase()}
|
sta cx16.${target.register.toString().lowercase()}
|
||||||
lda $sourceName+1
|
lda $sourceName+1
|
||||||
sta cx16.${target.register.toString().lowercase()}+1
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("can't load word in a single 8-bit register")
|
else -> throw AssemblyError("can't load word in a single 8-bit register")
|
||||||
}
|
}
|
||||||
@ -2825,8 +2820,7 @@ $endLabel""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
ldx #<${target.asmVarname}
|
ldx #<${target.asmVarname}
|
||||||
ldy #>${target.asmVarname}
|
ldy #>${target.asmVarname}
|
||||||
jsr floats.MOVMF
|
jsr floats.MOVMF""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.ARRAY -> {
|
TargetStorageKind.ARRAY -> {
|
||||||
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
||||||
@ -2924,8 +2918,7 @@ $endLabel""")
|
|||||||
TargetStorageKind.VARIABLE -> {
|
TargetStorageKind.VARIABLE -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $sourceName
|
lda $sourceName
|
||||||
sta ${target.asmVarname}
|
sta ${target.asmVarname}""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.MEMORY -> {
|
TargetStorageKind.MEMORY -> {
|
||||||
asmgen.out(" lda $sourceName")
|
asmgen.out(" lda $sourceName")
|
||||||
@ -2951,13 +2944,11 @@ $endLabel""")
|
|||||||
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldx $sourceName")
|
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldx $sourceName")
|
||||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||||
in Cx16VirtualRegisters -> {
|
in Cx16VirtualRegisters -> {
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
lda $sourceName
|
lda $sourceName
|
||||||
sta cx16.${target.register.toString().lowercase()}
|
sta cx16.${target.register.toString().lowercase()}
|
||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
@ -2975,8 +2966,7 @@ $endLabel""")
|
|||||||
ora #$7f
|
ora #$7f
|
||||||
bmi +
|
bmi +
|
||||||
lda #0
|
lda #0
|
||||||
+ sta ${wordtarget.asmVarname}+1
|
+ sta ${wordtarget.asmVarname}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.ARRAY -> {
|
TargetStorageKind.ARRAY -> {
|
||||||
if(wordtarget.array!!.splitWords) {
|
if(wordtarget.array!!.splitWords) {
|
||||||
@ -3759,8 +3749,7 @@ $endLabel""")
|
|||||||
stz ${target.asmVarname}+1
|
stz ${target.asmVarname}+1
|
||||||
stz ${target.asmVarname}+2
|
stz ${target.asmVarname}+2
|
||||||
stz ${target.asmVarname}+3
|
stz ${target.asmVarname}+3
|
||||||
stz ${target.asmVarname}+4
|
stz ${target.asmVarname}+4""")
|
||||||
""")
|
|
||||||
else
|
else
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #0
|
lda #0
|
||||||
@ -3768,8 +3757,7 @@ $endLabel""")
|
|||||||
sta ${target.asmVarname}+1
|
sta ${target.asmVarname}+1
|
||||||
sta ${target.asmVarname}+2
|
sta ${target.asmVarname}+2
|
||||||
sta ${target.asmVarname}+3
|
sta ${target.asmVarname}+3
|
||||||
sta ${target.asmVarname}+4
|
sta ${target.asmVarname}+4""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.ARRAY -> {
|
TargetStorageKind.ARRAY -> {
|
||||||
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
||||||
@ -3815,8 +3803,7 @@ $endLabel""")
|
|||||||
sty P8ZP_SCRATCH_W2
|
sty P8ZP_SCRATCH_W2
|
||||||
ldy #>${target.asmVarname}
|
ldy #>${target.asmVarname}
|
||||||
sty P8ZP_SCRATCH_W2+1
|
sty P8ZP_SCRATCH_W2+1
|
||||||
jsr floats.set_array_float
|
jsr floats.set_array_float""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.MEMORY -> throw AssemblyError("can't assign float to memory byte")
|
TargetStorageKind.MEMORY -> throw AssemblyError("can't assign float to memory byte")
|
||||||
TargetStorageKind.REGISTER -> {
|
TargetStorageKind.REGISTER -> {
|
||||||
@ -3837,8 +3824,7 @@ $endLabel""")
|
|||||||
TargetStorageKind.VARIABLE -> {
|
TargetStorageKind.VARIABLE -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda ${address.toHex()}
|
lda ${address.toHex()}
|
||||||
sta ${target.asmVarname}
|
sta ${target.asmVarname}""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.MEMORY -> {
|
TargetStorageKind.MEMORY -> {
|
||||||
asmgen.out(" lda ${address.toHex()}")
|
asmgen.out(" lda ${address.toHex()}")
|
||||||
@ -3857,13 +3843,11 @@ $endLabel""")
|
|||||||
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldy ${address.toHex()}")
|
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldy ${address.toHex()}")
|
||||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||||
in Cx16VirtualRegisters -> {
|
in Cx16VirtualRegisters -> {
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
lda ${address.toHex()}
|
lda ${address.toHex()}
|
||||||
sta cx16.${target.register.toString().lowercase()}
|
sta cx16.${target.register.toString().lowercase()}
|
||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
@ -3893,12 +3877,10 @@ $endLabel""")
|
|||||||
RegisterOrPair.XY -> asmgen.out(" tax | ldy #0")
|
RegisterOrPair.XY -> asmgen.out(" tax | ldy #0")
|
||||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||||
in Cx16VirtualRegisters -> {
|
in Cx16VirtualRegisters -> {
|
||||||
asmgen.out(
|
asmgen.out("""
|
||||||
"""
|
|
||||||
sta cx16.${target.register.toString().lowercase()}
|
sta cx16.${target.register.toString().lowercase()}
|
||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
@ -4232,8 +4214,7 @@ $endLabel""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda ${target.asmVarname}+1
|
lda ${target.asmVarname}+1
|
||||||
eor #$80
|
eor #$80
|
||||||
sta ${target.asmVarname}+1
|
sta ${target.asmVarname}+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
TargetStorageKind.ARRAY -> assignPrefixedExpressionToArrayElt(makePrefixedExprFromArrayExprAssign("-", assign), scope)
|
TargetStorageKind.ARRAY -> assignPrefixedExpressionToArrayElt(makePrefixedExprFromArrayExprAssign("-", assign), scope)
|
||||||
else -> throw AssemblyError("weird target for in-place float negation")
|
else -> throw AssemblyError("weird target for in-place float negation")
|
||||||
|
@ -741,8 +741,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
ora $variable+1
|
ora $variable+1
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
"&" -> {
|
"&" -> {
|
||||||
@ -752,8 +751,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
and $variable+1
|
and $variable+1
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
"^" -> {
|
"^" -> {
|
||||||
@ -763,8 +761,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
eor $variable+1
|
eor $variable+1
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else -> return false
|
else -> return false
|
||||||
@ -856,8 +853,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
ora #>$number
|
ora #>$number
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
"&" -> {
|
"&" -> {
|
||||||
@ -867,8 +863,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
and #>$number
|
and #>$number
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
"^" -> {
|
"^" -> {
|
||||||
@ -878,8 +873,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
|||||||
txa
|
txa
|
||||||
eor #>$number
|
eor #>$number
|
||||||
tax
|
tax
|
||||||
tya
|
tya""")
|
||||||
""")
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
else -> return false
|
else -> return false
|
||||||
@ -1856,8 +1850,7 @@ $shortcutLabel:""")
|
|||||||
ldy #>$value
|
ldy #>$value
|
||||||
jsr prog8_math.divmod_w_asm
|
jsr prog8_math.divmod_w_asm
|
||||||
sta $lsb
|
sta $lsb
|
||||||
sty $msb
|
sty $msb""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -1869,8 +1862,7 @@ $shortcutLabel:""")
|
|||||||
ldy #>$value
|
ldy #>$value
|
||||||
jsr prog8_math.divmod_uw_asm
|
jsr prog8_math.divmod_uw_asm
|
||||||
sta $lsb
|
sta $lsb
|
||||||
sty $msb
|
sty $msb""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1890,8 +1882,7 @@ $shortcutLabel:""")
|
|||||||
lda P8ZP_SCRATCH_W2
|
lda P8ZP_SCRATCH_W2
|
||||||
ldy P8ZP_SCRATCH_W2+1
|
ldy P8ZP_SCRATCH_W2+1
|
||||||
sta $lsb
|
sta $lsb
|
||||||
sty $msb
|
sty $msb""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"<<" -> {
|
"<<" -> {
|
||||||
when {
|
when {
|
||||||
@ -1927,8 +1918,7 @@ $shortcutLabel:""")
|
|||||||
- asl $lsb
|
- asl $lsb
|
||||||
rol $msb
|
rol $msb
|
||||||
dey
|
dey
|
||||||
bne -
|
bne -""")
|
||||||
""")
|
|
||||||
else -> repeat(value) { asmgen.out(" asl $lsb | rol $msb") }
|
else -> repeat(value) { asmgen.out(" asl $lsb | rol $msb") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2352,8 +2342,7 @@ $shortcutLabel:""")
|
|||||||
ldy #0
|
ldy #0
|
||||||
jsr prog8_math.divmod_uw_asm
|
jsr prog8_math.divmod_uw_asm
|
||||||
sta $name
|
sta $name
|
||||||
sty $name+1
|
sty $name+1""")
|
||||||
""")
|
|
||||||
} else {
|
} else {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda $name
|
lda $name
|
||||||
@ -2364,8 +2353,7 @@ $shortcutLabel:""")
|
|||||||
ldy #0
|
ldy #0
|
||||||
jsr prog8_math.divmod_w_asm
|
jsr prog8_math.divmod_w_asm
|
||||||
sta $name
|
sta $name
|
||||||
sty $name+1
|
sty $name+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"%" -> {
|
"%" -> {
|
||||||
@ -2382,8 +2370,7 @@ $shortcutLabel:""")
|
|||||||
lda P8ZP_SCRATCH_W2
|
lda P8ZP_SCRATCH_W2
|
||||||
sta $name
|
sta $name
|
||||||
lda P8ZP_SCRATCH_W2+1
|
lda P8ZP_SCRATCH_W2+1
|
||||||
sta $name+1
|
sta $name+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"<<" -> {
|
"<<" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -2532,8 +2519,7 @@ $shortcutLabel:""")
|
|||||||
lda P8ZP_SCRATCH_W2
|
lda P8ZP_SCRATCH_W2
|
||||||
sta $name
|
sta $name
|
||||||
lda P8ZP_SCRATCH_W2+1
|
lda P8ZP_SCRATCH_W2+1
|
||||||
sta $name+1
|
sta $name+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"<<", ">>" -> {
|
"<<", ">>" -> {
|
||||||
throw AssemblyError("shift by a word variable not supported, max is a byte")
|
throw AssemblyError("shift by a word variable not supported, max is a byte")
|
||||||
@ -2682,8 +2668,7 @@ $shortcutLabel:""")
|
|||||||
stx cx16.r0+1
|
stx cx16.r0+1
|
||||||
jsr verafx.muls
|
jsr verafx.muls
|
||||||
sta $name
|
sta $name
|
||||||
sty $name+1
|
sty $name+1""")
|
||||||
""")
|
|
||||||
else
|
else
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
sta prog8_math.multiply_words.multiplier
|
sta prog8_math.multiply_words.multiplier
|
||||||
@ -2692,8 +2677,7 @@ $shortcutLabel:""")
|
|||||||
ldy $name+1
|
ldy $name+1
|
||||||
jsr prog8_math.multiply_words
|
jsr prog8_math.multiply_words
|
||||||
sta $name
|
sta $name
|
||||||
sty $name+1
|
sty $name+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun divideVarByWordInAY() {
|
fun divideVarByWordInAY() {
|
||||||
@ -2725,8 +2709,7 @@ $shortcutLabel:""")
|
|||||||
lda P8ZP_SCRATCH_W2
|
lda P8ZP_SCRATCH_W2
|
||||||
ldy P8ZP_SCRATCH_W2+1
|
ldy P8ZP_SCRATCH_W2+1
|
||||||
sta $name
|
sta $name
|
||||||
sty $name+1
|
sty $name+1""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
val valueDt = value.type
|
val valueDt = value.type
|
||||||
when {
|
when {
|
||||||
@ -3003,29 +2986,25 @@ $shortcutLabel:""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FADD
|
jsr floats.FADD""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"-" -> {
|
"-" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FSUB
|
jsr floats.FSUB""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"*" -> {
|
"*" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FMULT
|
jsr floats.FMULT""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"/" -> {
|
"/" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FDIV
|
jsr floats.FDIV""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
||||||
"==" -> TODO("float-value-to-var comparison ==")
|
"==" -> TODO("float-value-to-var comparison ==")
|
||||||
@ -3037,8 +3016,7 @@ $shortcutLabel:""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
ldx #<$name
|
ldx #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVMF
|
jsr floats.MOVMF""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun inplacemodificationFloatWithVariable(name: String, operator: String, otherName: String) {
|
private fun inplacemodificationFloatWithVariable(name: String, operator: String, otherName: String) {
|
||||||
@ -3050,8 +3028,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$otherName
|
lda #<$otherName
|
||||||
ldy #>$otherName
|
ldy #>$otherName
|
||||||
jsr floats.FADD
|
jsr floats.FADD""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"-" -> {
|
"-" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -3060,8 +3037,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FSUB
|
jsr floats.FSUB""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"*" -> {
|
"*" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -3070,8 +3046,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$otherName
|
lda #<$otherName
|
||||||
ldy #>$otherName
|
ldy #>$otherName
|
||||||
jsr floats.FMULT
|
jsr floats.FMULT""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"/" -> {
|
"/" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -3080,8 +3055,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FDIV
|
jsr floats.FDIV""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
||||||
"==" -> {
|
"==" -> {
|
||||||
@ -3151,8 +3125,7 @@ $shortcutLabel:""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
ldx #<$name
|
ldx #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVMF
|
jsr floats.MOVMF""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun inplacemodificationFloatWithLiteralval(name: String, operator: String, value: Double) {
|
private fun inplacemodificationFloatWithLiteralval(name: String, operator: String, value: Double) {
|
||||||
@ -3170,16 +3143,14 @@ $shortcutLabel:""")
|
|||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
jsr floats.FADDH
|
jsr floats.FADDH""")
|
||||||
""")
|
|
||||||
else -> asmgen.out("""
|
else -> asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.FADD
|
jsr floats.FADD""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"-" -> {
|
"-" -> {
|
||||||
@ -3195,8 +3166,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FSUB
|
jsr floats.FSUB""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"*" -> {
|
"*" -> {
|
||||||
// assume that code optimization is already done on the AST level for special cases such as 0, 1, 2...
|
// assume that code optimization is already done on the AST level for special cases such as 0, 1, 2...
|
||||||
@ -3205,8 +3175,7 @@ $shortcutLabel:""")
|
|||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
jsr floats.MUL10
|
jsr floats.MUL10""")
|
||||||
""")
|
|
||||||
} else {
|
} else {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
lda #<$name
|
lda #<$name
|
||||||
@ -3214,8 +3183,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$constValueName
|
lda #<$constValueName
|
||||||
ldy #>$constValueName
|
ldy #>$constValueName
|
||||||
jsr floats.FMULT
|
jsr floats.FMULT""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"/" -> {
|
"/" -> {
|
||||||
@ -3227,8 +3195,7 @@ $shortcutLabel:""")
|
|||||||
jsr floats.MOVFM
|
jsr floats.MOVFM
|
||||||
lda #<$name
|
lda #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.FDIV
|
jsr floats.FDIV""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
"==" -> {
|
"==" -> {
|
||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
@ -3297,7 +3264,6 @@ $shortcutLabel:""")
|
|||||||
asmgen.out("""
|
asmgen.out("""
|
||||||
ldx #<$name
|
ldx #<$name
|
||||||
ldy #>$name
|
ldy #>$name
|
||||||
jsr floats.MOVMF
|
jsr floats.MOVMF""")
|
||||||
""")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,10 +10,6 @@ TODO
|
|||||||
Future Things and Ideas
|
Future Things and Ideas
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- allow when stringvar. Usecase: if sv=="aa" else if sv=="bb" else if sv=="cc" -> needs much code, when(stringvar) would avoid reloading both strings for every case (rockrunner bdcff.p8)
|
|
||||||
- this generates empty lines in the resulting asm, why?:
|
|
||||||
cx16.r0L = cx16.r1L
|
|
||||||
cx16.r0L += cx16.r2L
|
|
||||||
- Kotlin: can we use inline value classes in certain spots?
|
- Kotlin: can we use inline value classes in certain spots?
|
||||||
- Improve the SublimeText syntax file for prog8, you can also install this for 'bat': https://github.com/sharkdp/bat?tab=readme-ov-file#adding-new-syntaxes--language-definitions
|
- Improve the SublimeText syntax file for prog8, you can also install this for 'bat': https://github.com/sharkdp/bat?tab=readme-ov-file#adding-new-syntaxes--language-definitions
|
||||||
- Compiling Libraries: improve ability to create library files in prog8; for instance there's still stuff injected into the start of the start() routine AND there is separate setup logic going on before calling it.
|
- Compiling Libraries: improve ability to create library files in prog8; for instance there's still stuff injected into the start of the start() routine AND there is separate setup logic going on before calling it.
|
||||||
|
@ -1,20 +1,10 @@
|
|||||||
%import textio
|
|
||||||
%option no_sysinit
|
%option no_sysinit
|
||||||
%zeropage basicsafe
|
%zeropage basicsafe
|
||||||
|
|
||||||
main {
|
main {
|
||||||
ubyte[4] attrs
|
|
||||||
ubyte[4] object
|
|
||||||
|
|
||||||
sub start() {
|
sub start() {
|
||||||
cx16.r0 = mkword(attrs[cx16.r2L], object[cx16.r2L])
|
cx16.r0L = cx16.r1L
|
||||||
cx16.r1 = mkword(attrs[cx16.r2L], 22)
|
cx16.r1=9999
|
||||||
cx16.r2 = mkword(22,attrs[cx16.r2L])
|
cx16.r2=9999
|
||||||
explode(1, attrs[2]+2)
|
|
||||||
explode(attrs[2]+2, 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
sub explode(ubyte a1, ubyte a2) -> uword {
|
|
||||||
return mkword(attrs[cx16.r2L], object[cx16.r2L])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package prog8.intermediate
|
package prog8.intermediate
|
||||||
|
|
||||||
import prog8.code.*
|
import prog8.code.*
|
||||||
import prog8.code.ast.PtConstant
|
|
||||||
import prog8.code.ast.PtVariable
|
|
||||||
import prog8.code.core.*
|
import prog8.code.core.*
|
||||||
import prog8.code.target.VMTarget
|
import prog8.code.target.VMTarget
|
||||||
import prog8.code.target.getCompilationTargetByName
|
import prog8.code.target.getCompilationTargetByName
|
||||||
@ -11,7 +9,6 @@ import java.nio.file.Path
|
|||||||
import javax.xml.stream.XMLEventReader
|
import javax.xml.stream.XMLEventReader
|
||||||
import javax.xml.stream.XMLInputFactory
|
import javax.xml.stream.XMLInputFactory
|
||||||
import javax.xml.stream.XMLStreamException
|
import javax.xml.stream.XMLStreamException
|
||||||
import javax.xml.stream.events.XMLEvent
|
|
||||||
import kotlin.io.path.Path
|
import kotlin.io.path.Path
|
||||||
import kotlin.io.path.inputStream
|
import kotlin.io.path.inputStream
|
||||||
|
|
||||||
|
@ -1995,8 +1995,6 @@ class VirtualMachine(irProgram: IRProgram) {
|
|||||||
}
|
}
|
||||||
IRDataType.WORD -> {
|
IRDataType.WORD -> {
|
||||||
val memvalue = memory.getUW(address).toInt()
|
val memvalue = memory.getUW(address).toInt()
|
||||||
val x1 = (memvalue shl operand)
|
|
||||||
val x2 = x1.toUShort()
|
|
||||||
memory.setUW(address, (memvalue shl operand).toUShort())
|
memory.setUW(address, (memvalue shl operand).toUShort())
|
||||||
}
|
}
|
||||||
IRDataType.FLOAT -> throw IllegalArgumentException("invalid float type for this instruction $i")
|
IRDataType.FLOAT -> throw IllegalArgumentException("invalid float type for this instruction $i")
|
||||||
@ -2390,28 +2388,6 @@ class VirtualMachine(irProgram: IRProgram) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSetOnConditionOperands(ins: IRInstruction): Pair<Int, Int> {
|
|
||||||
return when(ins.type) {
|
|
||||||
IRDataType.BYTE -> Pair(registers.getSB(ins.reg2!!).toInt(), registers.getSB(ins.reg3!!).toInt())
|
|
||||||
IRDataType.WORD -> Pair(registers.getSW(ins.reg2!!).toInt(), registers.getSW(ins.reg3!!).toInt())
|
|
||||||
IRDataType.FLOAT -> {
|
|
||||||
throw IllegalArgumentException("can't use float here")
|
|
||||||
}
|
|
||||||
null -> throw IllegalArgumentException("need type for branch instruction")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getSetOnConditionOperandsU(ins: IRInstruction): Pair<UInt, UInt> {
|
|
||||||
return when(ins.type) {
|
|
||||||
IRDataType.BYTE -> Pair(registers.getUB(ins.reg2!!).toUInt(), registers.getUB(ins.reg3!!).toUInt())
|
|
||||||
IRDataType.WORD -> Pair(registers.getUW(ins.reg2!!).toUInt(), registers.getUW(ins.reg3!!).toUInt())
|
|
||||||
IRDataType.FLOAT -> {
|
|
||||||
throw IllegalArgumentException("can't use float here")
|
|
||||||
}
|
|
||||||
null -> throw IllegalArgumentException("need type for branch instruction")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var window: GraphicsWindow? = null
|
private var window: GraphicsWindow? = null
|
||||||
|
|
||||||
fun gfx_enable(mode: UByte) {
|
fun gfx_enable(mode: UByte) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user