1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
--- origsrc/llvm-3.5.1.src/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 2014-07-17 11:27:40.000000000 -0500
+++ src/llvm-3.5.1.src/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.cpp 2015-04-30 23:57:03.440469200 -0500
@@ -340,7 +340,8 @@ static MCCodeGenInfo *createX86MCCodeGen
// For static codegen, if we're not already set, use Small codegen.
if (CM == CodeModel::Default)
- CM = CodeModel::Small;
+ CM = T.isWindowsCygwinEnvironment() && is64Bit ? CodeModel::Medium
+ : CodeModel::Small;
else if (CM == CodeModel::JITDefault)
// 64-bit JIT places everything in the same buffer except external funcs.
CM = is64Bit ? CodeModel::Large : CodeModel::Small;
--- origsrc/llvm-3.5.1.src/tools/clang/lib/Basic/Targets.cpp 2014-08-08 17:59:37.000000000 -0500
+++ src/llvm-3.5.1.src/tools/clang/lib/Basic/Targets.cpp 2015-05-01 00:03:14.734617600 -0500
@@ -3203,6 +3203,7 @@ public:
Builder.defineMacro("_X86_");
Builder.defineMacro("__CYGWIN__");
Builder.defineMacro("__CYGWIN32__");
+ Builder.defineMacro("__declspec(a)", "__attribute__((a))");
DefineStd(Builder, "unix", Opts);
if (Opts.CPlusPlus)
Builder.defineMacro("_GNU_SOURCE");
@@ -3409,6 +3410,35 @@ public:
} // end anonymous namespace
namespace {
+// x86-64 Cygwin target
+class CygwinX86_64TargetInfo : public X86_64TargetInfo {
+public:
+ CygwinX86_64TargetInfo(const llvm::Triple &Triple)
+ : X86_64TargetInfo(Triple) {
+ TLSSupported = false;
+ WCharType = UnsignedShort;
+ }
+ virtual void getTargetDefines(const LangOptions &Opts,
+ MacroBuilder &Builder) const {
+ X86_64TargetInfo::getTargetDefines(Opts, Builder);
+ Builder.defineMacro("__CYGWIN__");
+ Builder.defineMacro("__declspec(a)", "__attribute__((a))");
+ DefineStd(Builder, "unix", Opts);
+ if (Opts.CPlusPlus)
+ Builder.defineMacro("_GNU_SOURCE");
+ }
+ virtual BuiltinVaListKind getBuiltinVaListKind() const {
+ return TargetInfo::CharPtrBuiltinVaList;
+ }
+ virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const {
+ return (CC == CC_C ||
+ CC == CC_IntelOclBicc ||
+ CC == CC_X86_64SysV) ? CCCR_OK : CCCR_Warning;
+ }
+};
+} // end anonymous namespace
+
+namespace {
class DarwinX86_64TargetInfo : public DarwinTargetInfo<X86_64TargetInfo> {
public:
DarwinX86_64TargetInfo(const llvm::Triple &Triple)
@@ -6357,6 +6387,8 @@ static TargetInfo *AllocateTarget(const
switch (Triple.getEnvironment()) {
default:
return new X86_64TargetInfo(Triple);
+ case llvm::Triple::Cygnus:
+ return new CygwinX86_64TargetInfo(Triple);
case llvm::Triple::GNU:
return new MinGWX86_64TargetInfo(Triple);
case llvm::Triple::MSVC:
|