trunk/gcc121/vcs_diff_compiler.patch results

File details

./trunk/gcc121/vcs_diff_compiler.patch 2026-06-20-00:03

Used binaries

   

Binaries version

> uname -a
Linux cfarm121 7.0.12+deb14-powerpc64 #1 SMP PREEMPT Debian 7.0.12-1 (2026-06-09) ppc64 GNU/Linux

Full file content

 
diff --git a/compiler/powerpc/itcpugas.pas b/compiler/powerpc/itcpugas.pas
index 8479e2e8b0..cb92cc3bab 100644
--- a/compiler/powerpc/itcpugas.pas
+++ b/compiler/powerpc/itcpugas.pas
@@ -153,4 +153,8 @@ implementation
           result:=generic_regname(r);
       end;
 
+{$ifdef ENABLE_OPTS_LOCALLY}
+{$pop}
+{$endif ENABLE_OPTS_LOCALLY}
+
 end.
diff --git a/compiler/ppcgen/aoptppc.pas b/compiler/ppcgen/aoptppc.pas
index 6c2dcbb7db..756d74becf 100644
--- a/compiler/ppcgen/aoptppc.pas
+++ b/compiler/ppcgen/aoptppc.pas
@@ -31,6 +31,8 @@
 Type
   TPPCAsmOptimizer = class(TAsmOptimizer)
     function RegLoadedWithNewValue(reg : tregister; hp : tai) : boolean; override;
+    function RegModifiedByInstruction(Reg: TRegister; p1: tai): boolean; override;
+    function InstructionLoadsFromReg(const reg: TRegister; const hp: tai): boolean; override;
  End;
 
 Implementation
@@ -81,5 +83,46 @@   TPPCAsmOptimizer = class(TAsmOptimizer)
           ;
       end;
     end;
+  function TPPCAsmOptimizer.RegModifiedByInstruction(Reg: TRegister; p1: tai): boolean;
+    var
+      i : Longint;
+    begin
+      result:=false;
+      for i:=0 to taicpu(p1).ops-1 do
+        if (taicpu(p1).oper[i]^.typ=top_reg) and (taicpu(p1).oper[i]^.reg=Reg) and (taicpu(p1).spilling_get_operation_type(i) in [operand_write,operand_readwrite]) then
+          begin
+            result:=true;
+            exit;
+          end;
+    end;
+
+ function TPPCAsmOptimizer.InstructionLoadsFromReg(const reg: TRegister; const hp: tai): boolean;
+    var
+      p: taicpu;
+      i: longint;
+    begin
+      result:=false;
+      if not (assigned(hp) and (hp.typ=ait_instruction)) then
+        exit;
+      p:=taicpu(hp);
+
+      i:=0;
+      while(ioperand_write);
+            top_ref:
+              result:=
+                (p.oper[I]^.ref^.base=reg) or
+                (p.oper[I]^.ref^.index=reg);
+            else
+              ;
+          end;
+          if result then exit; {Bailout if we found something}
+          Inc(I);
+        end;
+    end;
+
 
 End.