From f22b62e57ff1e6baaea0961605579a7e804cfa2f Mon Sep 17 00:00:00 2001
From: Karol Stasiak <karol.m.stasiak@gmail.com>
Date: Sun, 23 Jun 2019 22:31:46 +0200
Subject: [PATCH] Z80: Fix stack variable inlining

---
 .../assembly/z80/opt/ByteVariableToRegisterOptimization.scala | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/main/scala/millfork/assembly/z80/opt/ByteVariableToRegisterOptimization.scala b/src/main/scala/millfork/assembly/z80/opt/ByteVariableToRegisterOptimization.scala
index c0659c7c..7dbf8bce 100644
--- a/src/main/scala/millfork/assembly/z80/opt/ByteVariableToRegisterOptimization.scala
+++ b/src/main/scala/millfork/assembly/z80/opt/ByteVariableToRegisterOptimization.scala
@@ -337,6 +337,8 @@ object ByteVariableToRegisterOptimization extends AssemblyOptimization[ZLine] {
       case ZLine(LD, TwoRegistersOffset(reg, MEM_IX_D, off), _, _, s) :: xs if "IX+" + off == vname =>
         if (reg == target) inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
         else ZLine.ld8(reg, target).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
+      case ZLine(LD, TwoRegistersOffset(MEM_IX_D, IMM_8, off), param, _, s) :: xs if "IX+" + off == vname =>
+        ZLine.ldImm8(target, param).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
       case ZLine(LD, TwoRegistersOffset(MEM_IX_D, reg, off), _, _, s) :: xs if "IX+" + off == vname =>
         if (reg == target) inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
         else ZLine.ld8(target, reg).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
@@ -346,6 +348,8 @@ object ByteVariableToRegisterOptimization extends AssemblyOptimization[ZLine] {
       case ZLine(LD, TwoRegistersOffset(reg, MEM_IY_D, off), _, _, s) :: xs if "IY+" + off == vname =>
         if (reg == target) inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
         else ZLine.ld8(reg, target).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
+      case ZLine(LD, TwoRegistersOffset(MEM_IY_D, IMM_8, off), param, _, s) :: xs if "IY+" + off == vname =>
+        ZLine.ldImm8(target, param).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
       case ZLine(LD, TwoRegistersOffset(MEM_IY_D, reg, off), _, _, s) :: xs if "IY+" + off == vname =>
         if (reg == target) inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)
         else ZLine.ld8(target, reg).pos(s) :: inlineVars(vname, target, addressInHl, addressInBc, addressInDe, xs)