mirror of
https://github.com/KarolS/millfork.git
synced 2024-09-30 00:56:56 +00:00
6502: Fix expressions like p[i] <<= 1
This commit is contained in:
parent
767f0da703
commit
d64d0b5f96
@ -319,8 +319,13 @@ object BuiltIns {
|
|||||||
case Some(NumericConstant(0, _)) =>
|
case Some(NumericConstant(0, _)) =>
|
||||||
MosExpressionCompiler.compile(ctx, lhs, None, NoBranching)
|
MosExpressionCompiler.compile(ctx, lhs, None, NoBranching)
|
||||||
case Some(NumericConstant(v, _)) if v > 0 =>
|
case Some(NumericConstant(v, _)) if v > 0 =>
|
||||||
val result = simpleOperation(opcode, ctx, lhs, IndexChoice.RequireX, preserveA = true, commutative = false)
|
val result = simpleOperation(opcode, ctx, lhs, IndexChoice.PreferX, preserveA = true, commutative = false)
|
||||||
result ++ List.fill(v.toInt - 1)(result.last)
|
result.last.addrMode match {
|
||||||
|
case AbsoluteX | Absolute | ZeroPage | ZeroPageX | LongAbsoluteX | LongAbsolute =>
|
||||||
|
result ++ List.fill(v.toInt - 1)(result.last)
|
||||||
|
case IndexedY | AbsoluteY | IndexedZ | LongIndexedZ | IndexedSY =>
|
||||||
|
result.init ++ List(result.last.copy(opcode = LDA)) ++ List.fill(v.toInt)(AssemblyLine.implied(opcode)) ++ List(result.last.copy(opcode = STA))
|
||||||
|
}
|
||||||
case _ =>
|
case _ =>
|
||||||
compileShiftOps(opcode, ctx, lhs, rhs) ++ MosExpressionCompiler.compileByteStorage(ctx, MosRegister.A, lhs)
|
compileShiftOps(opcode, ctx, lhs, rhs) ++ MosExpressionCompiler.compileByteStorage(ctx, MosRegister.A, lhs)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user