mirror of
				https://git.proxmox.com/git/llvm-toolchain
				synced 2025-11-04 00:59:56 +00:00 
			
		
		
		
	include the mips force nommad patch
This commit is contained in:
		
							parent
							
								
									74656bbb27
								
							
						
					
					
						commit
						c9f0e17814
					
				
							
								
								
									
										92
									
								
								debian/patches/mips-force-nomadd4.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								debian/patches/mips-force-nomadd4.diff
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,92 @@
 | 
			
		||||
The MIPS port aims to support the Loongson 3 family of CPUs in addition
 | 
			
		||||
of the other MIPS CPUs. On the Loongson 3 family the MADD4 instructions
 | 
			
		||||
are fused, while they are not fused on the other MIPS CPUs. In order to
 | 
			
		||||
support both, we have to disabled those instructions.
 | 
			
		||||
 | 
			
		||||
For that, the patch below basically corresponds to the --with-madd4=no
 | 
			
		||||
used on the GCC side.
 | 
			
		||||
 | 
			
		||||
Index: llvm-toolchain-11-11.0.0/clang/lib/Basic/Targets/Mips.h
 | 
			
		||||
===================================================================
 | 
			
		||||
--- llvm-toolchain-11-11.0.0.orig/clang/lib/Basic/Targets/Mips.h
 | 
			
		||||
+++ llvm-toolchain-11-11.0.0/clang/lib/Basic/Targets/Mips.h
 | 
			
		||||
@@ -332,6 +332,8 @@ public:
 | 
			
		||||
         HasMSA = true;
 | 
			
		||||
       else if (Feature == "+nomadd4")
 | 
			
		||||
         DisableMadd4 = true;
 | 
			
		||||
+      else if (Feature == "-nomadd4")
 | 
			
		||||
+        DisableMadd4 = false;
 | 
			
		||||
       else if (Feature == "+fp64")
 | 
			
		||||
         FPMode = FP64;
 | 
			
		||||
       else if (Feature == "-fp64")
 | 
			
		||||
Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/MipsSubtarget.cpp
 | 
			
		||||
===================================================================
 | 
			
		||||
--- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/Mips/MipsSubtarget.cpp
 | 
			
		||||
+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/MipsSubtarget.cpp
 | 
			
		||||
@@ -79,7 +79,7 @@ MipsSubtarget::MipsSubtarget(const Tripl
 | 
			
		||||
       InMips16Mode(false), InMips16HardFloat(Mips16HardFloat),
 | 
			
		||||
       InMicroMipsMode(false), HasDSP(false), HasDSPR2(false), HasDSPR3(false),
 | 
			
		||||
       AllowMixed16_32(Mixed16_32 | Mips_Os16), Os16(Mips_Os16), HasMSA(false),
 | 
			
		||||
-      UseTCCInDIV(false), HasSym32(false), HasEVA(false), DisableMadd4(false),
 | 
			
		||||
+      UseTCCInDIV(false), HasSym32(false), HasEVA(false), DisableMadd4(true),
 | 
			
		||||
       HasMT(false), HasCRC(false), HasVirt(false), HasGINV(false),
 | 
			
		||||
       UseIndirectJumpsHazard(false), StackAlignOverride(StackAlignOverride),
 | 
			
		||||
       TM(TM), TargetTriple(TT), TSInfo(),
 | 
			
		||||
@@ -91,6 +91,9 @@ MipsSubtarget::MipsSubtarget(const Tripl
 | 
			
		||||
   if (MipsArchVersion == MipsDefault)
 | 
			
		||||
     MipsArchVersion = Mips32;
 | 
			
		||||
 
 | 
			
		||||
+  if (hasMips32r6() || hasMips64r6())
 | 
			
		||||
+    DisableMadd4 = false;
 | 
			
		||||
+
 | 
			
		||||
   // Don't even attempt to generate code for MIPS-I and MIPS-V. They have not
 | 
			
		||||
   // been tested and currently exist for the integrated assembler only.
 | 
			
		||||
   if (MipsArchVersion == Mips1)
 | 
			
		||||
@@ -238,6 +241,7 @@ MipsSubtarget &
 | 
			
		||||
 MipsSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS,
 | 
			
		||||
                                                const TargetMachine &TM) {
 | 
			
		||||
   StringRef CPUName = MIPS_MC::selectMipsCPU(TM.getTargetTriple(), CPU);
 | 
			
		||||
+  SubtargetFeatures Features(FS);
 | 
			
		||||
 
 | 
			
		||||
   // Parse features string.
 | 
			
		||||
   ParseSubtargetFeatures(CPUName, FS);
 | 
			
		||||
@@ -260,6 +264,13 @@ MipsSubtarget::initializeSubtargetDepend
 | 
			
		||||
     report_fatal_error("64-bit code requested on a subtarget that doesn't "
 | 
			
		||||
                        "support it!");
 | 
			
		||||
 
 | 
			
		||||
+  for (const std::string &Feature : Features.getFeatures()) {
 | 
			
		||||
+    if (Feature == "+nomadd4")
 | 
			
		||||
+      DisableMadd4 = true;
 | 
			
		||||
+    else if (Feature == "-nomadd4")
 | 
			
		||||
+      DisableMadd4 = false;
 | 
			
		||||
+  }
 | 
			
		||||
+
 | 
			
		||||
   return *this;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/Mips.td
 | 
			
		||||
===================================================================
 | 
			
		||||
--- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/Mips/Mips.td
 | 
			
		||||
+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/Mips.td
 | 
			
		||||
@@ -191,7 +191,7 @@ def FeatureUseTCCInDIV : SubtargetFeatur
 | 
			
		||||
                                "UseTCCInDIV", "false",
 | 
			
		||||
                                "Force the assembler to use trapping">;
 | 
			
		||||
 
 | 
			
		||||
-def FeatureMadd4
 | 
			
		||||
+def FeatureNoMadd4
 | 
			
		||||
     : SubtargetFeature<"nomadd4", "DisableMadd4", "true",
 | 
			
		||||
                        "Disable 4-operand madd.fmt and related instructions">;
 | 
			
		||||
 
 | 
			
		||||
Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/MipsInstrInfo.td
 | 
			
		||||
===================================================================
 | 
			
		||||
--- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/Mips/MipsInstrInfo.td
 | 
			
		||||
+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/Mips/MipsInstrInfo.td
 | 
			
		||||
@@ -242,7 +242,7 @@ def HasEVA       :    Predicate<"Subtarg
 | 
			
		||||
 def HasMSA : Predicate<"Subtarget->hasMSA()">,
 | 
			
		||||
              AssemblerPredicate<(all_of FeatureMSA)>;
 | 
			
		||||
 def HasMadd4 : Predicate<"!Subtarget->disableMadd4()">,
 | 
			
		||||
-               AssemblerPredicate<(all_of (not FeatureMadd4))>;
 | 
			
		||||
+               AssemblerPredicate<(all_of (not FeatureNoMadd4))>;
 | 
			
		||||
 def HasMT  : Predicate<"Subtarget->hasMT()">,
 | 
			
		||||
              AssemblerPredicate<(all_of FeatureMT)>;
 | 
			
		||||
 def UseIndirectJumpsHazard : Predicate<"Subtarget->useIndirectJumpsHazard()">,
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user