mirror of
				https://git.proxmox.com/git/llvm-toolchain
				synced 2025-11-04 00:59:56 +00:00 
			
		
		
		
	* Add support for riscv64:
  - Always link with -latomic on riscv64.
  - patches/clang-riscv64-multiarch.diff: add multiarch paths for riscv64.
  - patches/clang-riscv64-rv64gc.diff: default to lp64d ABI and rv64gc ISA.
  - patches/libcxx/libcxx-riscv64-cycletimer.diff: backport riscv64
    cycletimer support from upstream.
		
	
			
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
 | 
						|
index b6768de4d29..9671ea270ef 100644
 | 
						|
--- a/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
 | 
						|
+++ b/clang/lib/Driver/ToolChains/Arch/RISCV.cpp
 | 
						|
@@ -350,6 +350,13 @@ void riscv::getRISCVTargetFeatures(const Driver &D, const ArgList &Args,
 | 
						|
 
 | 
						|
     // Handle all other types of extensions.
 | 
						|
     getExtensionFeatures(D, Args, Features, MArch, OtherExts);
 | 
						|
+  } else {
 | 
						|
+    // Default to imafdc aka gc
 | 
						|
+    Features.push_back("+m");
 | 
						|
+    Features.push_back("+a");
 | 
						|
+    Features.push_back("+f");
 | 
						|
+    Features.push_back("+d");
 | 
						|
+    Features.push_back("+c");
 | 
						|
   }
 | 
						|
 
 | 
						|
   // -mrelax is default, unless -mno-relax is specified.
 | 
						|
@@ -375,5 +382,5 @@ StringRef riscv::getRISCVABI(const ArgList &Args, const llvm::Triple &Triple) {
 | 
						|
   if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ))
 | 
						|
     return A->getValue();
 | 
						|
 
 | 
						|
-  return Triple.getArch() == llvm::Triple::riscv32 ? "ilp32" : "lp64";
 | 
						|
+  return Triple.getArch() == llvm::Triple::riscv32 ? "ilp32" : "lp64d";
 | 
						|
 }
 | 
						|
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
 | 
						|
index 60062d5c327..bb4536cafb0 100644
 | 
						|
--- a/clang/lib/Driver/ToolChains/Clang.cpp
 | 
						|
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
 | 
						|
@@ -1850,7 +1850,7 @@ void Clang::AddRISCVTargetArgs(const ArgList &Args,
 | 
						|
   else if (Triple.getArch() == llvm::Triple::riscv32)
 | 
						|
     ABIName = "ilp32";
 | 
						|
   else if (Triple.getArch() == llvm::Triple::riscv64)
 | 
						|
-    ABIName = "lp64";
 | 
						|
+    ABIName = "lp64d";
 | 
						|
   else
 | 
						|
     llvm_unreachable("Unexpected triple!");
 | 
						|
 
 |