summaryrefslogtreecommitdiff
path: root/debian/patches/powerpcspe/D49754-powerpcspe-clang.diff
blob: 13ba9f654857a3784220281703df7bb38a220f2f (plain)
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Description: Add -m(no-)spe, and e500 CPU definitions and support to clang
Author: Justin Hibbits <jrh29@alumni.cwru.edu>
Origin: https://reviews.llvm.org/D49754
Last-Update: 2018-12-04

Index: llvm-toolchain-snapshot_8~svn349138/clang/include/clang/Driver/Options.td
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/include/clang/Driver/Options.td
+++ llvm-toolchain-snapshot_8~svn349138/clang/include/clang/Driver/Options.td
@@ -2142,6 +2142,8 @@ def faltivec : Flag<["-"], "faltivec">,
 def fno_altivec : Flag<["-"], "fno-altivec">, Group<f_Group>, Flags<[DriverOption]>;
 def maltivec : Flag<["-"], "maltivec">, Group<m_ppc_Features_Group>;
 def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>;
+def mspe : Flag<["-"], "mspe">, Group<m_ppc_Features_Group>;
+def mno_spe : Flag<["-"], "mno-spe">, Group<m_ppc_Features_Group>;
 def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
 def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
 def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>;
Index: llvm-toolchain-snapshot_8~svn349138/clang/lib/Basic/Targets/PPC.cpp
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/lib/Basic/Targets/PPC.cpp
+++ llvm-toolchain-snapshot_8~svn349138/clang/lib/Basic/Targets/PPC.cpp
@@ -54,6 +54,8 @@ bool PPCTargetInfo::handleTargetFeatures
       HasFloat128 = true;
     } else if (Feature == "+power9-vector") {
       HasP9Vector = true;
+    } else if (Feature == "+spe") {
+      HasSPE = true;
     }
     // TODO: Finish this list and add an assert that we've handled them
     // all.
@@ -161,6 +163,8 @@ void PPCTargetInfo::getTargetDefines(con
     Builder.defineMacro("__VEC__", "10206");
     Builder.defineMacro("__ALTIVEC__");
   }
+  if (HasSPE)
+    Builder.defineMacro("__SPE__");
   if (HasVSX)
     Builder.defineMacro("__VSX__");
   if (HasP8Vector)
@@ -334,6 +338,7 @@ bool PPCTargetInfo::hasFeature(StringRef
       .Case("extdiv", HasExtDiv)
       .Case("float128", HasFloat128)
       .Case("power9-vector", HasP9Vector)
+      .Case("spe", HasSPE)
       .Default(false);
 }
 
@@ -443,16 +448,16 @@ ArrayRef<TargetInfo::AddlRegName> PPCTar
 }
 
 static constexpr llvm::StringLiteral ValidCPUNames[] = {
-    {"generic"}, {"440"},         {"450"},     {"601"},    {"602"},
-    {"603"},     {"603e"},        {"603ev"},   {"604"},    {"604e"},
-    {"620"},     {"630"},         {"g3"},      {"7400"},   {"g4"},
-    {"7450"},    {"g4+"},         {"750"},     {"970"},    {"g5"},
-    {"a2"},      {"a2q"},         {"e500mc"},  {"e5500"},  {"power3"},
-    {"pwr3"},    {"power4"},      {"pwr4"},    {"power5"}, {"pwr5"},
-    {"power5x"}, {"pwr5x"},       {"power6"},  {"pwr6"},   {"power6x"},
-    {"pwr6x"},   {"power7"},      {"pwr7"},    {"power8"}, {"pwr8"},
-    {"power9"},  {"pwr9"},        {"powerpc"}, {"ppc"},    {"powerpc64"},
-    {"ppc64"},   {"powerpc64le"}, {"ppc64le"},
+    {"generic"},   {"440"},       {"450"},         {"601"},     {"602"},
+    {"603"},       {"603e"},      {"603ev"},       {"604"},     {"604e"},
+    {"620"},       {"630"},       {"g3"},          {"7400"},    {"g4"},
+    {"7450"},      {"g4+"},       {"750"},         {"970"},     {"g5"},
+    {"a2"},        {"a2q"},       {"e500"},        {"e500mc"},  {"e5500"},
+    {"power3"},    {"pwr3"},      {"power4"},      {"pwr4"},    {"power5"},
+    {"pwr5"},      {"power5x"},   {"pwr5x"},       {"power6"},  {"pwr6"},
+    {"power6x"},   {"pwr6x"},     {"power7"},      {"pwr7"},    {"power8"},
+    {"pwr8"},      {"power9"},    {"pwr9"},        {"powerpc"}, {"ppc"},
+    {"powerpc64"}, {"ppc64"},     {"powerpc64le"}, {"ppc64le"},
 };
 
 bool PPCTargetInfo::isValidCPUName(StringRef Name) const {
Index: llvm-toolchain-snapshot_8~svn349138/clang/lib/Basic/Targets/PPC.h
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/lib/Basic/Targets/PPC.h
+++ llvm-toolchain-snapshot_8~svn349138/clang/lib/Basic/Targets/PPC.h
@@ -45,7 +45,8 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetI
     ArchDefinePwr8 = 1 << 12,
     ArchDefinePwr9 = 1 << 13,
     ArchDefineA2 = 1 << 14,
-    ArchDefineA2q = 1 << 15
+    ArchDefineA2q = 1 << 15,
+    ArchDefine500v2 = 1 << 16
   } ArchDefineTypes;
 
 
