浏览代码

* x86-64: we can spill replace 32 bit operations if the operation does not modify a register

git-svn-id: trunk@49097 -
florian 4 年之前
父节点
当前提交
7811b915a9
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      compiler/x86/rgx86.pas

+ 4 - 2
compiler/x86/rgx86.pas

@@ -407,8 +407,10 @@ implementation
             { 32 bit operations on 32 bit registers on x86_64 can result in
             { 32 bit operations on 32 bit registers on x86_64 can result in
               zeroing the upper 32 bits of the register. This does not happen
               zeroing the upper 32 bits of the register. This does not happen
               with memory operations, so we have to perform these calculations
               with memory operations, so we have to perform these calculations
-              in registers.  }
-            if (opsize=S_L) then
+              in registers.
+
+              However, for instructions not modifying registers, this is not a problem }
+            if (opsize=S_L) and (opcode<>A_CMP) and (opcode<>A_TEST) and (opcode<>A_BT) then
               replaceoper:=-1;
               replaceoper:=-1;
 {$endif x86_64}
 {$endif x86_64}