mirror of
https://github.com/irmen/prog8.git
synced 2025-11-23 14:17:51 +00:00
added missing byte to long type assignment
This commit is contained in:
@@ -121,7 +121,7 @@ internal class AsmAssignTarget(val kind: TargetStorageKind,
|
|||||||
in combinedLongRegisters -> {
|
in combinedLongRegisters -> {
|
||||||
val dt = if(signed) DataType.LONG
|
val dt = if(signed) DataType.LONG
|
||||||
else
|
else
|
||||||
TODO("unsigned long")
|
TODO("unsigned long $pos")
|
||||||
AsmAssignTarget(TargetStorageKind.REGISTER, asmgen, dt, scope, pos, register = registers)
|
AsmAssignTarget(TargetStorageKind.REGISTER, asmgen, dt, scope, pos, register = registers)
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("weird register $registers")
|
else -> throw AssemblyError("weird register $registers")
|
||||||
|
|||||||
@@ -2533,6 +2533,7 @@ $endLabel""")
|
|||||||
assignRegisterByte(target, CpuRegister.A, valueDt.isSigned, true)
|
assignRegisterByte(target, CpuRegister.A, valueDt.isSigned, true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${value.position}")
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
} else if(valueDt.isUnsignedWord) {
|
} else if(valueDt.isUnsignedWord) {
|
||||||
@@ -2554,6 +2555,7 @@ $endLabel""")
|
|||||||
// 'cast' uword into a 16 bits register, just assign it
|
// 'cast' uword into a 16 bits register, just assign it
|
||||||
return assignExpressionToRegister(value, target.register!!, targetDt.isSigned)
|
return assignExpressionToRegister(value, target.register!!, targetDt.isSigned)
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign wprd to long reg ${value.position}")
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3197,7 +3199,7 @@ $endLabel""")
|
|||||||
sta cx16.${target.register.toString().lowercase()}
|
sta cx16.${target.register.toString().lowercase()}
|
||||||
sty cx16.${target.register.toString().lowercase()}+1""")
|
sty cx16.${target.register.toString().lowercase()}+1""")
|
||||||
}
|
}
|
||||||
else -> throw AssemblyError("can't load address in a single 8-bit register")
|
else -> throw AssemblyError("can only load address into 16 bit register")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TargetStorageKind.POINTER -> pointergen.assignAddressOf(PtrTarget(target), sourceName)
|
TargetStorageKind.POINTER -> pointergen.assignAddressOf(PtrTarget(target), sourceName)
|
||||||
@@ -3436,6 +3438,7 @@ $endLabel""")
|
|||||||
else
|
else
|
||||||
asmgen.out(" lda #0 | sta cx16.${target.register.toString().lowercase()}+1")
|
asmgen.out(" lda #0 | sta cx16.${target.register.toString().lowercase()}+1")
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
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")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -3450,6 +3453,7 @@ $endLabel""")
|
|||||||
lda $varName+1
|
lda $varName+1
|
||||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3627,6 +3631,7 @@ $endLabel""")
|
|||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3958,6 +3963,7 @@ $endLabel""")
|
|||||||
if(extendWord)
|
if(extendWord)
|
||||||
extendToMSBofVirtualReg(CpuRegister.A, reg, signed)
|
extendToMSBofVirtualReg(CpuRegister.A, reg, signed)
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
CpuRegister.X -> when(target.register!!) {
|
CpuRegister.X -> when(target.register!!) {
|
||||||
@@ -4009,6 +4015,7 @@ $endLabel""")
|
|||||||
if(extendWord)
|
if(extendWord)
|
||||||
extendToMSBofVirtualReg(CpuRegister.X, reg, signed)
|
extendToMSBofVirtualReg(CpuRegister.X, reg, signed)
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
CpuRegister.Y -> when(target.register!!) {
|
CpuRegister.Y -> when(target.register!!) {
|
||||||
@@ -4062,6 +4069,7 @@ $endLabel""")
|
|||||||
if(extendWord)
|
if(extendWord)
|
||||||
extendToMSBofVirtualReg(CpuRegister.Y, reg, signed)
|
extendToMSBofVirtualReg(CpuRegister.Y, reg, signed)
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign byte to long reg ${target.position}")
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4726,6 +4734,7 @@ $endLabel""")
|
|||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> TODO("assign memory byte into long ${target.position}")
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
TargetStorageKind.POINTER -> pointergen.assignByteMemory(PtrTarget(target), address)
|
TargetStorageKind.POINTER -> pointergen.assignByteMemory(PtrTarget(target), address)
|
||||||
@@ -4761,6 +4770,15 @@ $endLabel""")
|
|||||||
lda #0
|
lda #0
|
||||||
sta cx16.${target.register.toString().lowercase()}+1""")
|
sta cx16.${target.register.toString().lowercase()}+1""")
|
||||||
}
|
}
|
||||||
|
in combinedLongRegisters -> {
|
||||||
|
val startreg = target.register.startregname()
|
||||||
|
asmgen.out("""
|
||||||
|
sta cx16.$startreg
|
||||||
|
lda #0
|
||||||
|
sta cx16.$startreg+1
|
||||||
|
sta cx16.$startreg+2
|
||||||
|
sta cx16.$startreg+3""")
|
||||||
|
}
|
||||||
else -> throw AssemblyError("weird register")
|
else -> throw AssemblyError("weird register")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4975,6 +4993,7 @@ $endLabel""")
|
|||||||
RegisterOrPair.AY -> asmgen.out(" pha | tya | eor #255 | tay | pla | eor #255")
|
RegisterOrPair.AY -> asmgen.out(" pha | tya | eor #255 | tay | pla | eor #255")
|
||||||
RegisterOrPair.XY -> asmgen.out(" txa | eor #255 | tax | tya | eor #255 | tay")
|
RegisterOrPair.XY -> asmgen.out(" txa | eor #255 | tax | tya | eor #255 | tay")
|
||||||
in Cx16VirtualRegisters -> throw AssemblyError("cx16 virtual regs should be variables, not real registers")
|
in Cx16VirtualRegisters -> throw AssemblyError("cx16 virtual regs should be variables, not real registers")
|
||||||
|
in combinedLongRegisters -> TODO("in place negate long invert ${target.position}")
|
||||||
else -> throw AssemblyError("invalid reg dt for word invert")
|
else -> throw AssemblyError("invalid reg dt for word invert")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5103,6 +5122,7 @@ $endLabel""")
|
|||||||
tay""")
|
tay""")
|
||||||
}
|
}
|
||||||
in Cx16VirtualRegisters -> throw AssemblyError("cx16 virtual regs should be variables, not real registers")
|
in Cx16VirtualRegisters -> throw AssemblyError("cx16 virtual regs should be variables, not real registers")
|
||||||
|
in combinedLongRegisters -> TODO("in place negate long reg ${target.position}")
|
||||||
else -> throw AssemblyError("invalid reg dt for word neg")
|
else -> throw AssemblyError("invalid reg dt for word neg")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ main {
|
|||||||
; txt.spc()
|
; txt.spc()
|
||||||
; txt.print_w(lsw(lv1 >> 8) as word)
|
; txt.print_w(lsw(lv1 >> 8) as word)
|
||||||
|
|
||||||
|
|
||||||
txt.nl()
|
txt.nl()
|
||||||
txt.nl()
|
txt.nl()
|
||||||
lv1 = -9876543
|
lv1 = -9876543
|
||||||
|
|||||||
Reference in New Issue
Block a user