@@ -66,6 +67,7 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetI
   bool HasBPERMD = false;
   bool HasExtDiv = false;
   bool HasP9Vector = false;
+  bool HasSPE = false;
 
 protected:
   std::string ABI;
@@ -145,6 +147,8 @@ public:
                         ArchDefinePwr6x | ArchDefinePwr6 | ArchDefinePwr5x |
                         ArchDefinePwr5 | ArchDefinePwr4 | ArchDefinePpcgr |
                         ArchDefinePpcsq)
+              .Cases("e500", "e500v2",
+                    ArchDefineName | ArchDefine500v2)
               .Default(ArchDefineNone);
     }
     return CPUKnown;
Index: llvm-toolchain-snapshot_8~svn349138/clang/test/Driver/ppc-features.cpp
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/test/Driver/ppc-features.cpp
+++ llvm-toolchain-snapshot_8~svn349138/clang/test/Driver/ppc-features.cpp
@@ -168,6 +168,9 @@
 // RUN: %clang -target powerpc64-unknown-linux-gnu %s -mno-invariant-function-descriptors -minvariant-function-descriptors -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK-INVFUNCDESC %s
 // CHECK-INVFUNCDESC: "-target-feature" "+invariant-function-descriptors"
 
+// RUN: %clang -target powerpc-unknown-linux-gnu %s -mno-spe -mspe -### -o %t.o 2>&1 | FileCheck -check-prefix=CHECK-SPE %s
+// CHECK-SPE: "-target-feature" "+spe"
+
 // Assembler features
 // RUN: %clang -target powerpc64-unknown-linux-gnu %s -### -o %t.o -no-integrated-as 2>&1 | FileCheck -check-prefix=CHECK_BE_AS_ARGS %s
 // CHECK_BE_AS_ARGS: "-mppc64"
Index: llvm-toolchain-snapshot_8~svn349138/clang/test/Misc/target-invalid-cpu-note.c
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/test/Misc/target-invalid-cpu-note.c
+++ llvm-toolchain-snapshot_8~svn349138/clang/test/Misc/target-invalid-cpu-note.c
@@ -79,7 +79,7 @@
 // PPC: error: unknown target CPU 'not-a-cpu'
 // PPC: note: valid target CPU values are: generic, 440, 450, 601, 602, 603,
 // PPC-SAME: 603e, 603ev, 604, 604e, 620, 630, g3, 7400, g4, 7450, g4+, 750,
-// PPC-SAME: 970, g5, a2, a2q, e500mc, e5500, power3, pwr3, power4, pwr4,
+// PPC-SAME: 970, g5, a2, a2q, e500, e500mc, e5500, power3, pwr3, power4, pwr4,
 // PPC-SAME: power5, pwr5, power5x, pwr5x, power6, pwr6, power6x, pwr6x, power7,
 // PPC-SAME: pwr7, power8, pwr8, power9, pwr9, powerpc, ppc, powerpc64, ppc64,
 // PPC-SAME: powerpc64le, ppc64le
Index: llvm-toolchain-snapshot_8~svn349138/clang/test/Preprocessor/init.c
===================================================================
--- llvm-toolchain-snapshot_8~svn349138.orig/clang/test/Preprocessor/init.c
+++ llvm-toolchain-snapshot_8~svn349138/clang/test/Preprocessor/init.c
@@ -7016,6 +7016,10 @@
 //
 // PPC32-LINUX-NOT: _CALL_LINUX
 //
+// RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc-unknown-linux-gnu -target-feature +spe < /dev/null | FileCheck -match-full-lines -check-prefix PPC32-SPE %s
+//
+// PPC32-SPE:#define __SPE__ 1
+//
 // RUN: %clang_cc1 -E -dM -ffreestanding -triple=powerpc-apple-darwin8 < /dev/null | FileCheck -match-full-lines -check-prefix PPC-DARWIN %s
 //
 // PPC-DARWIN:#define _ARCH_PPC 1