;
24#define BUILTIN(ID, TYPE, ATTRS) \ 25 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 26#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) \ 27 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::HEADER, ALL_LANGUAGES}, 28#include "clang/Basic/BuiltinsMips.def" 32 returnllvm::StringSwitch<bool>(CPU)
33.Case(
"mips3",
true)
34.Case(
"mips4",
true)
35.Case(
"mips5",
true)
36.Case(
"mips64",
true)
37.Case(
"mips64r2",
true)
38.Case(
"mips64r3",
true)
39.Case(
"mips64r5",
true)
40.Case(
"mips64r6",
true)
41.Case(
"octeon",
true)
42.Case(
"octeon+",
true)
47{
"mips1"}, {
"mips2"}, {
"mips3"}, {
"mips4"}, {
"mips5"},
48{
"mips32"}, {
"mips32r2"}, {
"mips32r3"}, {
"mips32r5"}, {
"mips32r6"},
49{
"mips64"}, {
"mips64r2"}, {
"mips64r3"}, {
"mips64r5"}, {
"mips64r6"},
50{
"octeon"}, {
"octeon+"}, {
"p5600"}};
62 returnllvm::StringSwitch<unsigned>(
getCPU())
63.Cases(
"mips32",
"mips64", 1)
64.Cases(
"mips32r2",
"mips64r2",
"octeon",
"octeon+", 2)
65.Cases(
"mips32r3",
"mips64r3", 3)
66.Cases(
"mips32r5",
"mips64r5", 5)
67.Cases(
"mips32r6",
"mips64r6", 6)
75Builder.defineMacro(
"_MIPSEB");
78Builder.defineMacro(
"_MIPSEL");
81Builder.defineMacro(
"__mips__");
82Builder.defineMacro(
"_mips");
84Builder.defineMacro(
"mips");
87Builder.defineMacro(
"__mips",
"32");
88Builder.defineMacro(
"_MIPS_ISA",
"_MIPS_ISA_MIPS32");
90Builder.defineMacro(
"__mips",
"64");
91Builder.defineMacro(
"__mips64");
92Builder.defineMacro(
"__mips64__");
93Builder.defineMacro(
"_MIPS_ISA",
"_MIPS_ISA_MIPS64");
96 conststd::string ISARev = std::to_string(
getISARev());
99Builder.defineMacro(
"__mips_isa_rev", ISARev);
101 if(
ABI==
"o32") {
102Builder.defineMacro(
"__mips_o32");
103Builder.defineMacro(
"_ABIO32",
"1");
104Builder.defineMacro(
"_MIPS_SIM",
"_ABIO32");
105}
else if(
ABI==
"n32") {
106Builder.defineMacro(
"__mips_n32");
107Builder.defineMacro(
"_ABIN32",
"2");
108Builder.defineMacro(
"_MIPS_SIM",
"_ABIN32");
109}
else if(
ABI==
"n64") {
110Builder.defineMacro(
"__mips_n64");
111Builder.defineMacro(
"_ABI64",
"3");
112Builder.defineMacro(
"_MIPS_SIM",
"_ABI64");
114llvm_unreachable(
"Invalid ABI.");
117Builder.defineMacro(
"__mips_abicalls");
118 if(CanUseBSDABICalls)
119Builder.defineMacro(
"__ABICALLS__");
122Builder.defineMacro(
"__REGISTER_PREFIX__",
"");
126Builder.defineMacro(
"__mips_hard_float", Twine(1));
129Builder.defineMacro(
"__mips_soft_float", Twine(1));
134Builder.defineMacro(
"__mips_single_float", Twine(1));
138Builder.defineMacro(
"__mips_fpr", Twine(0));
141Builder.defineMacro(
"__mips_fpr", Twine(32));
144Builder.defineMacro(
"__mips_fpr", Twine(64));
149Builder.defineMacro(
"_MIPS_FPSET", Twine(32));
151Builder.defineMacro(
"_MIPS_FPSET", Twine(16));
153Builder.defineMacro(
"_MIPS_SPFPSET", Twine(16));
155Builder.defineMacro(
"_MIPS_SPFPSET", Twine(32));
158Builder.defineMacro(
"__mips16", Twine(1));
161Builder.defineMacro(
"__mips_micromips", Twine(1));
164Builder.defineMacro(
"__mips_nan2008", Twine(1));
167Builder.defineMacro(
"__mips_abs2008", Twine(1));
173Builder.defineMacro(
"__mips_dsp_rev", Twine(1));
174Builder.defineMacro(
"__mips_dsp", Twine(1));
177Builder.defineMacro(
"__mips_dsp_rev", Twine(2));
178Builder.defineMacro(
"__mips_dspr2", Twine(1));
179Builder.defineMacro(
"__mips_dsp", Twine(1));
184Builder.defineMacro(
"__mips_msa", Twine(1));
187Builder.defineMacro(
"__mips_no_madd4", Twine(1));
190Builder.defineMacro(
"_MIPS_SZINT", Twine(
getIntWidth()));
191Builder.defineMacro(
"_MIPS_SZLONG", Twine(
getLongWidth()));
193Builder.defineMacro(
"_MIPS_ARCH",
"\""+ CPU +
"\"");
194 if(CPU ==
"octeon+")
195Builder.defineMacro(
"_MIPS_ARCH_OCTEONP");
197Builder.defineMacro(
"_MIPS_ARCH_"+ StringRef(CPU).upper());
199 if(StringRef(CPU).starts_with(
"octeon"))
200Builder.defineMacro(
"__OCTEON__");
202 if(CPU !=
"mips1") {
203Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
204Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
205Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
212 if(
ABI==
"n32"||
ABI==
"n64")
213Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
217 returnllvm::StringSwitch<bool>(Feature)
218.Case(
"mips",
true)
219.Case(
"dsp", DspRev >= DSP1)
220.Case(
"dspr2", DspRev >= DSP2)
222.Case(
"msa", HasMSA)
232 returnllvm::StringSwitch<unsigned>(
ABI)
241 if(
getTriple().isMIPS64() && IsMicromips && (
ABI==
"n32"||
ABI==
"n64")) {
242Diags.
Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;
248Diags.
Report(diag::err_target_unsupported_abi) <<
ABI<< CPU;
254Diags.
Report(diag::err_unsupported_abi_for_opt) <<
"-mfpxx"<<
"o32";
260(
ABI==
"n32"||
ABI==
"n64")) {
261Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-mfpxx"<< CPU;
266CPU ==
"mips64r6")) {
267Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-mfp32"<< CPU;
271 if(
FPMode==
FP64&& (CPU ==
"mips1"|| CPU ==
"mips2"||
273Diags.
Report(diag::err_mips_fp64_req) <<
"-mfp64";
278Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-mfpxx"<< CPU;
282 if(FloatABI == SoftFloat && HasMSA) {
283Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-msoft-float" 288 if(HasMSA && (CPU ==
"mips1"|| CPU ==
"mips2"||
getISARev() < 2) &&
290Diags.
Report(diag::err_mips_fp64_req) <<
"-mmsa";
295Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-mfpxx" 300Diags.
Report(diag::err_opt_not_valid_with_opt) <<
"-mfp32" 314Builder.defineMacro(
"_M_MRX000",
"4000");
346TheCXXABI.set(TargetCXXABI::Microsoft);
358TheCXXABI.set(TargetCXXABI::GenericMIPS);
364Builder.defineMacro(
"_MIPS_");
Defines the Diagnostic-related interfaces.
static constexpr llvm::StringLiteral ValidCPUNames[]
static constexpr Builtin::Info BuiltinInfo[]
static constexpr Builtin::Info BuiltinInfo[]
Defines the clang::MacroBuilder utility class.
Enumerates target-specific builtins in their own namespaces within namespace clang.
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
@ CharPtrBuiltinVaList
typedef char* __builtin_va_list;
uint64_t getPointerWidth(LangAS AddrSpace) const
Return the width of pointers on this target, for the specified address space.
unsigned getIntWidth() const
getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for this target,...
unsigned getLongWidth() const
getLongWidth/Align - Return the size of 'signed long' and 'unsigned long' for this target,...
Options for controlling the target.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MicrosoftMipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
MinGWMipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-â Other target property query methods -----------------------â===//
enum clang::targets::MipsTargetInfo::FPModeEnum FPMode
void fillValidCPUList(SmallVectorImpl< StringRef > &Values) const override
Fill a SmallVectorImpl with the valid values to setCPU.
bool processorSupportsGPR64() const
unsigned getUnwindWordWidth() const override
ArrayRef< Builtin::Info > getTargetBuiltins() const override
Return information about target-specific builtins for the current primary target, and info about whic...
bool isValidCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name.
unsigned getISARev() const
bool hasFeature(StringRef Feature) const override
Determine whether the given target has the given feature.
bool validateTarget(DiagnosticsEngine &Diags) const override
Check the target is valid after it is fully initialized.
const std::string & getCPU() const
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
void getVisualStudioDefines(const LangOptions &Opts, MacroBuilder &Builder) const
WindowsMipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
BuiltinVaListKind getBuiltinVaListKind() const override
LLVM_LIBRARY_VISIBILITY void DefineStd(clang::MacroBuilder &Builder, llvm::StringRef MacroName, const clang::LangOptions &Opts)
Define a macro name and standard variants.
The JSON file list parser is used to communicate input to InstallAPI.
CallingConv
CallingConv - Specifies the calling convention that a function uses.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4