Pull in r371066 from upstream clang trunk (by Justin Hibbits):
Add -m(no)-spe to clang Summary: r337347 added support for the Signal Processing Engine (SPE) to LLVM. This follows that up with the clang side. This adds -mspe and -mno-spe, to match GCC. Subscribers: nemanjai, kbarton, cfe-commits Differential Revision: https://reviews.llvm.org/D49754
This commit is contained in:
parent
2ee8a62f0f
commit
7dfde55afd
@ -2241,6 +2241,8 @@ def faltivec : Flag<["-"], "faltivec">, Group<f_Group>, Flags<[DriverOption]>;
|
||||
def fno_altivec : Flag<["-"], "fno-altivec">, Group<f_Group>, Flags<[DriverOption]>;
|
||||
def maltivec : Flag<["-"], "maltivec">, Group<m_ppc_Features_Group>;
|
||||
def mno_altivec : Flag<["-"], "mno-altivec">, Group<m_ppc_Features_Group>;
|
||||
def mspe : Flag<["-"], "mspe">, Group<m_ppc_Features_Group>;
|
||||
def mno_spe : Flag<["-"], "mno-spe">, Group<m_ppc_Features_Group>;
|
||||
def mvsx : Flag<["-"], "mvsx">, Group<m_ppc_Features_Group>;
|
||||
def mno_vsx : Flag<["-"], "mno-vsx">, Group<m_ppc_Features_Group>;
|
||||
def msecure_plt : Flag<["-"], "msecure-plt">, Group<m_ppc_Features_Group>;
|
||||
|
@ -54,6 +54,10 @@ bool PPCTargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
|
||||
HasFloat128 = true;
|
||||
} else if (Feature == "+power9-vector") {
|
||||
HasP9Vector = true;
|
||||
} else if (Feature == "+spe") {
|
||||
HasSPE = true;
|
||||
LongDoubleWidth = LongDoubleAlign = 64;
|
||||
LongDoubleFormat = &llvm::APFloat::IEEEdouble();
|
||||
} else if (Feature == "-hard-float") {
|
||||
FloatABI = SoftFloat;
|
||||
}
|
||||
@ -165,6 +169,10 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
Builder.defineMacro("__VEC__", "10206");
|
||||
Builder.defineMacro("__ALTIVEC__");
|
||||
}
|
||||
if (HasSPE) {
|
||||
Builder.defineMacro("__SPE__");
|
||||
Builder.defineMacro("__NO_FPRS__");
|
||||
}
|
||||
if (HasVSX)
|
||||
Builder.defineMacro("__VSX__");
|
||||
if (HasP8Vector)
|
||||
@ -203,7 +211,6 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
// __CMODEL_LARGE__
|
||||
// _CALL_SYSV
|
||||
// _CALL_DARWIN
|
||||
// __NO_FPRS__
|
||||
}
|
||||
|
||||
// Handle explicit options being passed to the compiler here: if we've
|
||||
@ -332,6 +339,7 @@ bool PPCTargetInfo::hasFeature(StringRef Feature) const {
|
||||
.Case("extdiv", HasExtDiv)
|
||||
.Case("float128", HasFloat128)
|
||||
.Case("power9-vector", HasP9Vector)
|
||||
.Case("spe", HasSPE)
|
||||
.Default(false);
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,7 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetInfo : public TargetInfo {
|
||||
bool HasBPERMD = false;
|
||||
bool HasExtDiv = false;
|
||||
bool HasP9Vector = false;
|
||||
bool HasSPE = false;
|
||||
|
||||
protected:
|
||||
std::string ABI;
|
||||
|
@ -9716,7 +9716,8 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
|
||||
|
||||
case llvm::Triple::ppc:
|
||||
return SetCGInfo(
|
||||
new PPC32TargetCodeGenInfo(Types, CodeGenOpts.FloatABI == "soft"));
|
||||
new PPC32TargetCodeGenInfo(Types, CodeGenOpts.FloatABI == "soft" ||
|
||||
getTarget().hasFeature("spe")));
|
||||
case llvm::Triple::ppc64:
|
||||
if (Triple.isOSBinFormatELF()) {
|
||||
PPC64_SVR4_ABIInfo::ABIKind Kind = PPC64_SVR4_ABIInfo::ELFv1;
|
||||
|
Loading…
Reference in New Issue
Block a user