[mips] Define macros related to -mabicalls in the preprocessor
Summary: Historically, NetBSD, FreeBSD and OpenBSD have defined the macro ABICALLS in the preprocessor when -mabicalls is in effect. Mainline GCC later defined __mips_abicalls when -mabicalls is in effect. This patch teaches the preprocessor to define these macros when appropriate. NetBSD does not require the ABICALLS macro. This resolves PR/31694. Thanks to Sean Bruno for highlighting this issue! Reviewers: slthakur, seanbruno Reviewed By: seanbruno Subscribers: joerg, brad, emaste, seanbruno, cfe-commits Differential Revision: https://reviews.llvm.org/D29032 llvm-svn: 295728
This commit is contained in:
parent
78ef645f94
commit
df827a7165
|
@ -7464,6 +7464,8 @@ class MipsTargetInfo : public TargetInfo {
|
|||
bool IsMicromips;
|
||||
bool IsNan2008;
|
||||
bool IsSingleFloat;
|
||||
bool IsNoABICalls;
|
||||
bool CanUseBSDABICalls;
|
||||
enum MipsFloatABI {
|
||||
HardFloat, SoftFloat
|
||||
} FloatABI;
|
||||
|
@ -7479,8 +7481,9 @@ protected:
|
|||
public:
|
||||
MipsTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
|
||||
: TargetInfo(Triple), IsMips16(false), IsMicromips(false),
|
||||
IsNan2008(false), IsSingleFloat(false), FloatABI(HardFloat),
|
||||
DspRev(NoDSP), HasMSA(false), HasFP64(false) {
|
||||
IsNan2008(false), IsSingleFloat(false), IsNoABICalls(false),
|
||||
CanUseBSDABICalls(false), FloatABI(HardFloat), DspRev(NoDSP),
|
||||
HasMSA(false), HasFP64(false) {
|
||||
TheCXXABI.set(TargetCXXABI::GenericMIPS);
|
||||
|
||||
setABI((getTriple().getArch() == llvm::Triple::mips ||
|
||||
|
@ -7489,6 +7492,9 @@ public:
|
|||
: "n64");
|
||||
|
||||
CPU = ABI == "o32" ? "mips32r2" : "mips64r2";
|
||||
|
||||
CanUseBSDABICalls = Triple.getOS() == llvm::Triple::FreeBSD ||
|
||||
Triple.getOS() == llvm::Triple::OpenBSD;
|
||||
}
|
||||
|
||||
bool isNaN2008Default() const {
|
||||
|
@ -7669,6 +7675,12 @@ public:
|
|||
} else
|
||||
llvm_unreachable("Invalid ABI.");
|
||||
|
||||
if (!IsNoABICalls) {
|
||||
Builder.defineMacro("__mips_abicalls");
|
||||
if (CanUseBSDABICalls)
|
||||
Builder.defineMacro("__ABICALLS__");
|
||||
}
|
||||
|
||||
Builder.defineMacro("__REGISTER_PREFIX__", "");
|
||||
|
||||
switch (FloatABI) {
|
||||
|
@ -7883,6 +7895,8 @@ public:
|
|||
IsNan2008 = true;
|
||||
else if (Feature == "-nan2008")
|
||||
IsNan2008 = false;
|
||||
else if (Feature == "+noabicalls")
|
||||
IsNoABICalls = true;
|
||||
}
|
||||
|
||||
setDataLayout();
|
||||
|
|
|
@ -3040,6 +3040,7 @@
|
|||
// MIPS32BE:#define __llvm__ 1
|
||||
// MIPS32BE:#define __mips 32
|
||||
// MIPS32BE:#define __mips__ 1
|
||||
// MIPS32BE:#define __mips_abicalls 1
|
||||
// MIPS32BE:#define __mips_fpr 32
|
||||
// MIPS32BE:#define __mips_hard_float 1
|
||||
// MIPS32BE:#define __mips_o32 1
|
||||
|
@ -3246,6 +3247,7 @@
|
|||
// MIPS32EL:#define __llvm__ 1
|
||||
// MIPS32EL:#define __mips 32
|
||||
// MIPS32EL:#define __mips__ 1
|
||||
// MIPS32EL:#define __mips_abicalls 1
|
||||
// MIPS32EL:#define __mips_fpr 32
|
||||
// MIPS32EL:#define __mips_hard_float 1
|
||||
// MIPS32EL:#define __mips_o32 1
|
||||
|
@ -3555,6 +3557,7 @@
|
|||
// MIPSN32BE: #define __mips64 1
|
||||
// MIPSN32BE: #define __mips64__ 1
|
||||
// MIPSN32BE: #define __mips__ 1
|
||||
// MIPSN32BE: #define __mips_abicalls 1
|
||||
// MIPSN32BE: #define __mips_fpr 64
|
||||
// MIPSN32BE: #define __mips_hard_float 1
|
||||
// MIPSN32BE: #define __mips_isa_rev 2
|
||||
|
@ -3861,6 +3864,7 @@
|
|||
// MIPSN32EL: #define __mips64 1
|
||||
// MIPSN32EL: #define __mips64__ 1
|
||||
// MIPSN32EL: #define __mips__ 1
|
||||
// MIPSN32EL: #define __mips_abicalls 1
|
||||
// MIPSN32EL: #define __mips_fpr 64
|
||||
// MIPSN32EL: #define __mips_hard_float 1
|
||||
// MIPSN32EL: #define __mips_isa_rev 2
|
||||
|
@ -4073,6 +4077,7 @@
|
|||
// MIPS64BE:#define __mips64 1
|
||||
// MIPS64BE:#define __mips64__ 1
|
||||
// MIPS64BE:#define __mips__ 1
|
||||
// MIPS64BE:#define __mips_abicalls 1
|
||||
// MIPS64BE:#define __mips_fpr 64
|
||||
// MIPS64BE:#define __mips_hard_float 1
|
||||
// MIPS64BE:#define __mips_n64 1
|
||||
|
@ -4282,6 +4287,7 @@
|
|||
// MIPS64EL:#define __mips64 1
|
||||
// MIPS64EL:#define __mips64__ 1
|
||||
// MIPS64EL:#define __mips__ 1
|
||||
// MIPS64EL:#define __mips_abicalls 1
|
||||
// MIPS64EL:#define __mips_fpr 64
|
||||
// MIPS64EL:#define __mips_hard_float 1
|
||||
// MIPS64EL:#define __mips_n64 1
|
||||
|
@ -4513,6 +4519,45 @@
|
|||
// MIPS-XXR6:#define __mips_fpr 64
|
||||
// MIPS-XXR6:#define __mips_nan2008 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips32 \
|
||||
// RUN: -E -dM -triple=mips-unknown-netbsd -mrelocation-model pic < /dev/null \
|
||||
// RUN: | FileCheck -match-full-lines -check-prefix MIPS-ABICALLS-NETBSD %s
|
||||
// MIPS-ABICALLS-NETBSD-NOT: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-NETBSD: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips64 \
|
||||
// RUN: -E -dM -triple=mips64-unknown-netbsd -mrelocation-model pic < \
|
||||
// RUN: /dev/null | FileCheck -match-full-lines \
|
||||
// RUN: -check-prefix MIPS-ABICALLS-NETBSD64 %s
|
||||
// MIPS-ABICALLS-NETBSD64-NOT: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-NETBSD64: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips32 \
|
||||
// RUN: -E -dM -triple=mips-unknown-freebsd -mrelocation-model pic < /dev/null \
|
||||
// RUN: | FileCheck -match-full-lines -check-prefix MIPS-ABICALLS-FREEBSD %s
|
||||
// MIPS-ABICALLS-FREEBSD: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-FREEBSD: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips64 \
|
||||
// RUN: -E -dM -triple=mips64-unknown-freebsd -mrelocation-model pic < \
|
||||
// RUN: /dev/null | FileCheck -match-full-lines \
|
||||
// RUN: -check-prefix MIPS-ABICALLS-FREEBSD64 %s
|
||||
// MIPS-ABICALLS-FREEBSD64: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-FREEBSD64: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips32 \
|
||||
// RUN: -E -dM -triple=mips-unknown-openbsd -mrelocation-model pic < /dev/null \
|
||||
// RUN: | FileCheck -match-full-lines -check-prefix MIPS-ABICALLS-OPENBSD %s
|
||||
// MIPS-ABICALLS-OPENBSD: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-OPENBSD: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -target-cpu mips64 \
|
||||
// RUN: -E -dM -triple=mips64-unknown-openbsd -mrelocation-model pic < \
|
||||
// RUN: /dev/null | FileCheck -match-full-lines \
|
||||
// RUN: -check-prefix MIPS-ABICALLS-OPENBSD64 %s
|
||||
// MIPS-ABICALLS-OPENBSD64: #define __ABICALLS__ 1
|
||||
// MIPS-ABICALLS-OPENBSD64: #define __mips_abicalls 1
|
||||
//
|
||||
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=msp430-none-none < /dev/null | FileCheck -match-full-lines -check-prefix MSP430 %s
|
||||
// RUN: %clang_cc1 -x c++ -E -dM -ffreestanding -triple=msp430-none-none < /dev/null | FileCheck -match-full-lines -check-prefix MSP430 -check-prefix MSP430-CXX %s
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue