summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
authorEric Christopher <echristo@apple.com>2010-03-02 02:41:08 +0000
committerEric Christopher <echristo@apple.com>2010-03-02 02:41:08 +0000
commit0b26a616ebf064e0b9d12c0b68bb66a641a16031 (patch)
tree86a26c05e5012994e90a10427fcbd3f0b5675688 /clang/lib/Basic/Targets.cpp
parent036aa49d2e95dc3217a2c4ae45ee97ba57687df0 (diff)
downloadbcm5719-llvm-0b26a616ebf064e0b9d12c0b68bb66a641a16031.tar.gz
bcm5719-llvm-0b26a616ebf064e0b9d12c0b68bb66a641a16031.zip
Add in some more MIPS command line options.
Patch by Oleksandr Tymoshenko! llvm-svn: 97544
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r--clang/lib/Basic/Targets.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index e11e5c08dc0..b8fe53599b5 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -1924,13 +1924,39 @@ namespace {
namespace {
class MipsTargetInfo : public TargetInfo {
+ std::string ABI, CPU;
static const TargetInfo::GCCRegAlias GCCRegAliases[];
static const char * const GCCRegNames[];
public:
- MipsTargetInfo(const std::string& triple) : TargetInfo(triple) {
+ MipsTargetInfo(const std::string& triple) : TargetInfo(triple), ABI("o32") {
DescriptionString = "E-p:32:32:32-i1:8:8-i8:8:32-i16:16:32-i32:32:32-"
"i64:32:64-f32:32:32-f64:64:64-v64:64:64-n32";
}
+ virtual const char *getABI() const { return ABI.c_str(); }
+ virtual bool setABI(const std::string &Name) {
+
+ if ((Name == "o32") || (Name == "eabi")) {
+ ABI = Name;
+ return true;
+ } else
+ return false;
+ }
+ virtual bool setCPU(const std::string &Name) {
+ CPU = Name;
+ return true;
+ }
+ void getDefaultFeatures(const std::string &CPU,
+ llvm::StringMap<bool> &Features) const {
+ Features[ABI] = true;
+ Features[CPU] = true;
+ }
+ virtual void getArchDefines(const LangOptions &Opts,
+ MacroBuilder &Builder) const {
+ if (ABI == "o32")
+ Builder.defineMacro("__mips_o32");
+ else if (ABI == "eabi")
+ Builder.defineMacro("__mips_eabi");
+ }
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const {
DefineStd(Builder, "mips", Opts);
@@ -1938,6 +1964,7 @@ public:
DefineStd(Builder, "MIPSEB", Opts);
Builder.defineMacro("_MIPSEB");
Builder.defineMacro("__REGISTER_PREFIX__", "");
+ getArchDefines(Opts, Builder);
}
virtual void getTargetBuiltins(const Builtin::Info *&Records,
unsigned &NumRecords) const {
@@ -2049,6 +2076,7 @@ void MipselTargetInfo::getTargetDefines(const LangOptions &Opts,
DefineStd(Builder, "MIPSEL", Opts);
Builder.defineMacro("_MIPSEL");
Builder.defineMacro("__REGISTER_PREFIX__", "");
+ getArchDefines(Opts, Builder);
}
} // end anonymous namespace.
OpenPOWER on IntegriCloud