get rid of some empty lines in the generated asm

This commit is contained in:
Irmen de Jong 2025-01-05 19:28:39 +01:00
parent 3b5cda85ff
commit f0e8ff0326
8 changed files with 60 additions and 157 deletions

View File

@ -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")
} }
} }
} }

View File

@ -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")
} }
} }

View File

@ -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")

View File

@ -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""")
""")
} }
} }

View File

@ -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.

View File

@ -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])
} }
} }

View File

@ -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

View File

@ -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) {