浏览代码

* don't destroy r13 when copying data

git-svn-id: trunk@5470 -
florian 18 年之前
父节点
当前提交
b77a5016ca
共有 1 个文件被更改,包括 9 次插入0 次删除
  1. 9 0
      compiler/arm/rgcpu.pas

+ 9 - 0
compiler/arm/rgcpu.pas

@@ -162,6 +162,15 @@ unit rgcpu;
                   add_edge(getsupreg(taicpu(p).oper[1]^.reg),getsupreg(taicpu(p).oper[2]^.reg));
                   add_edge(getsupreg(taicpu(p).oper[1]^.reg),getsupreg(taicpu(p).oper[2]^.reg));
                   add_edge(getsupreg(taicpu(p).oper[0]^.reg),getsupreg(taicpu(p).oper[2]^.reg));
                   add_edge(getsupreg(taicpu(p).oper[0]^.reg),getsupreg(taicpu(p).oper[2]^.reg));
                 end;
                 end;
+              A_LDRB,
+              A_STRB,
+              A_STR,
+              A_LDR,
+              A_LDRH,
+              A_STRH:
+                { don't mix up the framepointer with pre/post indexed operations }
+                if (taicpu(p).oper[1]^.ref^.addressmode in [AM_PREINDEXED,AM_POSTINDEXED]) then
+                  add_edge(getsupreg(taicpu(p).oper[1]^.ref^.base),getsupreg(current_procinfo.framepointer));
             end;
             end;
           end;
           end;
       end;
       end;