llvm-toolchain/debian/patches/mips/mips-fpxx-enable.diff
2022-04-07 13:29:24 +02:00

63 lines
3.0 KiB
Diff

Index: llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/clang/lib/Driver/ToolChains/Arch/Mips.cpp
===================================================================
--- llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487.orig/clang/lib/Driver/ToolChains/Arch/Mips.cpp
+++ llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/clang/lib/Driver/ToolChains/Arch/Mips.cpp
@@ -467,10 +467,10 @@ bool mips::isFP64ADefault(const llvm::Tr
bool mips::isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName,
StringRef ABIName, mips::FloatABI FloatABI) {
- if (Triple.getVendor() != llvm::Triple::ImaginationTechnologies &&
+/* if (Triple.getVendor() != llvm::Triple::ImaginationTechnologies &&
Triple.getVendor() != llvm::Triple::MipsTechnologies &&
!Triple.isAndroid())
- return false;
+ return false;*/
if (ABIName != "32")
return false;
Index: llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/llvm/lib/Target/Mips/MipsSubtarget.cpp
===================================================================
--- llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487.orig/llvm/lib/Target/Mips/MipsSubtarget.cpp
+++ llvm-toolchain-snapshot_15~++20220407011631+46f0e2ceb487/llvm/lib/Target/Mips/MipsSubtarget.cpp
@@ -81,7 +81,7 @@ MipsSubtarget::MipsSubtarget(const Tripl
InMips16HardFloat(Mips16HardFloat), InMicroMipsMode(false), HasDSP(false),
HasDSPR2(false), HasDSPR3(false), AllowMixed16_32(Mixed16_32 || Mips_Os16),
Os16(Mips_Os16), HasMSA(false), UseTCCInDIV(false), HasSym32(false),
- HasEVA(false), DisableMadd4(false), HasMT(false), HasCRC(false),
+ HasEVA(false), DisableMadd4(true), HasMT(false), HasCRC(false),
HasVirt(false), HasGINV(false), UseIndirectJumpsHazard(false),
StackAlignOverride(StackAlignOverride), TM(TM), TargetTriple(TT),
TSInfo(), InstrInfo(MipsInstrInfo::create(
@@ -92,6 +92,9 @@ MipsSubtarget::MipsSubtarget(const Tripl
if (MipsArchVersion == MipsDefault)
MipsArchVersion = Mips32;
+ if (hasMips32r6() || hasMips64r6())
+ DisableMadd4 = false;
+
// MIPS-I has not been tested.
if (MipsArchVersion == Mips1 && !MIPS1WarningPrinted) {
errs() << "warning: MIPS-I support is experimental\n";
@@ -243,6 +246,7 @@ MipsSubtarget &
MipsSubtarget::initializeSubtargetDependencies(StringRef CPU, StringRef FS,
const TargetMachine &TM) {
StringRef CPUName = MIPS_MC::selectMipsCPU(TM.getTargetTriple(), CPU);
+ SubtargetFeatures Features(FS);
// Parse features string.
ParseSubtargetFeatures(CPUName, /*TuneCPU*/ CPUName, FS);
@@ -265,6 +269,13 @@ MipsSubtarget::initializeSubtargetDepend
report_fatal_error("64-bit code requested on a subtarget that doesn't "
"support it!");
+ for (const std::string &Feature : Features.getFeatures()) {
+ if (Feature == "+nomadd4")
+ DisableMadd4 = true;
+ else if (Feature == "-nomadd4")
+ DisableMadd4 = false;
+ }
+
return *this;
}