mirror of
https://github.com/irmen/prog8.git
synced 2025-02-13 18:31:04 +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)
|
||||
DataType(BaseDataType.ARRAY, actualElementDt)
|
||||
else
|
||||
throw NoSuchElementException("invalid element dt "+elementDt)
|
||||
throw NoSuchElementException("invalid element dt $elementDt")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -961,8 +961,7 @@ $repeatLabel""")
|
||||
bne +
|
||||
cpy #>${value.toHex()}
|
||||
beq $choiceLabel
|
||||
+
|
||||
""")
|
||||
+""")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1109,8 +1108,7 @@ $repeatLabel""")
|
||||
cmp #$80
|
||||
bcc +
|
||||
dey
|
||||
+
|
||||
""")
|
||||
+""")
|
||||
else -> throw AssemblyError("need byte type")
|
||||
}
|
||||
}
|
||||
@ -1124,8 +1122,7 @@ $repeatLabel""")
|
||||
cmp #$80
|
||||
bcc +
|
||||
dex
|
||||
+
|
||||
""")
|
||||
+""")
|
||||
else -> throw AssemblyError("need byte type")
|
||||
}
|
||||
}
|
||||
|
@ -1491,8 +1491,7 @@ internal class AssignmentAsmGen(
|
||||
assignExpressionToRegister(left, RegisterOrPair.AY, dt.isSigned)
|
||||
val castedSymname = asmgen.asmVariableName(castedValue)
|
||||
if (expr.operator == "+")
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
clc
|
||||
adc $castedSymname
|
||||
bcc +
|
||||
@ -1500,8 +1499,7 @@ internal class AssignmentAsmGen(
|
||||
+"""
|
||||
)
|
||||
else
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
sec
|
||||
sbc $castedSymname
|
||||
bcs +
|
||||
@ -2677,8 +2675,7 @@ $endLabel""")
|
||||
lda #<$sourceName
|
||||
ldy #>$sourceName
|
||||
sta ${target.asmVarname}
|
||||
sty ${target.asmVarname}+1
|
||||
""")
|
||||
sty ${target.asmVarname}+1""")
|
||||
}
|
||||
target.datatype.isString || target.datatype.isUnsignedByteArray || target.datatype.isByteArray -> {
|
||||
asmgen.out("""
|
||||
@ -2798,13 +2795,11 @@ $endLabel""")
|
||||
RegisterOrPair.AY -> asmgen.out(" ldy $sourceName+1 | lda $sourceName")
|
||||
RegisterOrPair.XY -> asmgen.out(" ldy $sourceName+1 | ldx $sourceName")
|
||||
in Cx16VirtualRegisters -> {
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
lda $sourceName
|
||||
sta cx16.${target.register.toString().lowercase()}
|
||||
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")
|
||||
}
|
||||
@ -2825,8 +2820,7 @@ $endLabel""")
|
||||
asmgen.out("""
|
||||
ldx #<${target.asmVarname}
|
||||
ldy #>${target.asmVarname}
|
||||
jsr floats.MOVMF
|
||||
""")
|
||||
jsr floats.MOVMF""")
|
||||
}
|
||||
TargetStorageKind.ARRAY -> {
|
||||
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
||||
@ -2924,8 +2918,7 @@ $endLabel""")
|
||||
TargetStorageKind.VARIABLE -> {
|
||||
asmgen.out("""
|
||||
lda $sourceName
|
||||
sta ${target.asmVarname}
|
||||
""")
|
||||
sta ${target.asmVarname}""")
|
||||
}
|
||||
TargetStorageKind.MEMORY -> {
|
||||
asmgen.out(" lda $sourceName")
|
||||
@ -2951,13 +2944,11 @@ $endLabel""")
|
||||
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldx $sourceName")
|
||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||
in Cx16VirtualRegisters -> {
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
lda $sourceName
|
||||
sta cx16.${target.register.toString().lowercase()}
|
||||
lda #0
|
||||
sta cx16.${target.register.toString().lowercase()}+1
|
||||
""")
|
||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||
}
|
||||
else -> throw AssemblyError("weird register")
|
||||
}
|
||||
@ -2975,8 +2966,7 @@ $endLabel""")
|
||||
ora #$7f
|
||||
bmi +
|
||||
lda #0
|
||||
+ sta ${wordtarget.asmVarname}+1
|
||||
""")
|
||||
+ sta ${wordtarget.asmVarname}+1""")
|
||||
}
|
||||
TargetStorageKind.ARRAY -> {
|
||||
if(wordtarget.array!!.splitWords) {
|
||||
@ -3759,8 +3749,7 @@ $endLabel""")
|
||||
stz ${target.asmVarname}+1
|
||||
stz ${target.asmVarname}+2
|
||||
stz ${target.asmVarname}+3
|
||||
stz ${target.asmVarname}+4
|
||||
""")
|
||||
stz ${target.asmVarname}+4""")
|
||||
else
|
||||
asmgen.out("""
|
||||
lda #0
|
||||
@ -3768,8 +3757,7 @@ $endLabel""")
|
||||
sta ${target.asmVarname}+1
|
||||
sta ${target.asmVarname}+2
|
||||
sta ${target.asmVarname}+3
|
||||
sta ${target.asmVarname}+4
|
||||
""")
|
||||
sta ${target.asmVarname}+4""")
|
||||
}
|
||||
TargetStorageKind.ARRAY -> {
|
||||
asmgen.assignExpressionToRegister(target.array!!.index, RegisterOrPair.A, false)
|
||||
@ -3815,8 +3803,7 @@ $endLabel""")
|
||||
sty P8ZP_SCRATCH_W2
|
||||
ldy #>${target.asmVarname}
|
||||
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.REGISTER -> {
|
||||
@ -3837,8 +3824,7 @@ $endLabel""")
|
||||
TargetStorageKind.VARIABLE -> {
|
||||
asmgen.out("""
|
||||
lda ${address.toHex()}
|
||||
sta ${target.asmVarname}
|
||||
""")
|
||||
sta ${target.asmVarname}""")
|
||||
}
|
||||
TargetStorageKind.MEMORY -> {
|
||||
asmgen.out(" lda ${address.toHex()}")
|
||||
@ -3857,13 +3843,11 @@ $endLabel""")
|
||||
RegisterOrPair.XY -> asmgen.out(" ldy #0 | ldy ${address.toHex()}")
|
||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||
in Cx16VirtualRegisters -> {
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
lda ${address.toHex()}
|
||||
sta cx16.${target.register.toString().lowercase()}
|
||||
lda #0
|
||||
sta cx16.${target.register.toString().lowercase()}+1
|
||||
""")
|
||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||
}
|
||||
else -> throw AssemblyError("weird register")
|
||||
}
|
||||
@ -3893,12 +3877,10 @@ $endLabel""")
|
||||
RegisterOrPair.XY -> asmgen.out(" tax | ldy #0")
|
||||
RegisterOrPair.FAC1, RegisterOrPair.FAC2 -> throw AssemblyError("expected typecasted byte to float")
|
||||
in Cx16VirtualRegisters -> {
|
||||
asmgen.out(
|
||||
"""
|
||||
asmgen.out("""
|
||||
sta cx16.${target.register.toString().lowercase()}
|
||||
lda #0
|
||||
sta cx16.${target.register.toString().lowercase()}+1
|
||||
""")
|
||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||
}
|
||||
else -> throw AssemblyError("weird register")
|
||||
}
|
||||
@ -4232,8 +4214,7 @@ $endLabel""")
|
||||
asmgen.out("""
|
||||
lda ${target.asmVarname}+1
|
||||
eor #$80
|
||||
sta ${target.asmVarname}+1
|
||||
""")
|
||||
sta ${target.asmVarname}+1""")
|
||||
}
|
||||
TargetStorageKind.ARRAY -> assignPrefixedExpressionToArrayElt(makePrefixedExprFromArrayExprAssign("-", assign), scope)
|
||||
else -> throw AssemblyError("weird target for in-place float negation")
|
||||
|
@ -741,8 +741,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
ora $variable+1
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
"&" -> {
|
||||
@ -752,8 +751,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
and $variable+1
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
"^" -> {
|
||||
@ -763,8 +761,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
eor $variable+1
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
else -> return false
|
||||
@ -856,8 +853,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
ora #>$number
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
"&" -> {
|
||||
@ -867,8 +863,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
and #>$number
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
"^" -> {
|
||||
@ -878,8 +873,7 @@ internal class AugmentableAssignmentAsmGen(private val program: PtProgram,
|
||||
txa
|
||||
eor #>$number
|
||||
tax
|
||||
tya
|
||||
""")
|
||||
tya""")
|
||||
return true
|
||||
}
|
||||
else -> return false
|
||||
@ -1856,8 +1850,7 @@ $shortcutLabel:""")
|
||||
ldy #>$value
|
||||
jsr prog8_math.divmod_w_asm
|
||||
sta $lsb
|
||||
sty $msb
|
||||
""")
|
||||
sty $msb""")
|
||||
}
|
||||
else {
|
||||
asmgen.out("""
|
||||
@ -1869,8 +1862,7 @@ $shortcutLabel:""")
|
||||
ldy #>$value
|
||||
jsr prog8_math.divmod_uw_asm
|
||||
sta $lsb
|
||||
sty $msb
|
||||
""")
|
||||
sty $msb""")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1890,8 +1882,7 @@ $shortcutLabel:""")
|
||||
lda P8ZP_SCRATCH_W2
|
||||
ldy P8ZP_SCRATCH_W2+1
|
||||
sta $lsb
|
||||
sty $msb
|
||||
""")
|
||||
sty $msb""")
|
||||
}
|
||||
"<<" -> {
|
||||
when {
|
||||
@ -1927,8 +1918,7 @@ $shortcutLabel:""")
|
||||
- asl $lsb
|
||||
rol $msb
|
||||
dey
|
||||
bne -
|
||||
""")
|
||||
bne -""")
|
||||
else -> repeat(value) { asmgen.out(" asl $lsb | rol $msb") }
|
||||
}
|
||||
}
|
||||
@ -2352,8 +2342,7 @@ $shortcutLabel:""")
|
||||
ldy #0
|
||||
jsr prog8_math.divmod_uw_asm
|
||||
sta $name
|
||||
sty $name+1
|
||||
""")
|
||||
sty $name+1""")
|
||||
} else {
|
||||
asmgen.out("""
|
||||
lda $name
|
||||
@ -2364,8 +2353,7 @@ $shortcutLabel:""")
|
||||
ldy #0
|
||||
jsr prog8_math.divmod_w_asm
|
||||
sta $name
|
||||
sty $name+1
|
||||
""")
|
||||
sty $name+1""")
|
||||
}
|
||||
}
|
||||
"%" -> {
|
||||
@ -2382,8 +2370,7 @@ $shortcutLabel:""")
|
||||
lda P8ZP_SCRATCH_W2
|
||||
sta $name
|
||||
lda P8ZP_SCRATCH_W2+1
|
||||
sta $name+1
|
||||
""")
|
||||
sta $name+1""")
|
||||
}
|
||||
"<<" -> {
|
||||
asmgen.out("""
|
||||
@ -2532,8 +2519,7 @@ $shortcutLabel:""")
|
||||
lda P8ZP_SCRATCH_W2
|
||||
sta $name
|
||||
lda P8ZP_SCRATCH_W2+1
|
||||
sta $name+1
|
||||
""")
|
||||
sta $name+1""")
|
||||
}
|
||||
"<<", ">>" -> {
|
||||
throw AssemblyError("shift by a word variable not supported, max is a byte")
|
||||
@ -2682,8 +2668,7 @@ $shortcutLabel:""")
|
||||
stx cx16.r0+1
|
||||
jsr verafx.muls
|
||||
sta $name
|
||||
sty $name+1
|
||||
""")
|
||||
sty $name+1""")
|
||||
else
|
||||
asmgen.out("""
|
||||
sta prog8_math.multiply_words.multiplier
|
||||
@ -2692,8 +2677,7 @@ $shortcutLabel:""")
|
||||
ldy $name+1
|
||||
jsr prog8_math.multiply_words
|
||||
sta $name
|
||||
sty $name+1
|
||||
""")
|
||||
sty $name+1""")
|
||||
}
|
||||
|
||||
fun divideVarByWordInAY() {
|
||||
@ -2725,8 +2709,7 @@ $shortcutLabel:""")
|
||||
lda P8ZP_SCRATCH_W2
|
||||
ldy P8ZP_SCRATCH_W2+1
|
||||
sta $name
|
||||
sty $name+1
|
||||
""")
|
||||
sty $name+1""")
|
||||
}
|
||||
val valueDt = value.type
|
||||
when {
|
||||
@ -3003,29 +2986,25 @@ $shortcutLabel:""")
|
||||
asmgen.out("""
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FADD
|
||||
""")
|
||||
jsr floats.FADD""")
|
||||
}
|
||||
"-" -> {
|
||||
asmgen.out("""
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FSUB
|
||||
""")
|
||||
jsr floats.FSUB""")
|
||||
}
|
||||
"*" -> {
|
||||
asmgen.out("""
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FMULT
|
||||
""")
|
||||
jsr floats.FMULT""")
|
||||
}
|
||||
"/" -> {
|
||||
asmgen.out("""
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FDIV
|
||||
""")
|
||||
jsr floats.FDIV""")
|
||||
}
|
||||
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
||||
"==" -> TODO("float-value-to-var comparison ==")
|
||||
@ -3037,8 +3016,7 @@ $shortcutLabel:""")
|
||||
asmgen.out("""
|
||||
ldx #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVMF
|
||||
""")
|
||||
jsr floats.MOVMF""")
|
||||
}
|
||||
|
||||
private fun inplacemodificationFloatWithVariable(name: String, operator: String, otherName: String) {
|
||||
@ -3050,8 +3028,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$otherName
|
||||
ldy #>$otherName
|
||||
jsr floats.FADD
|
||||
""")
|
||||
jsr floats.FADD""")
|
||||
}
|
||||
"-" -> {
|
||||
asmgen.out("""
|
||||
@ -3060,8 +3037,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FSUB
|
||||
""")
|
||||
jsr floats.FSUB""")
|
||||
}
|
||||
"*" -> {
|
||||
asmgen.out("""
|
||||
@ -3070,8 +3046,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$otherName
|
||||
ldy #>$otherName
|
||||
jsr floats.FMULT
|
||||
""")
|
||||
jsr floats.FMULT""")
|
||||
}
|
||||
"/" -> {
|
||||
asmgen.out("""
|
||||
@ -3080,8 +3055,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FDIV
|
||||
""")
|
||||
jsr floats.FDIV""")
|
||||
}
|
||||
// pretty uncommon, who's going to assign a comparison boolean expression to a float var:
|
||||
"==" -> {
|
||||
@ -3151,8 +3125,7 @@ $shortcutLabel:""")
|
||||
asmgen.out("""
|
||||
ldx #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVMF
|
||||
""")
|
||||
jsr floats.MOVMF""")
|
||||
}
|
||||
|
||||
private fun inplacemodificationFloatWithLiteralval(name: String, operator: String, value: Double) {
|
||||
@ -3170,16 +3143,14 @@ $shortcutLabel:""")
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVFM
|
||||
jsr floats.FADDH
|
||||
""")
|
||||
jsr floats.FADDH""")
|
||||
else -> asmgen.out("""
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVFM
|
||||
lda #<$constValueName
|
||||
ldy #>$constValueName
|
||||
jsr floats.FADD
|
||||
""")
|
||||
jsr floats.FADD""")
|
||||
}
|
||||
}
|
||||
"-" -> {
|
||||
@ -3195,8 +3166,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$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...
|
||||
@ -3205,8 +3175,7 @@ $shortcutLabel:""")
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVFM
|
||||
jsr floats.MUL10
|
||||
""")
|
||||
jsr floats.MUL10""")
|
||||
} else {
|
||||
asmgen.out("""
|
||||
lda #<$name
|
||||
@ -3214,8 +3183,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$constValueName
|
||||
ldy #>$constValueName
|
||||
jsr floats.FMULT
|
||||
""")
|
||||
jsr floats.FMULT""")
|
||||
}
|
||||
}
|
||||
"/" -> {
|
||||
@ -3227,8 +3195,7 @@ $shortcutLabel:""")
|
||||
jsr floats.MOVFM
|
||||
lda #<$name
|
||||
ldy #>$name
|
||||
jsr floats.FDIV
|
||||
""")
|
||||
jsr floats.FDIV""")
|
||||
}
|
||||
"==" -> {
|
||||
asmgen.out("""
|
||||
@ -3297,7 +3264,6 @@ $shortcutLabel:""")
|
||||
asmgen.out("""
|
||||
ldx #<$name
|
||||
ldy #>$name
|
||||
jsr floats.MOVMF
|
||||
""")
|
||||
jsr floats.MOVMF""")
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,6 @@ TODO
|
||||
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?
|
||||
- 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.
|
||||
|
@ -1,20 +1,10 @@
|
||||
%import textio
|
||||
%option no_sysinit
|
||||
%zeropage basicsafe
|
||||
|
||||
main {
|
||||
ubyte[4] attrs
|
||||
ubyte[4] object
|
||||
|
||||
sub start() {
|
||||
cx16.r0 = mkword(attrs[cx16.r2L], object[cx16.r2L])
|
||||
cx16.r1 = mkword(attrs[cx16.r2L], 22)
|
||||
cx16.r2 = mkword(22,attrs[cx16.r2L])
|
||||
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])
|
||||
cx16.r0L = cx16.r1L
|
||||
cx16.r1=9999
|
||||
cx16.r2=9999
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package prog8.intermediate
|
||||
|
||||
import prog8.code.*
|
||||
import prog8.code.ast.PtConstant
|
||||
import prog8.code.ast.PtVariable
|
||||
import prog8.code.core.*
|
||||
import prog8.code.target.VMTarget
|
||||
import prog8.code.target.getCompilationTargetByName
|
||||
@ -11,7 +9,6 @@ import java.nio.file.Path
|
||||
import javax.xml.stream.XMLEventReader
|
||||
import javax.xml.stream.XMLInputFactory
|
||||
import javax.xml.stream.XMLStreamException
|
||||
import javax.xml.stream.events.XMLEvent
|
||||
import kotlin.io.path.Path
|
||||
import kotlin.io.path.inputStream
|
||||
|
||||
|
@ -1995,8 +1995,6 @@ class VirtualMachine(irProgram: IRProgram) {
|
||||
}
|
||||
IRDataType.WORD -> {
|
||||
val memvalue = memory.getUW(address).toInt()
|
||||
val x1 = (memvalue shl operand)
|
||||
val x2 = x1.toUShort()
|
||||
memory.setUW(address, (memvalue shl operand).toUShort())
|
||||
}
|
||||
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
|
||||
|
||||
fun gfx_enable(mode: UByte) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user