浏览代码

* cover more cases in AlignedToQWord

git-svn-id: trunk@22060 -
florian 13 年之前
父节点
当前提交
371ef7bada
共有 1 个文件被更改,包括 14 次插入6 次删除
  1. 14 6
      compiler/arm/aoptcpu.pas

+ 14 - 6
compiler/arm/aoptcpu.pas

@@ -189,12 +189,20 @@ Implementation
   function AlignedToQWord(const ref : treference) : boolean;
     begin
       { (safe) heuristics to ensure alignment }
-      result:=(ref.offset>=0) and
-      ((ref.offset mod 8)=0) and
-      ({(taicpu(p).oper[1]^.ref^.base=current_procinfo.framepointer) or
-       (taicpu(p).oper[1]^.ref^.index=current_procinfo.framepointer) or }
-       (ref.base=NR_R13) or
-       (ref.index=NR_R13))
+      result:=(target_info.abi in [abi_eabi,abi_armeb,abi_eabihf]) and
+      (((ref.offset>=0) and
+        ((ref.offset mod 8)=0) and
+        ((ref.base=NR_R13) or
+         (ref.index=NR_R13))
+        ) or
+       ((ref.offset<=0) and
+        { when using NR_R11, it has always a value of <qword align>+4 }
+        ((abs(ref.offset+4) mod 8)=0) and
+        (current_procinfo.framepointer=NR_R11) and
+        ((ref.base=NR_R11) or
+         (ref.index=NR_R11))
+       )
+      );
     end;