From: Alex Rosenberg Date: Tue, 27 Jan 2015 14:47:44 +0000 (+0000) Subject: Begin to teach clang about the PS4. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dea8d33a7246fc7371b7db308fc218286dfd2675;p=clang Begin to teach clang about the PS4. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227194 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index c6c890d5d9..2030e38c04 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -525,6 +525,33 @@ public: } }; +template +class PS4OSTargetInfo : public OSTargetInfo { +protected: + void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, + MacroBuilder &Builder) const override { + Builder.defineMacro("__FreeBSD__", "9"); + Builder.defineMacro("__FreeBSD_cc_version", "900001"); + Builder.defineMacro("__KPRINTF_ATTRIBUTE__"); + DefineStd(Builder, "unix", Opts); + Builder.defineMacro("__ELF__"); + Builder.defineMacro("__PS4__"); + } +public: + PS4OSTargetInfo(const llvm::Triple &Triple) : OSTargetInfo(Triple) { + this->WCharType = this->UnsignedShort; + + this->UserLabelPrefix = ""; + + switch (Triple.getArch()) { + default: + case llvm::Triple::x86_64: + this->MCountName = ".mcount"; + break; + } + } +}; + // Solaris target template class SolarisTargetInfo : public OSTargetInfo { @@ -6813,6 +6840,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { } case llvm::Triple::NaCl: return new NaClTargetInfo(Triple); + case llvm::Triple::PS4: + return new PS4OSTargetInfo(Triple); default: return new X86_64TargetInfo(Triple); } diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 93dd6dbb0f..25d7d57bad 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -1601,6 +1601,18 @@ public: } }; +class PS4TargetCodeGenInfo : public X86_64TargetCodeGenInfo { +public: + PS4TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool HasAVX) + : X86_64TargetCodeGenInfo(CGT, HasAVX) {} + + void getDependentLibraryOption(llvm::StringRef Lib, + llvm::SmallString<24> &Opt) const { + Opt = "\01"; + Opt += Lib; + } +}; + static std::string qualifyWindowsLibrary(llvm::StringRef Lib) { // If the argument does not end in .lib, automatically add the suffix. This // matches the behavior of MSVC. @@ -7225,6 +7237,8 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() { case llvm::Triple::NaCl: return *(TheTargetCodeGenInfo = new NaClX86_64TargetCodeGenInfo(Types, HasAVX)); + case llvm::Triple::PS4: + return *(TheTargetCodeGenInfo = new PS4TargetCodeGenInfo(Types, HasAVX)); default: return *(TheTargetCodeGenInfo = new X86_64TargetCodeGenInfo(Types, HasAVX)); diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index f3a1ba5d67..8829f3d335 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -7649,6 +7649,120 @@ // X86_64-NETBSD:#define __x86_64 1 // X86_64-NETBSD:#define __x86_64__ 1 // +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=x86_64-scei-ps4 < /dev/null | FileCheck -check-prefix PS4 %s +// +// PS4:#define _LP64 1 +// PS4:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +// PS4:#define __CHAR16_TYPE__ unsigned short +// PS4:#define __CHAR32_TYPE__ unsigned int +// PS4:#define __CHAR_BIT__ 8 +// PS4:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324 +// PS4:#define __DBL_DIG__ 15 +// PS4:#define __DBL_EPSILON__ 2.2204460492503131e-16 +// PS4:#define __DBL_HAS_DENORM__ 1 +// PS4:#define __DBL_HAS_INFINITY__ 1 +// PS4:#define __DBL_HAS_QUIET_NAN__ 1 +// PS4:#define __DBL_MANT_DIG__ 53 +// PS4:#define __DBL_MAX_10_EXP__ 308 +// PS4:#define __DBL_MAX_EXP__ 1024 +// PS4:#define __DBL_MAX__ 1.7976931348623157e+308 +// PS4:#define __DBL_MIN_10_EXP__ (-307) +// PS4:#define __DBL_MIN_EXP__ (-1021) +// PS4:#define __DBL_MIN__ 2.2250738585072014e-308 +// PS4:#define __DECIMAL_DIG__ 21 +// PS4:#define __ELF__ 1 +// PS4:#define __FLT_DENORM_MIN__ 1.40129846e-45F +// PS4:#define __FLT_DIG__ 6 +// PS4:#define __FLT_EPSILON__ 1.19209290e-7F +// PS4:#define __FLT_EVAL_METHOD__ 0 +// PS4:#define __FLT_HAS_DENORM__ 1 +// PS4:#define __FLT_HAS_INFINITY__ 1 +// PS4:#define __FLT_HAS_QUIET_NAN__ 1 +// PS4:#define __FLT_MANT_DIG__ 24 +// PS4:#define __FLT_MAX_10_EXP__ 38 +// PS4:#define __FLT_MAX_EXP__ 128 +// PS4:#define __FLT_MAX__ 3.40282347e+38F +// PS4:#define __FLT_MIN_10_EXP__ (-37) +// PS4:#define __FLT_MIN_EXP__ (-125) +// PS4:#define __FLT_MIN__ 1.17549435e-38F +// PS4:#define __FLT_RADIX__ 2 +// PS4:#define __FreeBSD__ 9 +// PS4:#define __FreeBSD_cc_version 900001 +// PS4:#define __INT16_TYPE__ short +// PS4:#define __INT32_TYPE__ int +// PS4:#define __INT64_C_SUFFIX__ L +// PS4:#define __INT64_TYPE__ long int +// PS4:#define __INT8_TYPE__ signed char +// PS4:#define __INTMAX_MAX__ 9223372036854775807L +// PS4:#define __INTMAX_TYPE__ long int +// PS4:#define __INTMAX_WIDTH__ 64 +// PS4:#define __INTPTR_TYPE__ long int +// PS4:#define __INTPTR_WIDTH__ 64 +// PS4:#define __INT_MAX__ 2147483647 +// PS4:#define __KPRINTF_ATTRIBUTE__ 1 +// PS4:#define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L +// PS4:#define __LDBL_DIG__ 18 +// PS4:#define __LDBL_EPSILON__ 1.08420217248550443401e-19L +// PS4:#define __LDBL_HAS_DENORM__ 1 +// PS4:#define __LDBL_HAS_INFINITY__ 1 +// PS4:#define __LDBL_HAS_QUIET_NAN__ 1 +// PS4:#define __LDBL_MANT_DIG__ 64 +// PS4:#define __LDBL_MAX_10_EXP__ 4932 +// PS4:#define __LDBL_MAX_EXP__ 16384 +// PS4:#define __LDBL_MAX__ 1.18973149535723176502e+4932L +// PS4:#define __LDBL_MIN_10_EXP__ (-4931) +// PS4:#define __LDBL_MIN_EXP__ (-16381) +// PS4:#define __LDBL_MIN__ 3.36210314311209350626e-4932L +// PS4:#define __LITTLE_ENDIAN__ 1 +// PS4:#define __LONG_LONG_MAX__ 9223372036854775807LL +// PS4:#define __LONG_MAX__ 9223372036854775807L +// PS4:#define __LP64__ 1 +// PS4:#define __MMX__ 1 +// PS4:#define __NO_MATH_INLINES 1 +// PS4:#define __POINTER_WIDTH__ 64 +// PS4:#define __PS4__ 1 +// PS4:#define __PTRDIFF_MAX__ 9223372036854775807L +// PS4:#define __PTRDIFF_TYPE__ long int +// PS4:#define __PTRDIFF_WIDTH__ 64 +// PS4:#define __REGISTER_PREFIX__ +// PS4:#define __SCHAR_MAX__ 127 +// PS4:#define __SHRT_MAX__ 32767 +// PS4:#define __SIG_ATOMIC_MAX__ 2147483647 +// PS4:#define __SIG_ATOMIC_WIDTH__ 32 +// PS4:#define __SIZEOF_DOUBLE__ 8 +// PS4:#define __SIZEOF_FLOAT__ 4 +// PS4:#define __SIZEOF_INT__ 4 +// PS4:#define __SIZEOF_LONG_DOUBLE__ 16 +// PS4:#define __SIZEOF_LONG_LONG__ 8 +// PS4:#define __SIZEOF_LONG__ 8 +// PS4:#define __SIZEOF_POINTER__ 8 +// PS4:#define __SIZEOF_PTRDIFF_T__ 8 +// PS4:#define __SIZEOF_SHORT__ 2 +// PS4:#define __SIZEOF_SIZE_T__ 8 +// PS4:#define __SIZEOF_WCHAR_T__ 2 +// PS4:#define __SIZEOF_WINT_T__ 4 +// PS4:#define __SIZE_TYPE__ long unsigned int +// PS4:#define __SIZE_WIDTH__ 64 +// PS4:#define __SSE2_MATH__ 1 +// PS4:#define __SSE2__ 1 +// PS4:#define __SSE_MATH__ 1 +// PS4:#define __SSE__ 1 +// PS4:#define __UINTMAX_TYPE__ long unsigned int +// PS4:#define __USER_LABEL_PREFIX__ +// PS4:#define __WCHAR_MAX__ 65535 +// PS4:#define __WCHAR_TYPE__ unsigned short +// PS4:#define __WCHAR_UNSIGNED__ 1 +// PS4:#define __WCHAR_WIDTH__ 16 +// PS4:#define __WINT_TYPE__ int +// PS4:#define __WINT_WIDTH__ 32 +// PS4:#define __amd64 1 +// PS4:#define __amd64__ 1 +// PS4:#define __unix 1 +// PS4:#define __unix__ 1 +// PS4:#define __x86_64 1 +// PS4:#define __x86_64__ 1 +// end SCE_PRIVATE +// // RUN: %clang_cc1 -E -dM -ffreestanding -triple=sparc64-none-none < /dev/null | FileCheck -check-prefix SPARCV9 %s // SPARCV9:#define __INT64_TYPE__ long int // SPARCV9:#define __INTMAX_C_SUFFIX__ L