annotate clang/lib/Basic/Targets/PPC.cpp @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===--- PPC.cpp - Implement PPC target feature support -------------------===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8 //
anatofuz
parents:
diff changeset
9 // This file implements PPC TargetInfo objects.
anatofuz
parents:
diff changeset
10 //
anatofuz
parents:
diff changeset
11 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 #include "PPC.h"
anatofuz
parents:
diff changeset
14 #include "clang/Basic/Diagnostic.h"
anatofuz
parents:
diff changeset
15 #include "clang/Basic/MacroBuilder.h"
anatofuz
parents:
diff changeset
16 #include "clang/Basic/TargetBuiltins.h"
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 using namespace clang;
anatofuz
parents:
diff changeset
19 using namespace clang::targets;
anatofuz
parents:
diff changeset
20
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
21 static constexpr Builtin::Info BuiltinInfo[] = {
150
anatofuz
parents:
diff changeset
22 #define BUILTIN(ID, TYPE, ATTRS) \
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
23 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
24 #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
25 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES},
150
anatofuz
parents:
diff changeset
26 #define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) \
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
27 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::HEADER, ALL_LANGUAGES},
150
anatofuz
parents:
diff changeset
28 #include "clang/Basic/BuiltinsPPC.def"
anatofuz
parents:
diff changeset
29 };
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 /// handleTargetFeatures - Perform initialization based on the user
anatofuz
parents:
diff changeset
32 /// configured set of features.
anatofuz
parents:
diff changeset
33 bool PPCTargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
anatofuz
parents:
diff changeset
34 DiagnosticsEngine &Diags) {
anatofuz
parents:
diff changeset
35 FloatABI = HardFloat;
anatofuz
parents:
diff changeset
36 for (const auto &Feature : Features) {
anatofuz
parents:
diff changeset
37 if (Feature == "+altivec") {
anatofuz
parents:
diff changeset
38 HasAltivec = true;
anatofuz
parents:
diff changeset
39 } else if (Feature == "+vsx") {
anatofuz
parents:
diff changeset
40 HasVSX = true;
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
41 } else if (Feature == "+crbits") {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
42 UseCRBits = true;
150
anatofuz
parents:
diff changeset
43 } else if (Feature == "+bpermd") {
anatofuz
parents:
diff changeset
44 HasBPERMD = true;
anatofuz
parents:
diff changeset
45 } else if (Feature == "+extdiv") {
anatofuz
parents:
diff changeset
46 HasExtDiv = true;
anatofuz
parents:
diff changeset
47 } else if (Feature == "+power8-vector") {
anatofuz
parents:
diff changeset
48 HasP8Vector = true;
anatofuz
parents:
diff changeset
49 } else if (Feature == "+crypto") {
anatofuz
parents:
diff changeset
50 HasP8Crypto = true;
anatofuz
parents:
diff changeset
51 } else if (Feature == "+direct-move") {
anatofuz
parents:
diff changeset
52 HasDirectMove = true;
anatofuz
parents:
diff changeset
53 } else if (Feature == "+htm") {
anatofuz
parents:
diff changeset
54 HasHTM = true;
anatofuz
parents:
diff changeset
55 } else if (Feature == "+float128") {
anatofuz
parents:
diff changeset
56 HasFloat128 = true;
anatofuz
parents:
diff changeset
57 } else if (Feature == "+power9-vector") {
anatofuz
parents:
diff changeset
58 HasP9Vector = true;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
59 } else if (Feature == "+power10-vector") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
60 HasP10Vector = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
61 } else if (Feature == "+pcrelative-memops") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
62 HasPCRelativeMemops = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
63 } else if (Feature == "+prefix-instrs") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
64 HasPrefixInstrs = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
65 } else if (Feature == "+spe" || Feature == "+efpu2") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
66 HasStrictFP = false;
150
anatofuz
parents:
diff changeset
67 HasSPE = true;
anatofuz
parents:
diff changeset
68 LongDoubleWidth = LongDoubleAlign = 64;
anatofuz
parents:
diff changeset
69 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
anatofuz
parents:
diff changeset
70 } else if (Feature == "-hard-float") {
anatofuz
parents:
diff changeset
71 FloatABI = SoftFloat;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
72 } else if (Feature == "+paired-vector-memops") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
73 PairedVectorMemops = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
74 } else if (Feature == "+mma") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
75 HasMMA = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
76 } else if (Feature == "+rop-protect") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
77 HasROPProtect = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
78 } else if (Feature == "+privileged") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
79 HasPrivileged = true;
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
80 } else if (Feature == "+isa-v206-instructions") {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
81 IsISA2_06 = true;
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
82 } else if (Feature == "+isa-v207-instructions") {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
83 IsISA2_07 = true;
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
84 } else if (Feature == "+isa-v30-instructions") {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
85 IsISA3_0 = true;
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
86 } else if (Feature == "+isa-v31-instructions") {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
87 IsISA3_1 = true;
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
88 } else if (Feature == "+quadword-atomics") {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
89 HasQuadwordAtomics = true;
150
anatofuz
parents:
diff changeset
90 }
anatofuz
parents:
diff changeset
91 // TODO: Finish this list and add an assert that we've handled them
anatofuz
parents:
diff changeset
92 // all.
anatofuz
parents:
diff changeset
93 }
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 return true;
anatofuz
parents:
diff changeset
96 }
anatofuz
parents:
diff changeset
97
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
98 static void defineXLCompatMacros(MacroBuilder &Builder) {
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
99 Builder.defineMacro("__popcntb", "__builtin_ppc_popcntb");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
100 Builder.defineMacro("__poppar4", "__builtin_ppc_poppar4");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
101 Builder.defineMacro("__poppar8", "__builtin_ppc_poppar8");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
102 Builder.defineMacro("__eieio", "__builtin_ppc_eieio");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
103 Builder.defineMacro("__iospace_eieio", "__builtin_ppc_iospace_eieio");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
104 Builder.defineMacro("__isync", "__builtin_ppc_isync");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
105 Builder.defineMacro("__lwsync", "__builtin_ppc_lwsync");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
106 Builder.defineMacro("__iospace_lwsync", "__builtin_ppc_iospace_lwsync");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
107 Builder.defineMacro("__sync", "__builtin_ppc_sync");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
108 Builder.defineMacro("__iospace_sync", "__builtin_ppc_iospace_sync");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
109 Builder.defineMacro("__dcbfl", "__builtin_ppc_dcbfl");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
110 Builder.defineMacro("__dcbflp", "__builtin_ppc_dcbflp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
111 Builder.defineMacro("__dcbst", "__builtin_ppc_dcbst");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
112 Builder.defineMacro("__dcbt", "__builtin_ppc_dcbt");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
113 Builder.defineMacro("__dcbtst", "__builtin_ppc_dcbtst");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
114 Builder.defineMacro("__dcbz", "__builtin_ppc_dcbz");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
115 Builder.defineMacro("__icbt", "__builtin_ppc_icbt");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
116 Builder.defineMacro("__compare_and_swap", "__builtin_ppc_compare_and_swap");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
117 Builder.defineMacro("__compare_and_swaplp",
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
118 "__builtin_ppc_compare_and_swaplp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
119 Builder.defineMacro("__fetch_and_add", "__builtin_ppc_fetch_and_add");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
120 Builder.defineMacro("__fetch_and_addlp", "__builtin_ppc_fetch_and_addlp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
121 Builder.defineMacro("__fetch_and_and", "__builtin_ppc_fetch_and_and");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
122 Builder.defineMacro("__fetch_and_andlp", "__builtin_ppc_fetch_and_andlp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
123 Builder.defineMacro("__fetch_and_or", "__builtin_ppc_fetch_and_or");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
124 Builder.defineMacro("__fetch_and_orlp", "__builtin_ppc_fetch_and_orlp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
125 Builder.defineMacro("__fetch_and_swap", "__builtin_ppc_fetch_and_swap");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
126 Builder.defineMacro("__fetch_and_swaplp", "__builtin_ppc_fetch_and_swaplp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
127 Builder.defineMacro("__ldarx", "__builtin_ppc_ldarx");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
128 Builder.defineMacro("__lwarx", "__builtin_ppc_lwarx");
232
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
129 Builder.defineMacro("__lharx", "__builtin_ppc_lharx");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
130 Builder.defineMacro("__lbarx", "__builtin_ppc_lbarx");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
131 Builder.defineMacro("__stfiw", "__builtin_ppc_stfiw");
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
132 Builder.defineMacro("__stdcx", "__builtin_ppc_stdcx");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
133 Builder.defineMacro("__stwcx", "__builtin_ppc_stwcx");
232
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
134 Builder.defineMacro("__sthcx", "__builtin_ppc_sthcx");
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
135 Builder.defineMacro("__stbcx", "__builtin_ppc_stbcx");
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
136 Builder.defineMacro("__tdw", "__builtin_ppc_tdw");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
137 Builder.defineMacro("__tw", "__builtin_ppc_tw");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
138 Builder.defineMacro("__trap", "__builtin_ppc_trap");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
139 Builder.defineMacro("__trapd", "__builtin_ppc_trapd");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
140 Builder.defineMacro("__fcfid", "__builtin_ppc_fcfid");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
141 Builder.defineMacro("__fcfud", "__builtin_ppc_fcfud");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
142 Builder.defineMacro("__fctid", "__builtin_ppc_fctid");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
143 Builder.defineMacro("__fctidz", "__builtin_ppc_fctidz");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
144 Builder.defineMacro("__fctiw", "__builtin_ppc_fctiw");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
145 Builder.defineMacro("__fctiwz", "__builtin_ppc_fctiwz");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
146 Builder.defineMacro("__fctudz", "__builtin_ppc_fctudz");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
147 Builder.defineMacro("__fctuwz", "__builtin_ppc_fctuwz");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
148 Builder.defineMacro("__cmpeqb", "__builtin_ppc_cmpeqb");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
149 Builder.defineMacro("__cmprb", "__builtin_ppc_cmprb");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
150 Builder.defineMacro("__setb", "__builtin_ppc_setb");
232
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
151 Builder.defineMacro("__cmpb", "__builtin_ppc_cmpb");
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
152 Builder.defineMacro("__mulhd", "__builtin_ppc_mulhd");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
153 Builder.defineMacro("__mulhdu", "__builtin_ppc_mulhdu");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
154 Builder.defineMacro("__mulhw", "__builtin_ppc_mulhw");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
155 Builder.defineMacro("__mulhwu", "__builtin_ppc_mulhwu");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
156 Builder.defineMacro("__maddhd", "__builtin_ppc_maddhd");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
157 Builder.defineMacro("__maddhdu", "__builtin_ppc_maddhdu");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
158 Builder.defineMacro("__maddld", "__builtin_ppc_maddld");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
159 Builder.defineMacro("__rlwnm", "__builtin_ppc_rlwnm");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
160 Builder.defineMacro("__rlwimi", "__builtin_ppc_rlwimi");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
161 Builder.defineMacro("__rldimi", "__builtin_ppc_rldimi");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
162 Builder.defineMacro("__load2r", "__builtin_ppc_load2r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
163 Builder.defineMacro("__load4r", "__builtin_ppc_load4r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
164 Builder.defineMacro("__load8r", "__builtin_ppc_load8r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
165 Builder.defineMacro("__store2r", "__builtin_ppc_store2r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
166 Builder.defineMacro("__store4r", "__builtin_ppc_store4r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
167 Builder.defineMacro("__store8r", "__builtin_ppc_store8r");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
168 Builder.defineMacro("__extract_exp", "__builtin_ppc_extract_exp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
169 Builder.defineMacro("__extract_sig", "__builtin_ppc_extract_sig");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
170 Builder.defineMacro("__mtfsb0", "__builtin_ppc_mtfsb0");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
171 Builder.defineMacro("__mtfsb1", "__builtin_ppc_mtfsb1");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
172 Builder.defineMacro("__mtfsf", "__builtin_ppc_mtfsf");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
173 Builder.defineMacro("__mtfsfi", "__builtin_ppc_mtfsfi");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
174 Builder.defineMacro("__insert_exp", "__builtin_ppc_insert_exp");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
175 Builder.defineMacro("__fmsub", "__builtin_ppc_fmsub");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
176 Builder.defineMacro("__fmsubs", "__builtin_ppc_fmsubs");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
177 Builder.defineMacro("__fnmadd", "__builtin_ppc_fnmadd");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
178 Builder.defineMacro("__fnmadds", "__builtin_ppc_fnmadds");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
179 Builder.defineMacro("__fnmsub", "__builtin_ppc_fnmsub");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
180 Builder.defineMacro("__fnmsubs", "__builtin_ppc_fnmsubs");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
181 Builder.defineMacro("__fre", "__builtin_ppc_fre");
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
182 Builder.defineMacro("__fres", "__builtin_ppc_fres");
232
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
183 Builder.defineMacro("__swdiv_nochk", "__builtin_ppc_swdiv_nochk");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
184 Builder.defineMacro("__swdivs_nochk", "__builtin_ppc_swdivs_nochk");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
185 Builder.defineMacro("__alloca", "__builtin_alloca");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
186 Builder.defineMacro("__vcipher", "__builtin_altivec_crypto_vcipher");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
187 Builder.defineMacro("__vcipherlast", "__builtin_altivec_crypto_vcipherlast");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
188 Builder.defineMacro("__vncipher", "__builtin_altivec_crypto_vncipher");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
189 Builder.defineMacro("__vncipherlast",
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
190 "__builtin_altivec_crypto_vncipherlast");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
191 Builder.defineMacro("__vpermxor", "__builtin_altivec_crypto_vpermxor");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
192 Builder.defineMacro("__vpmsumb", "__builtin_altivec_crypto_vpmsumb");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
193 Builder.defineMacro("__vpmsumd", "__builtin_altivec_crypto_vpmsumd");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
194 Builder.defineMacro("__vpmsumh", "__builtin_altivec_crypto_vpmsumh");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
195 Builder.defineMacro("__vpmsumw", "__builtin_altivec_crypto_vpmsumw");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
196 Builder.defineMacro("__divde", "__builtin_divde");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
197 Builder.defineMacro("__divwe", "__builtin_divwe");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
198 Builder.defineMacro("__divdeu", "__builtin_divdeu");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
199 Builder.defineMacro("__divweu", "__builtin_divweu");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
200 Builder.defineMacro("__alignx", "__builtin_ppc_alignx");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
201 Builder.defineMacro("__bcopy", "bcopy");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
202 Builder.defineMacro("__bpermd", "__builtin_bpermd");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
203 Builder.defineMacro("__cntlz4", "__builtin_clz");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
204 Builder.defineMacro("__cntlz8", "__builtin_clzll");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
205 Builder.defineMacro("__cmplx", "__builtin_complex");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
206 Builder.defineMacro("__cmplxf", "__builtin_complex");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
207 Builder.defineMacro("__cnttz4", "__builtin_ctz");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
208 Builder.defineMacro("__cnttz8", "__builtin_ctzll");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
209 Builder.defineMacro("__darn", "__builtin_darn");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
210 Builder.defineMacro("__darn_32", "__builtin_darn_32");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
211 Builder.defineMacro("__darn_raw", "__builtin_darn_raw");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
212 Builder.defineMacro("__dcbf", "__builtin_dcbf");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
213 Builder.defineMacro("__fmadd", "__builtin_fma");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
214 Builder.defineMacro("__fmadds", "__builtin_fmaf");
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
215 Builder.defineMacro("__abs", "__builtin_abs");
232
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
216 Builder.defineMacro("__labs", "__builtin_labs");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
217 Builder.defineMacro("__llabs", "__builtin_llabs");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
218 Builder.defineMacro("__popcnt4", "__builtin_popcount");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
219 Builder.defineMacro("__popcnt8", "__builtin_popcountll");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
220 Builder.defineMacro("__readflm", "__builtin_readflm");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
221 Builder.defineMacro("__rotatel4", "__builtin_rotateleft32");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
222 Builder.defineMacro("__rotatel8", "__builtin_rotateleft64");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
223 Builder.defineMacro("__rdlam", "__builtin_ppc_rdlam");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
224 Builder.defineMacro("__setflm", "__builtin_setflm");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
225 Builder.defineMacro("__setrnd", "__builtin_setrnd");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
226 Builder.defineMacro("__dcbtstt", "__builtin_ppc_dcbtstt");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
227 Builder.defineMacro("__dcbtt", "__builtin_ppc_dcbtt");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
228 Builder.defineMacro("__mftbu", "__builtin_ppc_mftbu");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
229 Builder.defineMacro("__mfmsr", "__builtin_ppc_mfmsr");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
230 Builder.defineMacro("__mtmsr", "__builtin_ppc_mtmsr");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
231 Builder.defineMacro("__mfspr", "__builtin_ppc_mfspr");
70dce7da266c llvm original Jul 20 16:41:34 2021
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
232 Builder.defineMacro("__mtspr", "__builtin_ppc_mtspr");
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
233 Builder.defineMacro("__fric", "__builtin_ppc_fric");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
234 Builder.defineMacro("__frim", "__builtin_ppc_frim");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
235 Builder.defineMacro("__frims", "__builtin_ppc_frims");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
236 Builder.defineMacro("__frin", "__builtin_ppc_frin");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
237 Builder.defineMacro("__frins", "__builtin_ppc_frins");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
238 Builder.defineMacro("__frip", "__builtin_ppc_frip");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
239 Builder.defineMacro("__frips", "__builtin_ppc_frips");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
240 Builder.defineMacro("__friz", "__builtin_ppc_friz");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
241 Builder.defineMacro("__frizs", "__builtin_ppc_frizs");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
242 Builder.defineMacro("__fsel", "__builtin_ppc_fsel");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
243 Builder.defineMacro("__fsels", "__builtin_ppc_fsels");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
244 Builder.defineMacro("__frsqrte", "__builtin_ppc_frsqrte");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
245 Builder.defineMacro("__frsqrtes", "__builtin_ppc_frsqrtes");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
246 Builder.defineMacro("__fsqrt", "__builtin_ppc_fsqrt");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
247 Builder.defineMacro("__fsqrts", "__builtin_ppc_fsqrts");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
248 Builder.defineMacro("__addex", "__builtin_ppc_addex");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
249 Builder.defineMacro("__cmplxl", "__builtin_complex");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
250 Builder.defineMacro("__compare_exp_uo", "__builtin_ppc_compare_exp_uo");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
251 Builder.defineMacro("__compare_exp_lt", "__builtin_ppc_compare_exp_lt");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
252 Builder.defineMacro("__compare_exp_gt", "__builtin_ppc_compare_exp_gt");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
253 Builder.defineMacro("__compare_exp_eq", "__builtin_ppc_compare_exp_eq");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
254 Builder.defineMacro("__test_data_class", "__builtin_ppc_test_data_class");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
255 Builder.defineMacro("__swdiv", "__builtin_ppc_swdiv");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
256 Builder.defineMacro("__swdivs", "__builtin_ppc_swdivs");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
257 Builder.defineMacro("__fnabs", "__builtin_ppc_fnabs");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
258 Builder.defineMacro("__fnabss", "__builtin_ppc_fnabss");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
259 Builder.defineMacro("__builtin_maxfe", "__builtin_ppc_maxfe");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
260 Builder.defineMacro("__builtin_maxfl", "__builtin_ppc_maxfl");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
261 Builder.defineMacro("__builtin_maxfs", "__builtin_ppc_maxfs");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
262 Builder.defineMacro("__builtin_minfe", "__builtin_ppc_minfe");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
263 Builder.defineMacro("__builtin_minfl", "__builtin_ppc_minfl");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
264 Builder.defineMacro("__builtin_minfs", "__builtin_ppc_minfs");
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
265 }
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
266
150
anatofuz
parents:
diff changeset
267 /// PPCTargetInfo::getTargetDefines - Return a set of the PowerPC-specific
anatofuz
parents:
diff changeset
268 /// #defines that are not tied to a specific subtarget.
anatofuz
parents:
diff changeset
269 void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
anatofuz
parents:
diff changeset
270 MacroBuilder &Builder) const {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
271
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
272 // We define the XLC compatibility macros only on AIX and Linux since XLC
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
273 // was never available on any other platforms.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
274 if (getTriple().isOSAIX() || getTriple().isOSLinux())
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
275 defineXLCompatMacros(Builder);
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
276
150
anatofuz
parents:
diff changeset
277 // Target identification.
anatofuz
parents:
diff changeset
278 Builder.defineMacro("__ppc__");
anatofuz
parents:
diff changeset
279 Builder.defineMacro("__PPC__");
anatofuz
parents:
diff changeset
280 Builder.defineMacro("_ARCH_PPC");
anatofuz
parents:
diff changeset
281 Builder.defineMacro("__powerpc__");
anatofuz
parents:
diff changeset
282 Builder.defineMacro("__POWERPC__");
anatofuz
parents:
diff changeset
283 if (PointerWidth == 64) {
anatofuz
parents:
diff changeset
284 Builder.defineMacro("_ARCH_PPC64");
anatofuz
parents:
diff changeset
285 Builder.defineMacro("__powerpc64__");
anatofuz
parents:
diff changeset
286 Builder.defineMacro("__PPC64__");
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
287 } else if (getTriple().isOSAIX()) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
288 // The XL compilers on AIX define _ARCH_PPC64 for both 32 and 64-bit modes.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
289 Builder.defineMacro("_ARCH_PPC64");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
290 }
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
291 if (getTriple().isOSAIX()) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
292 Builder.defineMacro("__THW_PPC__");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
293 // Define __PPC and __powerpc for AIX XL C/C++ compatibility
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
294 Builder.defineMacro("__PPC");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
295 Builder.defineMacro("__powerpc");
150
anatofuz
parents:
diff changeset
296 }
anatofuz
parents:
diff changeset
297
anatofuz
parents:
diff changeset
298 // Target properties.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
299 if (getTriple().getArch() == llvm::Triple::ppc64le ||
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
300 getTriple().getArch() == llvm::Triple::ppcle) {
150
anatofuz
parents:
diff changeset
301 Builder.defineMacro("_LITTLE_ENDIAN");
anatofuz
parents:
diff changeset
302 } else {
anatofuz
parents:
diff changeset
303 if (!getTriple().isOSNetBSD() &&
anatofuz
parents:
diff changeset
304 !getTriple().isOSOpenBSD())
anatofuz
parents:
diff changeset
305 Builder.defineMacro("_BIG_ENDIAN");
anatofuz
parents:
diff changeset
306 }
anatofuz
parents:
diff changeset
307
anatofuz
parents:
diff changeset
308 // ABI options.
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
309 if (ABI == "elfv1")
150
anatofuz
parents:
diff changeset
310 Builder.defineMacro("_CALL_ELF", "1");
anatofuz
parents:
diff changeset
311 if (ABI == "elfv2")
anatofuz
parents:
diff changeset
312 Builder.defineMacro("_CALL_ELF", "2");
anatofuz
parents:
diff changeset
313
anatofuz
parents:
diff changeset
314 // This typically is only for a new enough linker (bfd >= 2.16.2 or gold), but
anatofuz
parents:
diff changeset
315 // our support post-dates this and it should work on all 64-bit ppc linux
anatofuz
parents:
diff changeset
316 // platforms. It is guaranteed to work on all elfv2 platforms.
anatofuz
parents:
diff changeset
317 if (getTriple().getOS() == llvm::Triple::Linux && PointerWidth == 64)
anatofuz
parents:
diff changeset
318 Builder.defineMacro("_CALL_LINUX", "1");
anatofuz
parents:
diff changeset
319
anatofuz
parents:
diff changeset
320 // Subtarget options.
anatofuz
parents:
diff changeset
321 if (!getTriple().isOSAIX()){
anatofuz
parents:
diff changeset
322 Builder.defineMacro("__NATURAL_ALIGNMENT__");
anatofuz
parents:
diff changeset
323 }
anatofuz
parents:
diff changeset
324 Builder.defineMacro("__REGISTER_PREFIX__", "");
anatofuz
parents:
diff changeset
325
anatofuz
parents:
diff changeset
326 // FIXME: Should be controlled by command line option.
anatofuz
parents:
diff changeset
327 if (LongDoubleWidth == 128) {
anatofuz
parents:
diff changeset
328 Builder.defineMacro("__LONG_DOUBLE_128__");
anatofuz
parents:
diff changeset
329 Builder.defineMacro("__LONGDOUBLE128");
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
330 if (Opts.PPCIEEELongDouble)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
331 Builder.defineMacro("__LONG_DOUBLE_IEEE128__");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
332 else
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
333 Builder.defineMacro("__LONG_DOUBLE_IBM128__");
150
anatofuz
parents:
diff changeset
334 }
anatofuz
parents:
diff changeset
335
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
336 if (getTriple().isOSAIX() && Opts.LongDoubleSize == 64) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
337 assert(LongDoubleWidth == 64);
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
338 Builder.defineMacro("__LONGDOUBLE64");
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
339 }
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
340
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
341 // Define this for elfv2 (64-bit only).
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
342 if (ABI == "elfv2")
150
anatofuz
parents:
diff changeset
343 Builder.defineMacro("__STRUCT_PARM_ALIGN__", "16");
anatofuz
parents:
diff changeset
344
anatofuz
parents:
diff changeset
345 if (ArchDefs & ArchDefineName)
anatofuz
parents:
diff changeset
346 Builder.defineMacro(Twine("_ARCH_", StringRef(CPU).upper()));
anatofuz
parents:
diff changeset
347 if (ArchDefs & ArchDefinePpcgr)
anatofuz
parents:
diff changeset
348 Builder.defineMacro("_ARCH_PPCGR");
anatofuz
parents:
diff changeset
349 if (ArchDefs & ArchDefinePpcsq)
anatofuz
parents:
diff changeset
350 Builder.defineMacro("_ARCH_PPCSQ");
anatofuz
parents:
diff changeset
351 if (ArchDefs & ArchDefine440)
anatofuz
parents:
diff changeset
352 Builder.defineMacro("_ARCH_440");
anatofuz
parents:
diff changeset
353 if (ArchDefs & ArchDefine603)
anatofuz
parents:
diff changeset
354 Builder.defineMacro("_ARCH_603");
anatofuz
parents:
diff changeset
355 if (ArchDefs & ArchDefine604)
anatofuz
parents:
diff changeset
356 Builder.defineMacro("_ARCH_604");
anatofuz
parents:
diff changeset
357 if (ArchDefs & ArchDefinePwr4)
anatofuz
parents:
diff changeset
358 Builder.defineMacro("_ARCH_PWR4");
anatofuz
parents:
diff changeset
359 if (ArchDefs & ArchDefinePwr5)
anatofuz
parents:
diff changeset
360 Builder.defineMacro("_ARCH_PWR5");
anatofuz
parents:
diff changeset
361 if (ArchDefs & ArchDefinePwr5x)
anatofuz
parents:
diff changeset
362 Builder.defineMacro("_ARCH_PWR5X");
anatofuz
parents:
diff changeset
363 if (ArchDefs & ArchDefinePwr6)
anatofuz
parents:
diff changeset
364 Builder.defineMacro("_ARCH_PWR6");
anatofuz
parents:
diff changeset
365 if (ArchDefs & ArchDefinePwr6x)
anatofuz
parents:
diff changeset
366 Builder.defineMacro("_ARCH_PWR6X");
anatofuz
parents:
diff changeset
367 if (ArchDefs & ArchDefinePwr7)
anatofuz
parents:
diff changeset
368 Builder.defineMacro("_ARCH_PWR7");
anatofuz
parents:
diff changeset
369 if (ArchDefs & ArchDefinePwr8)
anatofuz
parents:
diff changeset
370 Builder.defineMacro("_ARCH_PWR8");
anatofuz
parents:
diff changeset
371 if (ArchDefs & ArchDefinePwr9)
anatofuz
parents:
diff changeset
372 Builder.defineMacro("_ARCH_PWR9");
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
373 if (ArchDefs & ArchDefinePwr10)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
374 Builder.defineMacro("_ARCH_PWR10");
150
anatofuz
parents:
diff changeset
375 if (ArchDefs & ArchDefineA2)
anatofuz
parents:
diff changeset
376 Builder.defineMacro("_ARCH_A2");
anatofuz
parents:
diff changeset
377 if (ArchDefs & ArchDefineE500)
anatofuz
parents:
diff changeset
378 Builder.defineMacro("__NO_LWSYNC__");
anatofuz
parents:
diff changeset
379 if (ArchDefs & ArchDefineFuture)
anatofuz
parents:
diff changeset
380 Builder.defineMacro("_ARCH_PWR_FUTURE");
anatofuz
parents:
diff changeset
381
anatofuz
parents:
diff changeset
382 if (HasAltivec) {
anatofuz
parents:
diff changeset
383 Builder.defineMacro("__VEC__", "10206");
anatofuz
parents:
diff changeset
384 Builder.defineMacro("__ALTIVEC__");
anatofuz
parents:
diff changeset
385 }
anatofuz
parents:
diff changeset
386 if (HasSPE) {
anatofuz
parents:
diff changeset
387 Builder.defineMacro("__SPE__");
anatofuz
parents:
diff changeset
388 Builder.defineMacro("__NO_FPRS__");
anatofuz
parents:
diff changeset
389 }
anatofuz
parents:
diff changeset
390 if (HasVSX)
anatofuz
parents:
diff changeset
391 Builder.defineMacro("__VSX__");
anatofuz
parents:
diff changeset
392 if (HasP8Vector)
anatofuz
parents:
diff changeset
393 Builder.defineMacro("__POWER8_VECTOR__");
anatofuz
parents:
diff changeset
394 if (HasP8Crypto)
anatofuz
parents:
diff changeset
395 Builder.defineMacro("__CRYPTO__");
anatofuz
parents:
diff changeset
396 if (HasHTM)
anatofuz
parents:
diff changeset
397 Builder.defineMacro("__HTM__");
anatofuz
parents:
diff changeset
398 if (HasFloat128)
anatofuz
parents:
diff changeset
399 Builder.defineMacro("__FLOAT128__");
anatofuz
parents:
diff changeset
400 if (HasP9Vector)
anatofuz
parents:
diff changeset
401 Builder.defineMacro("__POWER9_VECTOR__");
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
402 if (HasMMA)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
403 Builder.defineMacro("__MMA__");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
404 if (HasROPProtect)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
405 Builder.defineMacro("__ROP_PROTECT__");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
406 if (HasP10Vector)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
407 Builder.defineMacro("__POWER10_VECTOR__");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
408 if (HasPCRelativeMemops)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
409 Builder.defineMacro("__PCREL__");
150
anatofuz
parents:
diff changeset
410
anatofuz
parents:
diff changeset
411 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
anatofuz
parents:
diff changeset
412 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
anatofuz
parents:
diff changeset
413 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
anatofuz
parents:
diff changeset
414 if (PointerWidth == 64)
anatofuz
parents:
diff changeset
415 Builder.defineMacro("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
anatofuz
parents:
diff changeset
416
anatofuz
parents:
diff changeset
417 // We have support for the bswap intrinsics so we can define this.
anatofuz
parents:
diff changeset
418 Builder.defineMacro("__HAVE_BSWAP__", "1");
anatofuz
parents:
diff changeset
419
anatofuz
parents:
diff changeset
420 // FIXME: The following are not yet generated here by Clang, but are
anatofuz
parents:
diff changeset
421 // generated by GCC:
anatofuz
parents:
diff changeset
422 //
anatofuz
parents:
diff changeset
423 // _SOFT_FLOAT_
anatofuz
parents:
diff changeset
424 // __RECIP_PRECISION__
anatofuz
parents:
diff changeset
425 // __APPLE_ALTIVEC__
anatofuz
parents:
diff changeset
426 // __RECIP__
anatofuz
parents:
diff changeset
427 // __RECIPF__
anatofuz
parents:
diff changeset
428 // __RSQRTE__
anatofuz
parents:
diff changeset
429 // __RSQRTEF__
anatofuz
parents:
diff changeset
430 // _SOFT_DOUBLE_
anatofuz
parents:
diff changeset
431 // __NO_LWSYNC__
anatofuz
parents:
diff changeset
432 // __CMODEL_MEDIUM__
anatofuz
parents:
diff changeset
433 // __CMODEL_LARGE__
anatofuz
parents:
diff changeset
434 // _CALL_SYSV
anatofuz
parents:
diff changeset
435 // _CALL_DARWIN
anatofuz
parents:
diff changeset
436 }
anatofuz
parents:
diff changeset
437
anatofuz
parents:
diff changeset
438 // Handle explicit options being passed to the compiler here: if we've
anatofuz
parents:
diff changeset
439 // explicitly turned off vsx and turned on any of:
anatofuz
parents:
diff changeset
440 // - power8-vector
anatofuz
parents:
diff changeset
441 // - direct-move
anatofuz
parents:
diff changeset
442 // - float128
anatofuz
parents:
diff changeset
443 // - power9-vector
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
444 // - paired-vector-memops
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
445 // - mma
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
446 // - power10-vector
150
anatofuz
parents:
diff changeset
447 // then go ahead and error since the customer has expressed an incompatible
anatofuz
parents:
diff changeset
448 // set of options.
anatofuz
parents:
diff changeset
449 static bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags,
anatofuz
parents:
diff changeset
450 const std::vector<std::string> &FeaturesVec) {
anatofuz
parents:
diff changeset
451
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
452 // vsx was not explicitly turned off.
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
453 if (!llvm::is_contained(FeaturesVec, "-vsx"))
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
454 return true;
150
anatofuz
parents:
diff changeset
455
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
456 auto FindVSXSubfeature = [&](StringRef Feature, StringRef Option) {
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
457 if (llvm::is_contained(FeaturesVec, Feature)) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
458 Diags.Report(diag::err_opt_not_valid_with_opt) << Option << "-mno-vsx";
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
459 return true;
150
anatofuz
parents:
diff changeset
460 }
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
461 return false;
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
462 };
150
anatofuz
parents:
diff changeset
463
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
464 bool Found = FindVSXSubfeature("+power8-vector", "-mpower8-vector");
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
465 Found |= FindVSXSubfeature("+direct-move", "-mdirect-move");
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
466 Found |= FindVSXSubfeature("+float128", "-mfloat128");
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
467 Found |= FindVSXSubfeature("+power9-vector", "-mpower9-vector");
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
468 Found |= FindVSXSubfeature("+paired-vector-memops", "-mpaired-vector-memops");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
469 Found |= FindVSXSubfeature("+mma", "-mmma");
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
470 Found |= FindVSXSubfeature("+power10-vector", "-mpower10-vector");
150
anatofuz
parents:
diff changeset
471
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
472 // Return false if any vsx subfeatures was found.
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
473 return !Found;
150
anatofuz
parents:
diff changeset
474 }
anatofuz
parents:
diff changeset
475
anatofuz
parents:
diff changeset
476 bool PPCTargetInfo::initFeatureMap(
anatofuz
parents:
diff changeset
477 llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU,
anatofuz
parents:
diff changeset
478 const std::vector<std::string> &FeaturesVec) const {
anatofuz
parents:
diff changeset
479 Features["altivec"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
480 .Case("7400", true)
anatofuz
parents:
diff changeset
481 .Case("g4", true)
anatofuz
parents:
diff changeset
482 .Case("7450", true)
anatofuz
parents:
diff changeset
483 .Case("g4+", true)
anatofuz
parents:
diff changeset
484 .Case("970", true)
anatofuz
parents:
diff changeset
485 .Case("g5", true)
anatofuz
parents:
diff changeset
486 .Case("pwr6", true)
anatofuz
parents:
diff changeset
487 .Case("pwr7", true)
anatofuz
parents:
diff changeset
488 .Case("pwr8", true)
anatofuz
parents:
diff changeset
489 .Case("pwr9", true)
anatofuz
parents:
diff changeset
490 .Case("ppc64", true)
anatofuz
parents:
diff changeset
491 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
492 .Default(false);
anatofuz
parents:
diff changeset
493
anatofuz
parents:
diff changeset
494 Features["power9-vector"] = (CPU == "pwr9");
anatofuz
parents:
diff changeset
495 Features["crypto"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
496 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
497 .Case("pwr9", true)
anatofuz
parents:
diff changeset
498 .Case("pwr8", true)
anatofuz
parents:
diff changeset
499 .Default(false);
anatofuz
parents:
diff changeset
500 Features["power8-vector"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
501 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
502 .Case("pwr9", true)
anatofuz
parents:
diff changeset
503 .Case("pwr8", true)
anatofuz
parents:
diff changeset
504 .Default(false);
anatofuz
parents:
diff changeset
505 Features["bpermd"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
506 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
507 .Case("pwr9", true)
anatofuz
parents:
diff changeset
508 .Case("pwr8", true)
anatofuz
parents:
diff changeset
509 .Case("pwr7", true)
anatofuz
parents:
diff changeset
510 .Default(false);
anatofuz
parents:
diff changeset
511 Features["extdiv"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
512 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
513 .Case("pwr9", true)
anatofuz
parents:
diff changeset
514 .Case("pwr8", true)
anatofuz
parents:
diff changeset
515 .Case("pwr7", true)
anatofuz
parents:
diff changeset
516 .Default(false);
anatofuz
parents:
diff changeset
517 Features["direct-move"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
518 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
519 .Case("pwr9", true)
anatofuz
parents:
diff changeset
520 .Case("pwr8", true)
anatofuz
parents:
diff changeset
521 .Default(false);
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
522 Features["crbits"] = llvm::StringSwitch<bool>(CPU)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
523 .Case("ppc64le", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
524 .Case("pwr9", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
525 .Case("pwr8", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
526 .Default(false);
150
anatofuz
parents:
diff changeset
527 Features["vsx"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
528 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
529 .Case("pwr9", true)
anatofuz
parents:
diff changeset
530 .Case("pwr8", true)
anatofuz
parents:
diff changeset
531 .Case("pwr7", true)
anatofuz
parents:
diff changeset
532 .Default(false);
anatofuz
parents:
diff changeset
533 Features["htm"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
534 .Case("ppc64le", true)
anatofuz
parents:
diff changeset
535 .Case("pwr9", true)
anatofuz
parents:
diff changeset
536 .Case("pwr8", true)
anatofuz
parents:
diff changeset
537 .Default(false);
anatofuz
parents:
diff changeset
538
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
539 // ROP Protect is off by default.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
540 Features["rop-protect"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
541 // Privileged instructions are off by default.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
542 Features["privileged"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
543
150
anatofuz
parents:
diff changeset
544 Features["spe"] = llvm::StringSwitch<bool>(CPU)
anatofuz
parents:
diff changeset
545 .Case("8548", true)
anatofuz
parents:
diff changeset
546 .Case("e500", true)
anatofuz
parents:
diff changeset
547 .Default(false);
anatofuz
parents:
diff changeset
548
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
549 Features["isa-v206-instructions"] = llvm::StringSwitch<bool>(CPU)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
550 .Case("ppc64le", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
551 .Case("pwr9", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
552 .Case("pwr8", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
553 .Case("pwr7", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
554 .Case("a2", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
555 .Default(false);
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
556
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
557 Features["isa-v207-instructions"] = llvm::StringSwitch<bool>(CPU)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
558 .Case("ppc64le", true)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
559 .Case("pwr9", true)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
560 .Case("pwr8", true)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
561 .Default(false);
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
562
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
563 Features["isa-v30-instructions"] =
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
564 llvm::StringSwitch<bool>(CPU).Case("pwr9", true).Default(false);
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
565
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
566 Features["quadword-atomics"] =
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
567 getTriple().isArch64Bit() && llvm::StringSwitch<bool>(CPU)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
568 .Case("pwr9", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
569 .Case("pwr8", true)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
570 .Default(false);
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
571
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
572 // Power10 includes all the same features as Power9 plus any features specific
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
573 // to the Power10 core.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
574 if (CPU == "pwr10" || CPU == "power10") {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
575 initFeatureMap(Features, Diags, "pwr9", FeaturesVec);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
576 addP10SpecificFeatures(Features);
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
577 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
578
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
579 // Future CPU should include all of the features of Power 10 as well as any
150
anatofuz
parents:
diff changeset
580 // additional features (yet to be determined) specific to it.
anatofuz
parents:
diff changeset
581 if (CPU == "future") {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
582 initFeatureMap(Features, Diags, "pwr10", FeaturesVec);
150
anatofuz
parents:
diff changeset
583 addFutureSpecificFeatures(Features);
anatofuz
parents:
diff changeset
584 }
anatofuz
parents:
diff changeset
585
anatofuz
parents:
diff changeset
586 if (!ppcUserFeaturesCheck(Diags, FeaturesVec))
anatofuz
parents:
diff changeset
587 return false;
anatofuz
parents:
diff changeset
588
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
589 if (!(ArchDefs & ArchDefinePwr7) && (ArchDefs & ArchDefinePpcgr) &&
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
590 llvm::is_contained(FeaturesVec, "+float128")) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
591 // We have __float128 on PPC but not pre-VSX targets.
150
anatofuz
parents:
diff changeset
592 Diags.Report(diag::err_opt_not_valid_with_opt) << "-mfloat128" << CPU;
anatofuz
parents:
diff changeset
593 return false;
anatofuz
parents:
diff changeset
594 }
anatofuz
parents:
diff changeset
595
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
596 if (!(ArchDefs & ArchDefinePwr10)) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
597 if (llvm::is_contained(FeaturesVec, "+mma")) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
598 // MMA operations are not available pre-Power10.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
599 Diags.Report(diag::err_opt_not_valid_with_opt) << "-mmma" << CPU;
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
600 return false;
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
601 }
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
602 if (llvm::is_contained(FeaturesVec, "+pcrel")) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
603 // PC-Relative instructions are not available pre-Power10,
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
604 // and these instructions also require prefixed instructions support.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
605 Diags.Report(diag::err_opt_not_valid_without_opt)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
606 << "-mpcrel"
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
607 << "-mcpu=pwr10 -mprefixed";
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
608 return false;
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
609 }
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
610 if (llvm::is_contained(FeaturesVec, "+prefixed")) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
611 // Prefixed instructions are not available pre-Power10.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
612 Diags.Report(diag::err_opt_not_valid_without_opt) << "-mprefixed"
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
613 << "-mcpu=pwr10";
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
614 return false;
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
615 }
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
616 if (llvm::is_contained(FeaturesVec, "+paired-vector-memops")) {
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
617 // Paired vector memops are not available pre-Power10.
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
618 Diags.Report(diag::err_opt_not_valid_without_opt)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
619 << "-mpaired-vector-memops"
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
620 << "-mcpu=pwr10";
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
621 return false;
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
622 }
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
623 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
624
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
625 if (!(ArchDefs & ArchDefinePwr8) &&
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
626 llvm::is_contained(FeaturesVec, "+rop-protect")) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
627 // We can turn on ROP Protect on Power 8 and above.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
628 Diags.Report(diag::err_opt_not_valid_with_opt) << "-mrop-protect" << CPU;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
629 return false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
630 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
631
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
632 if (!(ArchDefs & ArchDefinePwr8) &&
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
633 llvm::is_contained(FeaturesVec, "+privileged")) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
634 Diags.Report(diag::err_opt_not_valid_with_opt) << "-mprivileged" << CPU;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
635 return false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
636 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
637
150
anatofuz
parents:
diff changeset
638 return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec);
anatofuz
parents:
diff changeset
639 }
anatofuz
parents:
diff changeset
640
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
641 // Add any Power10 specific features.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
642 void PPCTargetInfo::addP10SpecificFeatures(
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
643 llvm::StringMap<bool> &Features) const {
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
644 Features["htm"] = false; // HTM was removed for P10.
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
645 Features["paired-vector-memops"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
646 Features["mma"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
647 Features["power10-vector"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
648 Features["pcrelative-memops"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
649 Features["prefix-instrs"] = true;
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
650 Features["isa-v31-instructions"] = true;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
651 }
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
652
150
anatofuz
parents:
diff changeset
653 // Add features specific to the "Future" CPU.
anatofuz
parents:
diff changeset
654 void PPCTargetInfo::addFutureSpecificFeatures(
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
655 llvm::StringMap<bool> &Features) const {}
150
anatofuz
parents:
diff changeset
656
anatofuz
parents:
diff changeset
657 bool PPCTargetInfo::hasFeature(StringRef Feature) const {
anatofuz
parents:
diff changeset
658 return llvm::StringSwitch<bool>(Feature)
anatofuz
parents:
diff changeset
659 .Case("powerpc", true)
anatofuz
parents:
diff changeset
660 .Case("altivec", HasAltivec)
anatofuz
parents:
diff changeset
661 .Case("vsx", HasVSX)
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
662 .Case("crbits", UseCRBits)
150
anatofuz
parents:
diff changeset
663 .Case("power8-vector", HasP8Vector)
anatofuz
parents:
diff changeset
664 .Case("crypto", HasP8Crypto)
anatofuz
parents:
diff changeset
665 .Case("direct-move", HasDirectMove)
anatofuz
parents:
diff changeset
666 .Case("htm", HasHTM)
anatofuz
parents:
diff changeset
667 .Case("bpermd", HasBPERMD)
anatofuz
parents:
diff changeset
668 .Case("extdiv", HasExtDiv)
anatofuz
parents:
diff changeset
669 .Case("float128", HasFloat128)
anatofuz
parents:
diff changeset
670 .Case("power9-vector", HasP9Vector)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
671 .Case("paired-vector-memops", PairedVectorMemops)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
672 .Case("power10-vector", HasP10Vector)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
673 .Case("pcrelative-memops", HasPCRelativeMemops)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
674 .Case("prefix-instrs", HasPrefixInstrs)
150
anatofuz
parents:
diff changeset
675 .Case("spe", HasSPE)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
676 .Case("mma", HasMMA)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
677 .Case("rop-protect", HasROPProtect)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
678 .Case("privileged", HasPrivileged)
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
679 .Case("isa-v206-instructions", IsISA2_06)
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
680 .Case("isa-v207-instructions", IsISA2_07)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
681 .Case("isa-v30-instructions", IsISA3_0)
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
682 .Case("isa-v31-instructions", IsISA3_1)
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
683 .Case("quadword-atomics", HasQuadwordAtomics)
150
anatofuz
parents:
diff changeset
684 .Default(false);
anatofuz
parents:
diff changeset
685 }
anatofuz
parents:
diff changeset
686
anatofuz
parents:
diff changeset
687 void PPCTargetInfo::setFeatureEnabled(llvm::StringMap<bool> &Features,
anatofuz
parents:
diff changeset
688 StringRef Name, bool Enabled) const {
anatofuz
parents:
diff changeset
689 if (Enabled) {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
690 if (Name == "efpu2")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
691 Features["spe"] = true;
150
anatofuz
parents:
diff changeset
692 // If we're enabling any of the vsx based features then enable vsx and
anatofuz
parents:
diff changeset
693 // altivec. We'll diagnose any problems later.
anatofuz
parents:
diff changeset
694 bool FeatureHasVSX = llvm::StringSwitch<bool>(Name)
anatofuz
parents:
diff changeset
695 .Case("vsx", true)
anatofuz
parents:
diff changeset
696 .Case("direct-move", true)
anatofuz
parents:
diff changeset
697 .Case("power8-vector", true)
anatofuz
parents:
diff changeset
698 .Case("power9-vector", true)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
699 .Case("paired-vector-memops", true)
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
700 .Case("power10-vector", true)
150
anatofuz
parents:
diff changeset
701 .Case("float128", true)
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
702 .Case("mma", true)
150
anatofuz
parents:
diff changeset
703 .Default(false);
anatofuz
parents:
diff changeset
704 if (FeatureHasVSX)
anatofuz
parents:
diff changeset
705 Features["vsx"] = Features["altivec"] = true;
anatofuz
parents:
diff changeset
706 if (Name == "power9-vector")
anatofuz
parents:
diff changeset
707 Features["power8-vector"] = true;
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
708 else if (Name == "power10-vector")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
709 Features["power8-vector"] = Features["power9-vector"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
710 if (Name == "pcrel")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
711 Features["pcrelative-memops"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
712 else if (Name == "prefixed")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
713 Features["prefix-instrs"] = true;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
714 else
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
715 Features[Name] = true;
150
anatofuz
parents:
diff changeset
716 } else {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
717 if (Name == "spe")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
718 Features["efpu2"] = false;
150
anatofuz
parents:
diff changeset
719 // If we're disabling altivec or vsx go ahead and disable all of the vsx
anatofuz
parents:
diff changeset
720 // features.
anatofuz
parents:
diff changeset
721 if ((Name == "altivec") || (Name == "vsx"))
anatofuz
parents:
diff changeset
722 Features["vsx"] = Features["direct-move"] = Features["power8-vector"] =
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
723 Features["float128"] = Features["power9-vector"] =
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
724 Features["paired-vector-memops"] = Features["mma"] =
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
725 Features["power10-vector"] = false;
150
anatofuz
parents:
diff changeset
726 if (Name == "power8-vector")
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
727 Features["power9-vector"] = Features["paired-vector-memops"] =
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
728 Features["mma"] = Features["power10-vector"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
729 else if (Name == "power9-vector")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
730 Features["paired-vector-memops"] = Features["mma"] =
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
731 Features["power10-vector"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
732 if (Name == "pcrel")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
733 Features["pcrelative-memops"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
734 else if (Name == "prefixed")
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
735 Features["prefix-instrs"] = false;
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
736 else
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
737 Features[Name] = false;
150
anatofuz
parents:
diff changeset
738 }
anatofuz
parents:
diff changeset
739 }
anatofuz
parents:
diff changeset
740
anatofuz
parents:
diff changeset
741 const char *const PPCTargetInfo::GCCRegNames[] = {
anatofuz
parents:
diff changeset
742 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8",
anatofuz
parents:
diff changeset
743 "r9", "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17",
anatofuz
parents:
diff changeset
744 "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26",
anatofuz
parents:
diff changeset
745 "r27", "r28", "r29", "r30", "r31", "f0", "f1", "f2", "f3",
anatofuz
parents:
diff changeset
746 "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12",
anatofuz
parents:
diff changeset
747 "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21",
anatofuz
parents:
diff changeset
748 "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", "f30",
anatofuz
parents:
diff changeset
749 "f31", "mq", "lr", "ctr", "ap", "cr0", "cr1", "cr2", "cr3",
anatofuz
parents:
diff changeset
750 "cr4", "cr5", "cr6", "cr7", "xer", "v0", "v1", "v2", "v3",
anatofuz
parents:
diff changeset
751 "v4", "v5", "v6", "v7", "v8", "v9", "v10", "v11", "v12",
anatofuz
parents:
diff changeset
752 "v13", "v14", "v15", "v16", "v17", "v18", "v19", "v20", "v21",
anatofuz
parents:
diff changeset
753 "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30",
anatofuz
parents:
diff changeset
754 "v31", "vrsave", "vscr", "spe_acc", "spefscr", "sfp"
anatofuz
parents:
diff changeset
755 };
anatofuz
parents:
diff changeset
756
anatofuz
parents:
diff changeset
757 ArrayRef<const char *> PPCTargetInfo::getGCCRegNames() const {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
758 return llvm::ArrayRef(GCCRegNames);
150
anatofuz
parents:
diff changeset
759 }
anatofuz
parents:
diff changeset
760
anatofuz
parents:
diff changeset
761 const TargetInfo::GCCRegAlias PPCTargetInfo::GCCRegAliases[] = {
anatofuz
parents:
diff changeset
762 // While some of these aliases do map to different registers
anatofuz
parents:
diff changeset
763 // they still share the same register name.
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
764 {{"0"}, "r0"}, {{"1", "sp"}, "r1"}, {{"2"}, "r2"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
765 {{"3"}, "r3"}, {{"4"}, "r4"}, {{"5"}, "r5"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
766 {{"6"}, "r6"}, {{"7"}, "r7"}, {{"8"}, "r8"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
767 {{"9"}, "r9"}, {{"10"}, "r10"}, {{"11"}, "r11"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
768 {{"12"}, "r12"}, {{"13"}, "r13"}, {{"14"}, "r14"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
769 {{"15"}, "r15"}, {{"16"}, "r16"}, {{"17"}, "r17"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
770 {{"18"}, "r18"}, {{"19"}, "r19"}, {{"20"}, "r20"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
771 {{"21"}, "r21"}, {{"22"}, "r22"}, {{"23"}, "r23"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
772 {{"24"}, "r24"}, {{"25"}, "r25"}, {{"26"}, "r26"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
773 {{"27"}, "r27"}, {{"28"}, "r28"}, {{"29"}, "r29"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
774 {{"30"}, "r30"}, {{"31"}, "r31"}, {{"fr0"}, "f0"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
775 {{"fr1"}, "f1"}, {{"fr2"}, "f2"}, {{"fr3"}, "f3"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
776 {{"fr4"}, "f4"}, {{"fr5"}, "f5"}, {{"fr6"}, "f6"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
777 {{"fr7"}, "f7"}, {{"fr8"}, "f8"}, {{"fr9"}, "f9"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
778 {{"fr10"}, "f10"}, {{"fr11"}, "f11"}, {{"fr12"}, "f12"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
779 {{"fr13"}, "f13"}, {{"fr14"}, "f14"}, {{"fr15"}, "f15"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
780 {{"fr16"}, "f16"}, {{"fr17"}, "f17"}, {{"fr18"}, "f18"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
781 {{"fr19"}, "f19"}, {{"fr20"}, "f20"}, {{"fr21"}, "f21"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
782 {{"fr22"}, "f22"}, {{"fr23"}, "f23"}, {{"fr24"}, "f24"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
783 {{"fr25"}, "f25"}, {{"fr26"}, "f26"}, {{"fr27"}, "f27"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
784 {{"fr28"}, "f28"}, {{"fr29"}, "f29"}, {{"fr30"}, "f30"},
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
785 {{"fr31"}, "f31"}, {{"cc"}, "cr0"},
150
anatofuz
parents:
diff changeset
786 };
anatofuz
parents:
diff changeset
787
anatofuz
parents:
diff changeset
788 ArrayRef<TargetInfo::GCCRegAlias> PPCTargetInfo::getGCCRegAliases() const {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
789 return llvm::ArrayRef(GCCRegAliases);
150
anatofuz
parents:
diff changeset
790 }
anatofuz
parents:
diff changeset
791
anatofuz
parents:
diff changeset
792 // PPC ELFABIv2 DWARF Definitoin "Table 2.26. Mappings of Common Registers".
anatofuz
parents:
diff changeset
793 // vs0 ~ vs31 is mapping to 32 - 63,
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
794 // vs32 ~ vs63 is mapping to 77 - 108.
150
anatofuz
parents:
diff changeset
795 const TargetInfo::AddlRegName GCCAddlRegNames[] = {
anatofuz
parents:
diff changeset
796 // Table of additional register names to use in user input.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
797 {{"vs0"}, 32}, {{"vs1"}, 33}, {{"vs2"}, 34}, {{"vs3"}, 35},
150
anatofuz
parents:
diff changeset
798 {{"vs4"}, 36}, {{"vs5"}, 37}, {{"vs6"}, 38}, {{"vs7"}, 39},
anatofuz
parents:
diff changeset
799 {{"vs8"}, 40}, {{"vs9"}, 41}, {{"vs10"}, 42}, {{"vs11"}, 43},
anatofuz
parents:
diff changeset
800 {{"vs12"}, 44}, {{"vs13"}, 45}, {{"vs14"}, 46}, {{"vs15"}, 47},
anatofuz
parents:
diff changeset
801 {{"vs16"}, 48}, {{"vs17"}, 49}, {{"vs18"}, 50}, {{"vs19"}, 51},
anatofuz
parents:
diff changeset
802 {{"vs20"}, 52}, {{"vs21"}, 53}, {{"vs22"}, 54}, {{"vs23"}, 55},
anatofuz
parents:
diff changeset
803 {{"vs24"}, 56}, {{"vs25"}, 57}, {{"vs26"}, 58}, {{"vs27"}, 59},
anatofuz
parents:
diff changeset
804 {{"vs28"}, 60}, {{"vs29"}, 61}, {{"vs30"}, 62}, {{"vs31"}, 63},
anatofuz
parents:
diff changeset
805 {{"vs32"}, 77}, {{"vs33"}, 78}, {{"vs34"}, 79}, {{"vs35"}, 80},
anatofuz
parents:
diff changeset
806 {{"vs36"}, 81}, {{"vs37"}, 82}, {{"vs38"}, 83}, {{"vs39"}, 84},
anatofuz
parents:
diff changeset
807 {{"vs40"}, 85}, {{"vs41"}, 86}, {{"vs42"}, 87}, {{"vs43"}, 88},
anatofuz
parents:
diff changeset
808 {{"vs44"}, 89}, {{"vs45"}, 90}, {{"vs46"}, 91}, {{"vs47"}, 92},
anatofuz
parents:
diff changeset
809 {{"vs48"}, 93}, {{"vs49"}, 94}, {{"vs50"}, 95}, {{"vs51"}, 96},
anatofuz
parents:
diff changeset
810 {{"vs52"}, 97}, {{"vs53"}, 98}, {{"vs54"}, 99}, {{"vs55"}, 100},
anatofuz
parents:
diff changeset
811 {{"vs56"}, 101}, {{"vs57"}, 102}, {{"vs58"}, 103}, {{"vs59"}, 104},
anatofuz
parents:
diff changeset
812 {{"vs60"}, 105}, {{"vs61"}, 106}, {{"vs62"}, 107}, {{"vs63"}, 108},
anatofuz
parents:
diff changeset
813 };
anatofuz
parents:
diff changeset
814
anatofuz
parents:
diff changeset
815 ArrayRef<TargetInfo::AddlRegName> PPCTargetInfo::getGCCAddlRegNames() const {
anatofuz
parents:
diff changeset
816 if (ABI == "elfv2")
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
817 return llvm::ArrayRef(GCCAddlRegNames);
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
818 else
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
819 return TargetInfo::getGCCAddlRegNames();
150
anatofuz
parents:
diff changeset
820 }
anatofuz
parents:
diff changeset
821
anatofuz
parents:
diff changeset
822 static constexpr llvm::StringLiteral ValidCPUNames[] = {
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
823 {"generic"}, {"440"}, {"450"}, {"601"}, {"602"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
824 {"603"}, {"603e"}, {"603ev"}, {"604"}, {"604e"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
825 {"620"}, {"630"}, {"g3"}, {"7400"}, {"g4"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
826 {"7450"}, {"g4+"}, {"750"}, {"8548"}, {"970"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
827 {"g5"}, {"a2"}, {"e500"}, {"e500mc"}, {"e5500"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
828 {"power3"}, {"pwr3"}, {"power4"}, {"pwr4"}, {"power5"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
829 {"pwr5"}, {"power5x"}, {"pwr5x"}, {"power6"}, {"pwr6"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
830 {"power6x"}, {"pwr6x"}, {"power7"}, {"pwr7"}, {"power8"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
831 {"pwr8"}, {"power9"}, {"pwr9"}, {"power10"}, {"pwr10"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
832 {"powerpc"}, {"ppc"}, {"ppc32"}, {"powerpc64"}, {"ppc64"},
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
833 {"powerpc64le"}, {"ppc64le"}, {"future"}};
150
anatofuz
parents:
diff changeset
834
anatofuz
parents:
diff changeset
835 bool PPCTargetInfo::isValidCPUName(StringRef Name) const {
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
836 return llvm::is_contained(ValidCPUNames, Name);
150
anatofuz
parents:
diff changeset
837 }
anatofuz
parents:
diff changeset
838
anatofuz
parents:
diff changeset
839 void PPCTargetInfo::fillValidCPUList(SmallVectorImpl<StringRef> &Values) const {
anatofuz
parents:
diff changeset
840 Values.append(std::begin(ValidCPUNames), std::end(ValidCPUNames));
anatofuz
parents:
diff changeset
841 }
anatofuz
parents:
diff changeset
842
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
843 void PPCTargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {
150
anatofuz
parents:
diff changeset
844 if (HasAltivec)
anatofuz
parents:
diff changeset
845 Opts.AltiVec = 1;
223
5f17cb93ff66 LLVM13 (2021/7/18)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 221
diff changeset
846 TargetInfo::adjust(Diags, Opts);
150
anatofuz
parents:
diff changeset
847 if (LongDoubleFormat != &llvm::APFloat::IEEEdouble())
anatofuz
parents:
diff changeset
848 LongDoubleFormat = Opts.PPCIEEELongDouble
anatofuz
parents:
diff changeset
849 ? &llvm::APFloat::IEEEquad()
anatofuz
parents:
diff changeset
850 : &llvm::APFloat::PPCDoubleDouble();
221
79ff65ed7e25 LLVM12 Original
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 173
diff changeset
851 Opts.IEEE128 = 1;
236
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
852 if (getTriple().isOSAIX() && Opts.EnableAIXQuadwordAtomicsABI &&
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
853 HasQuadwordAtomics)
c4bab56944e8 LLVM 16
kono
parents: 232
diff changeset
854 MaxAtomicInlineWidth = 128;
150
anatofuz
parents:
diff changeset
855 }
anatofuz
parents:
diff changeset
856
anatofuz
parents:
diff changeset
857 ArrayRef<Builtin::Info> PPCTargetInfo::getTargetBuiltins() const {
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
858 return llvm::ArrayRef(BuiltinInfo,
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 236
diff changeset
859 clang::PPC::LastTSBuiltin - Builtin::FirstTSBuiltin);
150
anatofuz
parents:
diff changeset
860 }