Changeset View
Changeset View
Standalone View
Standalone View
lib/Basic/Targets.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 7,428 Lines • ▼ Show 20 Lines | class MipsTargetInfo : public TargetInfo { | ||||
static const Builtin::Info BuiltinInfo[]; | static const Builtin::Info BuiltinInfo[]; | ||||
std::string CPU; | std::string CPU; | ||||
bool IsMips16; | bool IsMips16; | ||||
bool IsMicromips; | bool IsMicromips; | ||||
bool IsNan2008; | bool IsNan2008; | ||||
bool IsSingleFloat; | bool IsSingleFloat; | ||||
bool IsNoABICalls; | |||||
bool CanUseBSDABICalls; | |||||
enum MipsFloatABI { | enum MipsFloatABI { | ||||
HardFloat, SoftFloat | HardFloat, SoftFloat | ||||
} FloatABI; | } FloatABI; | ||||
enum DspRevEnum { | enum DspRevEnum { | ||||
NoDSP, DSP1, DSP2 | NoDSP, DSP1, DSP2 | ||||
} DspRev; | } DspRev; | ||||
bool HasMSA; | bool HasMSA; | ||||
protected: | protected: | ||||
bool HasFP64; | bool HasFP64; | ||||
std::string ABI; | std::string ABI; | ||||
public: | public: | ||||
MipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &) | MipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &) | ||||
: TargetInfo(Triple), IsMips16(false), IsMicromips(false), | : TargetInfo(Triple), IsMips16(false), IsMicromips(false), | ||||
IsNan2008(false), IsSingleFloat(false), FloatABI(HardFloat), | IsNan2008(false), IsSingleFloat(false), IsNoABICalls(false), | ||||
DspRev(NoDSP), HasMSA(false), HasFP64(false) { | CanUseBSDABICalls(false), FloatABI(HardFloat), DspRev(NoDSP), | ||||
HasMSA(false), HasFP64(false) { | |||||
TheCXXABI.set(TargetCXXABI::GenericMIPS); | TheCXXABI.set(TargetCXXABI::GenericMIPS); | ||||
setABI((getTriple().getArch() == llvm::Triple::mips || | setABI((getTriple().getArch() == llvm::Triple::mips || | ||||
getTriple().getArch() == llvm::Triple::mipsel) | getTriple().getArch() == llvm::Triple::mipsel) | ||||
? "o32" | ? "o32" | ||||
: "n64"); | : "n64"); | ||||
CPU = ABI == "o32" ? "mips32r2" : "mips64r2"; | CPU = ABI == "o32" ? "mips32r2" : "mips64r2"; | ||||
CanUseBSDABICalls = Triple.getOS() == llvm::Triple::FreeBSD || | |||||
Triple.getOS() == llvm::Triple::NetBSD || | |||||
Triple.getOS() == llvm::Triple::OpenBSD; | |||||
} | } | ||||
bool isNaN2008Default() const { | bool isNaN2008Default() const { | ||||
return CPU == "mips32r6" || CPU == "mips64r6"; | return CPU == "mips32r6" || CPU == "mips64r6"; | ||||
} | } | ||||
bool isFP64Default() const { | bool isFP64Default() const { | ||||
return CPU == "mips32r6" || ABI == "n32" || ABI == "n64" || ABI == "64"; | return CPU == "mips32r6" || ABI == "n32" || ABI == "n64" || ABI == "64"; | ||||
▲ Show 20 Lines • Show All 164 Lines • ▼ Show 20 Lines | if (ABI == "o32") { | ||||
Builder.defineMacro("_MIPS_SIM", "_ABIN32"); | Builder.defineMacro("_MIPS_SIM", "_ABIN32"); | ||||
} else if (ABI == "n64") { | } else if (ABI == "n64") { | ||||
Builder.defineMacro("__mips_n64"); | Builder.defineMacro("__mips_n64"); | ||||
Builder.defineMacro("_ABI64", "3"); | Builder.defineMacro("_ABI64", "3"); | ||||
Builder.defineMacro("_MIPS_SIM", "_ABI64"); | Builder.defineMacro("_MIPS_SIM", "_ABI64"); | ||||
} else | } else | ||||
llvm_unreachable("Invalid ABI."); | llvm_unreachable("Invalid ABI."); | ||||
if (!IsNoABICalls) { | |||||
if (CanUseBSDABICalls) | |||||
Builder.defineMacro("__ABICALLS__"); | |||||
else | |||||
Builder.defineMacro("__mips_abicalls"); | |||||
} | |||||
Builder.defineMacro("__REGISTER_PREFIX__", ""); | Builder.defineMacro("__REGISTER_PREFIX__", ""); | ||||
switch (FloatABI) { | switch (FloatABI) { | ||||
case HardFloat: | case HardFloat: | ||||
Builder.defineMacro("__mips_hard_float", Twine(1)); | Builder.defineMacro("__mips_hard_float", Twine(1)); | ||||
break; | break; | ||||
case SoftFloat: | case SoftFloat: | ||||
Builder.defineMacro("__mips_soft_float", Twine(1)); | Builder.defineMacro("__mips_soft_float", Twine(1)); | ||||
▲ Show 20 Lines • Show All 198 Lines • ▼ Show 20 Lines | for (const auto &Feature : Features) { | ||||
else if (Feature == "+fp64") | else if (Feature == "+fp64") | ||||
HasFP64 = true; | HasFP64 = true; | ||||
else if (Feature == "-fp64") | else if (Feature == "-fp64") | ||||
HasFP64 = false; | HasFP64 = false; | ||||
else if (Feature == "+nan2008") | else if (Feature == "+nan2008") | ||||
IsNan2008 = true; | IsNan2008 = true; | ||||
else if (Feature == "-nan2008") | else if (Feature == "-nan2008") | ||||
IsNan2008 = false; | IsNan2008 = false; | ||||
else if (Feature == "+noabicalls") | |||||
IsNoABICalls = true; | |||||
} | } | ||||
setDataLayout(); | setDataLayout(); | ||||
return true; | return true; | ||||
} | } | ||||
int getEHDataRegisterNumber(unsigned RegNo) const override { | int getEHDataRegisterNumber(unsigned RegNo) const override { | ||||
▲ Show 20 Lines • Show All 1,188 Lines • Show Last 20 Lines |