Browse Source

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

git-svn-id: trunk@49097 -
florian 4 years ago
parent
commit
7811b915a9
1 changed files with 4 additions and 2 deletions
  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}