[cfe-commits] r50049 - /cfe/trunk/lib/Basic/Targets.cpp
Chris Lattner
sabre at nondot.org
Mon Apr 21 11:56:50 PDT 2008
Author: lattner
Date: Mon Apr 21 13:56:49 2008
New Revision: 50049
URL: http://llvm.org/viewvc/llvm-project?rev=50049&view=rev
Log:
add arm support
Modified:
cfe/trunk/lib/Basic/Targets.cpp
Modified: cfe/trunk/lib/Basic/Targets.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=50049&r1=50048&r2=50049&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/Targets.cpp (original)
+++ cfe/trunk/lib/Basic/Targets.cpp Mon Apr 21 13:56:49 2008
@@ -295,6 +295,84 @@
Define(Defs, "__LDBL_MIN__", "3.36210314311209350626e-4932L");
}
+/// getX86Defines - Return a set of the X86-specific #defines that are
+/// not tied to a specific subtarget.
+static void getARMDefines(std::vector<char> &Defs) {
+ // Target identification.
+ Define(Defs, "__arm");
+ Define(Defs, "__arm__");
+
+ // Target properties.
+ Define(Defs, "__LITTLE_ENDIAN__");
+
+ Define(Defs, "__INTMAX_MAX__", "9223372036854775807LL");
+ Define(Defs, "__INTMAX_TYPE__", "long long int");
+ Define(Defs, "__LONG_MAX__", "2147483647L");
+ Define(Defs, "__PTRDIFF_TYPE__", "int");
+ Define(Defs, "__UINTMAX_TYPE__", "long long unsigned int");
+ Define(Defs, "__SIZE_TYPE__", "long unsigned int");
+
+ Define(Defs, "__CHAR_BIT__", "8");
+ Define(Defs, "__INT_MAX__", "2147483647");
+ Define(Defs, "__LONG_LONG_MAX__", "9223372036854775807LL");
+ Define(Defs, "__SCHAR_MAX__", "127");
+ Define(Defs, "__SHRT_MAX__", "32767");
+
+ // Subtarget options. [hard coded to v6 for now]
+ Define(Defs, "__ARM_ARCH_6K__");
+ Define(Defs, "__ARMEL__");
+ Define(Defs, "__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__", "20000");
+
+ Define(Defs, "__WCHAR_MAX__", "2147483647");
+ Define(Defs, "__WCHAR_TYPE__", "int");
+ Define(Defs, "__WINT_TYPE__", "int");
+ Define(Defs, "__DECIMAL_DIG__", "17");
+ Define(Defs, "__FLT_RADIX__", "2");
+
+ // Float macros.
+ Define(Defs, "__FLT_DENORM_MIN__", "1.40129846e-45F");
+ Define(Defs, "__FLT_DIG__", "6");
+ Define(Defs, "__FLT_EPSILON__", "1.19209290e-7F");
+ Define(Defs, "__FLT_EVAL_METHOD__", "0");
+ Define(Defs, "__FLT_HAS_INFINITY__");
+ Define(Defs, "__FLT_HAS_QUIET_NAN__");
+ Define(Defs, "__FLT_MANT_DIG__", "24");
+ Define(Defs, "__FLT_MAX_10_EXP__", "38");
+ Define(Defs, "__FLT_MAX_EXP__", "128");
+ Define(Defs, "__FLT_MAX__", "3.40282347e+38F");
+ Define(Defs, "__FLT_MIN_10_EXP__", "(-37)");
+ Define(Defs, "__FLT_MIN_EXP__", "(-125)");
+ Define(Defs, "__FLT_MIN__", "1.17549435e-38F");
+
+ // Double macros.
+ Define(Defs, "__DBL_DENORM_MIN__", "4.9406564584124654e-324");
+ Define(Defs, "__DBL_DIG__", "15");
+ Define(Defs, "__DBL_EPSILON__", "2.2204460492503131e-16");
+ Define(Defs, "__DBL_HAS_INFINITY__");
+ Define(Defs, "__DBL_HAS_QUIET_NAN__");
+ Define(Defs, "__DBL_MANT_DIG__", "53");
+ Define(Defs, "__DBL_MAX_10_EXP__", "308");
+ Define(Defs, "__DBL_MAX_EXP__", "1024");
+ Define(Defs, "__DBL_MAX__", "1.7976931348623157e+308");
+ Define(Defs, "__DBL_MIN_10_EXP__", "(-307)");
+ Define(Defs, "__DBL_MIN_EXP__", "(-1021)");
+ Define(Defs, "__DBL_MIN__", "2.2250738585072014e-308");
+
+ // 64-bit Long double macros (same as double).
+ Define(Defs, "__LDBL_DENORM_MIN__", "4.9406564584124654e-324");
+ Define(Defs, "__LDBL_DIG__", "15");
+ Define(Defs, "__LDBL_EPSILON__", "2.2204460492503131e-16");
+ Define(Defs, "__LDBL_HAS_INFINITY__");
+ Define(Defs, "__LDBL_HAS_QUIET_NAN__");
+ Define(Defs, "__LDBL_MANT_DIG__", "53");
+ Define(Defs, "__LDBL_MAX_10_EXP__", "308");
+ Define(Defs, "__LDBL_MAX_EXP__", "1024");
+ Define(Defs, "__LDBL_MAX__", "1.7976931348623157e+308");
+ Define(Defs, "__LDBL_MIN_10_EXP__", "(-307)");
+ Define(Defs, "__LDBL_MIN_EXP__", "(-1021)");
+ Define(Defs, "__LDBL_MIN__", "2.2250738585072014e-308");
+}
+
static const char* getI386VAListDeclaration() {
return "typedef char* __builtin_va_list;";
}
@@ -320,6 +398,9 @@
"} __builtin_va_list[1];";
}
+static const char* getARMVAListDeclaration() {
+ return "typedef char* __builtin_va_list;";
+}
/// PPC builtin info.
namespace clang {
@@ -521,6 +602,15 @@
}
} // End namespace X86
+
+
+/// ARM builtin info.
+namespace ARM {
+ const char *getTargetPrefix() {
+ return "arm";
+ }
+} // End namespace ARM
+
} // end namespace clang.
//===----------------------------------------------------------------------===//
@@ -684,6 +774,45 @@
};
} // end anonymous namespace.
+
+namespace {
+class DarwinARMTargetInfo : public DarwinTargetInfo {
+public:
+ DarwinARMTargetInfo(const std::string& triple) :DarwinTargetInfo(triple) {}
+
+ virtual void getTargetDefines(std::vector<char> &Defines) const {
+ DarwinTargetInfo::getTargetDefines(Defines);
+ getARMDefines(Defines);
+ }
+ virtual void getTargetBuiltins(const Builtin::Info *&Records,
+ unsigned &NumRecords) const {
+ NumRecords = 0;
+ }
+ virtual const char *getVAListDeclaration() const {
+ return getARMVAListDeclaration();
+ }
+ virtual const char *getTargetPrefix() const {
+ return ARM::getTargetPrefix();
+ }
+
+ virtual void getGCCRegNames(const char * const *&Names,
+ unsigned &NumNames) const {
+ NumNames = 0;
+ }
+ virtual void getGCCRegAliases(const GCCRegAlias *&Aliases,
+ unsigned &NumAliases) const {
+ NumAliases = 0;
+ }
+ virtual bool validateAsmConstraint(char c,
+ TargetInfo::ConstraintInfo &Info) const {
+ return false;
+ }
+ virtual const char *getClobbers() const {
+ return "";
+ }
+};
+} // end anonymous namespace.
+
namespace {
class SolarisSparcV8TargetInfo : public SolarisTargetInfo {
public:
@@ -743,6 +872,9 @@
if (T.find("ppc64-") == 0 || T.find("powerpc64-") == 0)
return new DarwinPPC64TargetInfo(T);
+ if (T.find("armv6-") == 0 || T.find("arm-") == 0)
+ return new DarwinARMTargetInfo(T);
+
if (T.find("sparc-") == 0)
return new SolarisSparcV8TargetInfo(T); // ugly hack
More information about the cfe-commits
mailing list