浏览代码

+ handle IX and IY-based references in tcgz80.normalize_ref

git-svn-id: branches/z80@44987 -
nickysn 5 年之前
父节点
当前提交
9ad3de966f
共有 1 个文件被更改,包括 11 次插入1 次删除
  1. 11 1
      compiler/z80/cgcpu.pas

+ 11 - 1
compiler/z80/cgcpu.pas

@@ -1262,7 +1262,17 @@ unit cgcpu;
               end
             else
               list.concat(taicpu.op_reg_const(A_LD,NR_HL,ref.offset));
-            if ref.base<>NR_NO then
+            if (ref.base=NR_IX) or (ref.base=NR_IY) then
+              begin
+                getcpuregister(list,NR_D);
+                getcpuregister(list,NR_E);
+                list.concat(taicpu.op_reg(A_PUSH,ref.base));
+                list.concat(taicpu.op_reg(A_POP,NR_DE));
+                list.concat(taicpu.op_reg_reg(A_ADD,NR_HL,NR_DE));
+                ungetcpuregister(list,NR_E);
+                ungetcpuregister(list,NR_D);
+              end
+            else if ref.base<>NR_NO then
               begin
                 getcpuregister(list,NR_A);
                 emit_mov(list,NR_A,NR_L);