//===--- Targets.cpp - Implement -arch option and targets -----------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements construction of a TargetInfo object from a
// target triple.
//
//===----------------------------------------------------------------------===//
#include "clang/AST/Builtins.h"
#include "clang/AST/TargetBuiltins.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/APFloat.h"
using namespace clang;
//===----------------------------------------------------------------------===//
// Common code shared among targets.
//===----------------------------------------------------------------------===//
static void Define(std::vector<char> &Buf, const char *Macro,
const char *Val = "1") {
const char *Def = "#define ";
Buf.insert(Buf.end(), Def, Def+strlen(Def));
Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
Buf.push_back(' ');
Buf.insert(Buf.end(), Val, Val+strlen(Val));
Buf.push_back('\n');
}
static void getSolarisDefines(std::vector<char> &Defs) {
Define(Defs, "__SUN__");
Define(Defs, "__SOLARIS__");
}
static void getDarwinDefines(std::vector<char> &Defs) {
Define(Defs, "__APPLE__");
Define(Defs, "__MACH__");
if (0) // darwin_pascal_strings
Define(Defs, "__PASCAL_STRINGS__");
}
/// getPowerPCDefines - Return a set of the PowerPC-specific #defines that are
/// not tied to a specific subtarget.
static void getPowerPCDefines(std::vector<char> &Defs, bool is64Bit) {
// Target identification.
Define(Defs, "__ppc__");
Define(Defs, "_ARCH_PPC");
Define(Defs, "__POWERPC__");
if (is64Bit) {
Define(Defs, "_ARCH_PPC64");
Define(Defs, "_LP64");
Define(Defs, "__LP64__");
Define(Defs, "__ppc64__");
} else {
Define(Defs, "__ppc__");
}
// Target properties.
Define(Defs, "_BIG_ENDIAN");
Define(Defs, "__BIG_ENDIAN__");
if (is64Bit) {
Define(Defs, "__INTMAX_MAX__", "9223372036854775807L");
Define(Defs, "__INTMAX_TYPE__", "long int");
Define(Defs, "__LONG_MAX__", "9223372036854775807L");
Define(Defs, "__PTRDIFF_TYPE__", "long int");
Define(Defs, "__UINTMAX_TYPE__", "long unsigned int");
} else {
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, "__INT_MAX__", "2147483647");
Define(Defs, "__LONG_LONG_MAX__", "9223372036854775807LL");
Define(Defs, "__CHAR_BIT__", "8");
Define(Defs, "__SCHAR_MAX__", "127");
Define(Defs, "__SHRT_MAX__", "32767");
Define(Defs, "__SIZE_TYPE__", "long unsigned int");
// Subtarget options.
Define(Defs, "__USER_LABEL_PREFIX__", "_");
Define(Defs, "__NATURAL_ALIGNMENT__");
Define(Defs, "__REGISTER_PREFIX__", "");
Define(Defs, "__WCHAR_MAX__", "2147483647");
Define(Defs, "__WCHAR_TYPE__", "int");
Define(Defs, "__WINT_TYPE__", "int");
// 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");
Define(Defs, "__FLT_RADIX__", "2");
// 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)");
Defin