summary refs log tree commit diff
path: root/gnu/packages/patches/mrustc-riscv64-support.patch
blob: 6312116585c38f51a536bbc9a7774a152cd6f1f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Patch sent upstream for review:
https://github.com/thepowersgang/mrustc/pull/276

diff --git a/src/trans/target.cpp b/src/trans/target.cpp
index 420a2870..4d5eefb3 100644
--- a/src/trans/target.cpp
+++ b/src/trans/target.cpp
@@ -65,6 +65,13 @@ const TargetArch ARCH_POWERPC64LE = {
     { /*atomic(u8)=*/true, true, true, true,  true },
     TargetArch::Alignments(2, 4, 8, 16, 4, 8, 8)
 };
+// This is a guess
+const TargetArch ARCH_RISCV64 = {
+    "riscv64",
+    64, false,
+    { /*atomic(u8)=*/true, true, true, true,  true },
+    TargetArch::Alignments(2, 4, 8, 16, 4, 8, 8)
+};
 TargetSpec  g_target;
 
 
@@ -455,6 +462,13 @@ namespace
                 ARCH_POWERPC64LE
                 };
         }
+        else if(target_name == "riscv64-unknown-linux-gnu")
+        {
+            return TargetSpec {
+                "unix", "linux", "gnu", {CodegenMode::Gnu11, false, "riscv64-unknown-linux-gnu", BACKEND_C_OPTS_GNU},
+                ARCH_RISCV64
+                };
+        }
         else if(target_name == "i586-pc-windows-gnu")
         {
             return TargetSpec {
diff --git a/tools/common/target_detect.h b/tools/common/target_detect.h
index a052da6b..42fea91a 100644
--- a/tools/common/target_detect.h
+++ b/tools/common/target_detect.h
@@ -34,6 +34,8 @@
 #  define DEFAULT_TARGET_NAME "powerpc64-unknown-linux-gnu"
 # elif defined(__powerpc64__) && defined(__LITTLE_ENDIAN__)
 #  define DEFAULT_TARGET_NAME "powerpc64le-unknown-linux-gnu"
+# elif defined(__riscv) && __riscv_xlen == 64
+#  define DEFAULT_TARGET_NAME "riscv64-unknown-linux-gnu"
 # else
 #  warning "Unable to detect a suitable default target (linux-gnu)"
 # endif