| OLD | NEW |
| 1 //===--- Targets.cpp - Implement -arch option and targets -----------------===// | 1 //===--- Targets.cpp - Implement -arch option and targets -----------------===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This file implements construction of a TargetInfo object from a | 10 // This file implements construction of a TargetInfo object from a |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 } | 583 } |
| 584 | 584 |
| 585 Builder.defineMacro("_INTEGRAL_MAX_BITS", "64"); | 585 Builder.defineMacro("_INTEGRAL_MAX_BITS", "64"); |
| 586 } | 586 } |
| 587 | 587 |
| 588 public: | 588 public: |
| 589 WindowsTargetInfo(const std::string &triple) | 589 WindowsTargetInfo(const std::string &triple) |
| 590 : OSTargetInfo<Target>(triple) {} | 590 : OSTargetInfo<Target>(triple) {} |
| 591 }; | 591 }; |
| 592 | 592 |
| 593 template <typename Target> |
| 594 class NaClTargetInfo : public OSTargetInfo<Target> { |
| 595 protected: |
| 596 virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, |
| 597 MacroBuilder &Builder) const { |
| 598 if (Opts.POSIXThreads) |
| 599 Builder.defineMacro("_REENTRANT"); |
| 600 if (Opts.CPlusPlus) |
| 601 Builder.defineMacro("_GNU_SOURCE"); |
| 602 |
| 603 DefineStd(Builder, "unix", Opts); |
| 604 Builder.defineMacro("__ELF__"); |
| 605 Builder.defineMacro("__native_client__"); |
| 606 } |
| 607 public: |
| 608 NaClTargetInfo(const std::string &triple) |
| 609 : OSTargetInfo<Target>(triple) { |
| 610 this->UserLabelPrefix = ""; |
| 611 this->LongAlign = 32; |
| 612 this->LongWidth = 32; |
| 613 this->PointerAlign = 32; |
| 614 this->PointerWidth = 32; |
| 615 this->IntMaxType = TargetInfo::SignedLongLong; |
| 616 this->UIntMaxType = TargetInfo::UnsignedLongLong; |
| 617 this->Int64Type = TargetInfo::SignedLongLong; |
| 618 this->DoubleAlign = 64; |
| 619 this->LongDoubleWidth = 64; |
| 620 this->LongDoubleAlign = 64; |
| 621 this->SizeType = TargetInfo::UnsignedInt; |
| 622 this->PtrDiffType = TargetInfo::SignedInt; |
| 623 this->IntPtrType = TargetInfo::SignedInt; |
| 624 this->RegParmMax = 2; |
| 625 this->LongDoubleFormat = &llvm::APFloat::IEEEdouble; |
| 626 this->DescriptionString = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-" |
| 627 "f32:32:32-f64:64:64-p:32:32:32-v128:32:32"; |
| 628 } |
| 629 }; |
| 593 } // end anonymous namespace. | 630 } // end anonymous namespace. |
| 594 | 631 |
| 595 //===----------------------------------------------------------------------===// | 632 //===----------------------------------------------------------------------===// |
| 596 // Specific target implementations. | 633 // Specific target implementations. |
| 597 //===----------------------------------------------------------------------===// | 634 //===----------------------------------------------------------------------===// |
| 598 | 635 |
| 599 namespace { | 636 namespace { |
| 600 // PPC abstract base class | 637 // PPC abstract base class |
| 601 class PPCTargetInfo : public TargetInfo { | 638 class PPCTargetInfo : public TargetInfo { |
| 602 static const Builtin::Info BuiltinInfo[]; | 639 static const Builtin::Info BuiltinInfo[]; |
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1542 } | 1579 } |
| 1543 virtual void getTargetDefines(const LangOptions &Opts, | 1580 virtual void getTargetDefines(const LangOptions &Opts, |
| 1544 MacroBuilder &Builder) const; | 1581 MacroBuilder &Builder) const; |
| 1545 virtual bool setFeatureEnabled(llvm::StringMap<bool> &Features, | 1582 virtual bool setFeatureEnabled(llvm::StringMap<bool> &Features, |
| 1546 StringRef Name, | 1583 StringRef Name, |
| 1547 bool Enabled) const; | 1584 bool Enabled) const; |
| 1548 virtual void getDefaultFeatures(llvm::StringMap<bool> &Features) const; | 1585 virtual void getDefaultFeatures(llvm::StringMap<bool> &Features) const; |
| 1549 virtual bool hasFeature(StringRef Feature) const; | 1586 virtual bool hasFeature(StringRef Feature) const; |
| 1550 virtual void HandleTargetFeatures(std::vector<std::string> &Features); | 1587 virtual void HandleTargetFeatures(std::vector<std::string> &Features); |
| 1551 virtual const char* getABI() const { | 1588 virtual const char* getABI() const { |
| 1552 if (PointerWidth == 64 && SSELevel >= AVX) | 1589 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX) |
| 1553 return "avx"; | 1590 return "avx"; |
| 1554 else if (PointerWidth == 32 && MMX3DNowLevel == NoMMX3DNow) | 1591 else if (getTriple().getArch() == llvm::Triple::x86 && |
| 1592 MMX3DNowLevel == NoMMX3DNow) |
| 1555 return "no-mmx"; | 1593 return "no-mmx"; |
| 1556 return ""; | 1594 return ""; |
| 1557 } | 1595 } |
| 1558 virtual bool setCPU(const std::string &Name) { | 1596 virtual bool setCPU(const std::string &Name) { |
| 1559 CPU = llvm::StringSwitch<CPUKind>(Name) | 1597 CPU = llvm::StringSwitch<CPUKind>(Name) |
| 1560 .Case("i386", CK_i386) | 1598 .Case("i386", CK_i386) |
| 1561 .Case("i486", CK_i486) | 1599 .Case("i486", CK_i486) |
| 1562 .Case("winchip-c6", CK_WinChipC6) | 1600 .Case("winchip-c6", CK_WinChipC6) |
| 1563 .Case("winchip2", CK_WinChip2) | 1601 .Case("winchip2", CK_WinChip2) |
| 1564 .Case("c3", CK_C3) | 1602 .Case("c3", CK_C3) |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1638 case CK_K6: | 1676 case CK_K6: |
| 1639 case CK_K6_2: | 1677 case CK_K6_2: |
| 1640 case CK_K6_3: | 1678 case CK_K6_3: |
| 1641 case CK_Athlon: | 1679 case CK_Athlon: |
| 1642 case CK_AthlonThunderbird: | 1680 case CK_AthlonThunderbird: |
| 1643 case CK_Athlon4: | 1681 case CK_Athlon4: |
| 1644 case CK_AthlonXP: | 1682 case CK_AthlonXP: |
| 1645 case CK_AthlonMP: | 1683 case CK_AthlonMP: |
| 1646 case CK_Geode: | 1684 case CK_Geode: |
| 1647 // Only accept certain architectures when compiling in 32-bit mode. | 1685 // Only accept certain architectures when compiling in 32-bit mode. |
| 1648 if (PointerWidth != 32) | 1686 if (getTriple().getArch() != llvm::Triple::x86) |
| 1649 return false; | 1687 return false; |
| 1650 | 1688 |
| 1651 // Fallthrough | 1689 // Fallthrough |
| 1652 case CK_Nocona: | 1690 case CK_Nocona: |
| 1653 case CK_Core2: | 1691 case CK_Core2: |
| 1654 case CK_Penryn: | 1692 case CK_Penryn: |
| 1655 case CK_Atom: | 1693 case CK_Atom: |
| 1656 case CK_Corei7: | 1694 case CK_Corei7: |
| 1657 case CK_Corei7AVX: | 1695 case CK_Corei7AVX: |
| 1658 case CK_CoreAVXi: | 1696 case CK_CoreAVXi: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1709 Features["bmi"] = false; | 1747 Features["bmi"] = false; |
| 1710 Features["bmi2"] = false; | 1748 Features["bmi2"] = false; |
| 1711 Features["popcnt"] = false; | 1749 Features["popcnt"] = false; |
| 1712 Features["fma4"] = false; | 1750 Features["fma4"] = false; |
| 1713 Features["fma"] = false; | 1751 Features["fma"] = false; |
| 1714 Features["xop"] = false; | 1752 Features["xop"] = false; |
| 1715 | 1753 |
| 1716 // FIXME: This *really* should not be here. | 1754 // FIXME: This *really* should not be here. |
| 1717 | 1755 |
| 1718 // X86_64 always has SSE2. | 1756 // X86_64 always has SSE2. |
| 1719 if (PointerWidth == 64) | 1757 if (getTriple().getArch() == llvm::Triple::x86_64) |
| 1720 Features["sse2"] = Features["sse"] = Features["mmx"] = true; | 1758 Features["sse2"] = Features["sse"] = Features["mmx"] = true; |
| 1721 | 1759 |
| 1722 switch (CPU) { | 1760 switch (CPU) { |
| 1723 case CK_Generic: | 1761 case CK_Generic: |
| 1724 case CK_i386: | 1762 case CK_i386: |
| 1725 case CK_i486: | 1763 case CK_i486: |
| 1726 case CK_i586: | 1764 case CK_i586: |
| 1727 case CK_Pentium: | 1765 case CK_Pentium: |
| 1728 case CK_i686: | 1766 case CK_i686: |
| 1729 case CK_PentiumPro: | 1767 case CK_PentiumPro: |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2082 it = std::find(Features.begin(), Features.end(), "-mmx"); | 2120 it = std::find(Features.begin(), Features.end(), "-mmx"); |
| 2083 if (it != Features.end()) | 2121 if (it != Features.end()) |
| 2084 Features.erase(it); | 2122 Features.erase(it); |
| 2085 } | 2123 } |
| 2086 | 2124 |
| 2087 /// X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro | 2125 /// X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro |
| 2088 /// definitions for this particular subtarget. | 2126 /// definitions for this particular subtarget. |
| 2089 void X86TargetInfo::getTargetDefines(const LangOptions &Opts, | 2127 void X86TargetInfo::getTargetDefines(const LangOptions &Opts, |
| 2090 MacroBuilder &Builder) const { | 2128 MacroBuilder &Builder) const { |
| 2091 // Target identification. | 2129 // Target identification. |
| 2092 if (PointerWidth == 64) { | 2130 if (getTriple().getArch() == llvm::Triple::x86_64) { |
| 2093 Builder.defineMacro("__amd64__"); | 2131 Builder.defineMacro("__amd64__"); |
| 2094 Builder.defineMacro("__amd64"); | 2132 Builder.defineMacro("__amd64"); |
| 2095 Builder.defineMacro("__x86_64"); | 2133 Builder.defineMacro("__x86_64"); |
| 2096 Builder.defineMacro("__x86_64__"); | 2134 Builder.defineMacro("__x86_64__"); |
| 2097 } else { | 2135 } else { |
| 2098 DefineStd(Builder, "i386", Opts); | 2136 DefineStd(Builder, "i386", Opts); |
| 2099 } | 2137 } |
| 2100 | 2138 |
| 2101 // Subtarget options. | 2139 // Subtarget options. |
| 2102 // FIXME: We are hard-coding the tune parameters based on the CPU, but they | 2140 // FIXME: We are hard-coding the tune parameters based on the CPU, but they |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2278 case SSE2: | 2316 case SSE2: |
| 2279 Builder.defineMacro("__SSE2__"); | 2317 Builder.defineMacro("__SSE2__"); |
| 2280 Builder.defineMacro("__SSE2_MATH__"); // -mfp-math=sse always implied. | 2318 Builder.defineMacro("__SSE2_MATH__"); // -mfp-math=sse always implied. |
| 2281 case SSE1: | 2319 case SSE1: |
| 2282 Builder.defineMacro("__SSE__"); | 2320 Builder.defineMacro("__SSE__"); |
| 2283 Builder.defineMacro("__SSE_MATH__"); // -mfp-math=sse always implied. | 2321 Builder.defineMacro("__SSE_MATH__"); // -mfp-math=sse always implied. |
| 2284 case NoSSE: | 2322 case NoSSE: |
| 2285 break; | 2323 break; |
| 2286 } | 2324 } |
| 2287 | 2325 |
| 2288 if (Opts.MicrosoftExt && PointerWidth == 32) { | 2326 if (Opts.MicrosoftExt && getTriple().getArch() == llvm::Triple::x86) { |
| 2289 switch (SSELevel) { | 2327 switch (SSELevel) { |
| 2290 case AVX2: | 2328 case AVX2: |
| 2291 case AVX: | 2329 case AVX: |
| 2292 case SSE42: | 2330 case SSE42: |
| 2293 case SSE41: | 2331 case SSE41: |
| 2294 case SSSE3: | 2332 case SSSE3: |
| 2295 case SSE3: | 2333 case SSE3: |
| 2296 case SSE2: | 2334 case SSE2: |
| 2297 Builder.defineMacro("_M_IX86_FP", Twine(2)); | 2335 Builder.defineMacro("_M_IX86_FP", Twine(2)); |
| 2298 break; | 2336 break; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2334 .Case("pclmul", HasPCLMUL) | 2372 .Case("pclmul", HasPCLMUL) |
| 2335 .Case("popcnt", HasPOPCNT) | 2373 .Case("popcnt", HasPOPCNT) |
| 2336 .Case("sse", SSELevel >= SSE1) | 2374 .Case("sse", SSELevel >= SSE1) |
| 2337 .Case("sse2", SSELevel >= SSE2) | 2375 .Case("sse2", SSELevel >= SSE2) |
| 2338 .Case("sse3", SSELevel >= SSE3) | 2376 .Case("sse3", SSELevel >= SSE3) |
| 2339 .Case("ssse3", SSELevel >= SSSE3) | 2377 .Case("ssse3", SSELevel >= SSSE3) |
| 2340 .Case("sse41", SSELevel >= SSE41) | 2378 .Case("sse41", SSELevel >= SSE41) |
| 2341 .Case("sse42", SSELevel >= SSE42) | 2379 .Case("sse42", SSELevel >= SSE42) |
| 2342 .Case("sse4a", HasSSE4a) | 2380 .Case("sse4a", HasSSE4a) |
| 2343 .Case("x86", true) | 2381 .Case("x86", true) |
| 2344 .Case("x86_32", PointerWidth == 32) | 2382 .Case("x86_32", getTriple().getArch() == llvm::Triple::x86) |
| 2345 .Case("x86_64", PointerWidth == 64) | 2383 .Case("x86_64", getTriple().getArch() == llvm::Triple::x86_64) |
| 2346 .Case("xop", HasXOP) | 2384 .Case("xop", HasXOP) |
| 2347 .Default(false); | 2385 .Default(false); |
| 2348 } | 2386 } |
| 2349 | 2387 |
| 2350 bool | 2388 bool |
| 2351 X86TargetInfo::validateAsmConstraint(const char *&Name, | 2389 X86TargetInfo::validateAsmConstraint(const char *&Name, |
| 2352 TargetInfo::ConstraintInfo &Info) const { | 2390 TargetInfo::ConstraintInfo &Info) const { |
| 2353 switch (*Name) { | 2391 switch (*Name) { |
| 2354 default: return false; | 2392 default: return false; |
| 2355 case 'Y': // first letter of a pair: | 2393 case 'Y': // first letter of a pair: |
| (...skipping 1813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4169 | 4207 |
| 4170 void getDefaultFeatures(llvm::StringMap<bool> &Features) const { | 4208 void getDefaultFeatures(llvm::StringMap<bool> &Features) const { |
| 4171 } | 4209 } |
| 4172 virtual void getArchDefines(const LangOptions &Opts, | 4210 virtual void getArchDefines(const LangOptions &Opts, |
| 4173 MacroBuilder &Builder) const { | 4211 MacroBuilder &Builder) const { |
| 4174 Builder.defineMacro("__le32__"); | 4212 Builder.defineMacro("__le32__"); |
| 4175 Builder.defineMacro("__pnacl__"); | 4213 Builder.defineMacro("__pnacl__"); |
| 4176 } | 4214 } |
| 4177 virtual void getTargetDefines(const LangOptions &Opts, | 4215 virtual void getTargetDefines(const LangOptions &Opts, |
| 4178 MacroBuilder &Builder) const { | 4216 MacroBuilder &Builder) const { |
| 4179 DefineStd(Builder, "unix", Opts); | |
| 4180 Builder.defineMacro("__ELF__"); | |
| 4181 if (Opts.POSIXThreads) | |
| 4182 Builder.defineMacro("_REENTRANT"); | |
| 4183 if (Opts.CPlusPlus) | |
| 4184 Builder.defineMacro("_GNU_SOURCE"); | |
| 4185 | |
| 4186 Builder.defineMacro("__LITTLE_ENDIAN__"); | 4217 Builder.defineMacro("__LITTLE_ENDIAN__"); |
| 4187 Builder.defineMacro("__native_client__"); | |
| 4188 getArchDefines(Opts, Builder); | 4218 getArchDefines(Opts, Builder); |
| 4189 } | 4219 } |
| 4190 virtual bool hasFeature(StringRef Feature) const { | 4220 virtual bool hasFeature(StringRef Feature) const { |
| 4191 return Feature == "pnacl"; | 4221 return Feature == "pnacl"; |
| 4192 } | 4222 } |
| 4193 virtual void getTargetBuiltins(const Builtin::Info *&Records, | 4223 virtual void getTargetBuiltins(const Builtin::Info *&Records, |
| 4194 unsigned &NumRecords) const { | 4224 unsigned &NumRecords) const { |
| 4195 } | 4225 } |
| 4196 virtual BuiltinVaListKind getBuiltinVaListKind() const { | 4226 virtual BuiltinVaListKind getBuiltinVaListKind() const { |
| 4197 return TargetInfo::PNaClABIBuiltinVaList; | 4227 return TargetInfo::PNaClABIBuiltinVaList; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4250 case llvm::Triple::FreeBSD: | 4280 case llvm::Triple::FreeBSD: |
| 4251 return new FreeBSDTargetInfo<ARMTargetInfo>(T); | 4281 return new FreeBSDTargetInfo<ARMTargetInfo>(T); |
| 4252 case llvm::Triple::NetBSD: | 4282 case llvm::Triple::NetBSD: |
| 4253 return new NetBSDTargetInfo<ARMTargetInfo>(T); | 4283 return new NetBSDTargetInfo<ARMTargetInfo>(T); |
| 4254 case llvm::Triple::OpenBSD: | 4284 case llvm::Triple::OpenBSD: |
| 4255 return new OpenBSDTargetInfo<ARMTargetInfo>(T); | 4285 return new OpenBSDTargetInfo<ARMTargetInfo>(T); |
| 4256 case llvm::Triple::Bitrig: | 4286 case llvm::Triple::Bitrig: |
| 4257 return new BitrigTargetInfo<ARMTargetInfo>(T); | 4287 return new BitrigTargetInfo<ARMTargetInfo>(T); |
| 4258 case llvm::Triple::RTEMS: | 4288 case llvm::Triple::RTEMS: |
| 4259 return new RTEMSTargetInfo<ARMTargetInfo>(T); | 4289 return new RTEMSTargetInfo<ARMTargetInfo>(T); |
| 4290 case llvm::Triple::NativeClient: |
| 4291 return new NaClTargetInfo<ARMTargetInfo>(T); |
| 4260 default: | 4292 default: |
| 4261 return new ARMTargetInfo(T); | 4293 return new ARMTargetInfo(T); |
| 4262 } | 4294 } |
| 4263 | 4295 |
| 4264 case llvm::Triple::msp430: | 4296 case llvm::Triple::msp430: |
| 4265 return new MSP430TargetInfo(T); | 4297 return new MSP430TargetInfo(T); |
| 4266 | 4298 |
| 4267 case llvm::Triple::mips: | 4299 case llvm::Triple::mips: |
| 4268 switch (os) { | 4300 switch (os) { |
| 4269 case llvm::Triple::Linux: | 4301 case llvm::Triple::Linux: |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4320 return new NetBSDTargetInfo<Mips64ELTargetInfo>(T); | 4352 return new NetBSDTargetInfo<Mips64ELTargetInfo>(T); |
| 4321 case llvm::Triple::OpenBSD: | 4353 case llvm::Triple::OpenBSD: |
| 4322 return new OpenBSDTargetInfo<Mips64ELTargetInfo>(T); | 4354 return new OpenBSDTargetInfo<Mips64ELTargetInfo>(T); |
| 4323 default: | 4355 default: |
| 4324 return new Mips64ELTargetInfo(T); | 4356 return new Mips64ELTargetInfo(T); |
| 4325 } | 4357 } |
| 4326 | 4358 |
| 4327 case llvm::Triple::le32: | 4359 case llvm::Triple::le32: |
| 4328 switch (os) { | 4360 switch (os) { |
| 4329 case llvm::Triple::NativeClient: | 4361 case llvm::Triple::NativeClient: |
| 4330 return new PNaClTargetInfo(T); | 4362 return new NaClTargetInfo<PNaClTargetInfo>(T); |
| 4331 default: | 4363 default: |
| 4332 return NULL; | 4364 return NULL; |
| 4333 } | 4365 } |
| 4334 | 4366 |
| 4335 case llvm::Triple::ppc: | 4367 case llvm::Triple::ppc: |
| 4336 if (Triple.isOSDarwin()) | 4368 if (Triple.isOSDarwin()) |
| 4337 return new DarwinPPC32TargetInfo(T); | 4369 return new DarwinPPC32TargetInfo(T); |
| 4338 switch (os) { | 4370 switch (os) { |
| 4339 case llvm::Triple::Linux: | 4371 case llvm::Triple::Linux: |
| 4340 return new LinuxTargetInfo<PPC32TargetInfo>(T); | 4372 return new LinuxTargetInfo<PPC32TargetInfo>(T); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4425 case llvm::Triple::Cygwin: | 4457 case llvm::Triple::Cygwin: |
| 4426 return new CygwinX86_32TargetInfo(T); | 4458 return new CygwinX86_32TargetInfo(T); |
| 4427 case llvm::Triple::MinGW32: | 4459 case llvm::Triple::MinGW32: |
| 4428 return new MinGWX86_32TargetInfo(T); | 4460 return new MinGWX86_32TargetInfo(T); |
| 4429 case llvm::Triple::Win32: | 4461 case llvm::Triple::Win32: |
| 4430 return new VisualStudioWindowsX86_32TargetInfo(T); | 4462 return new VisualStudioWindowsX86_32TargetInfo(T); |
| 4431 case llvm::Triple::Haiku: | 4463 case llvm::Triple::Haiku: |
| 4432 return new HaikuX86_32TargetInfo(T); | 4464 return new HaikuX86_32TargetInfo(T); |
| 4433 case llvm::Triple::RTEMS: | 4465 case llvm::Triple::RTEMS: |
| 4434 return new RTEMSX86_32TargetInfo(T); | 4466 return new RTEMSX86_32TargetInfo(T); |
| 4467 case llvm::Triple::NativeClient: |
| 4468 return new NaClTargetInfo<X86_32TargetInfo>(T); |
| 4435 default: | 4469 default: |
| 4436 return new X86_32TargetInfo(T); | 4470 return new X86_32TargetInfo(T); |
| 4437 } | 4471 } |
| 4438 | 4472 |
| 4439 case llvm::Triple::x86_64: | 4473 case llvm::Triple::x86_64: |
| 4440 if (Triple.isOSDarwin() || Triple.getEnvironment() == llvm::Triple::MachO) | 4474 if (Triple.isOSDarwin() || Triple.getEnvironment() == llvm::Triple::MachO) |
| 4441 return new DarwinX86_64TargetInfo(T); | 4475 return new DarwinX86_64TargetInfo(T); |
| 4442 | 4476 |
| 4443 switch (os) { | 4477 switch (os) { |
| 4444 case llvm::Triple::AuroraUX: | 4478 case llvm::Triple::AuroraUX: |
| 4445 return new AuroraUXTargetInfo<X86_64TargetInfo>(T); | 4479 return new AuroraUXTargetInfo<X86_64TargetInfo>(T); |
| 4446 case llvm::Triple::Linux: | 4480 case llvm::Triple::Linux: |
| 4447 return new LinuxTargetInfo<X86_64TargetInfo>(T); | 4481 return new LinuxTargetInfo<X86_64TargetInfo>(T); |
| 4448 case llvm::Triple::DragonFly: | 4482 case llvm::Triple::DragonFly: |
| 4449 return new DragonFlyBSDTargetInfo<X86_64TargetInfo>(T); | 4483 return new DragonFlyBSDTargetInfo<X86_64TargetInfo>(T); |
| 4450 case llvm::Triple::NetBSD: | 4484 case llvm::Triple::NetBSD: |
| 4451 return new NetBSDTargetInfo<X86_64TargetInfo>(T); | 4485 return new NetBSDTargetInfo<X86_64TargetInfo>(T); |
| 4452 case llvm::Triple::OpenBSD: | 4486 case llvm::Triple::OpenBSD: |
| 4453 return new OpenBSDX86_64TargetInfo(T); | 4487 return new OpenBSDX86_64TargetInfo(T); |
| 4454 case llvm::Triple::Bitrig: | 4488 case llvm::Triple::Bitrig: |
| 4455 return new BitrigX86_64TargetInfo(T); | 4489 return new BitrigX86_64TargetInfo(T); |
| 4456 case llvm::Triple::FreeBSD: | 4490 case llvm::Triple::FreeBSD: |
| 4457 return new FreeBSDTargetInfo<X86_64TargetInfo>(T); | 4491 return new FreeBSDTargetInfo<X86_64TargetInfo>(T); |
| 4458 case llvm::Triple::Solaris: | 4492 case llvm::Triple::Solaris: |
| 4459 return new SolarisTargetInfo<X86_64TargetInfo>(T); | 4493 return new SolarisTargetInfo<X86_64TargetInfo>(T); |
| 4460 case llvm::Triple::MinGW32: | 4494 case llvm::Triple::MinGW32: |
| 4461 return new MinGWX86_64TargetInfo(T); | 4495 return new MinGWX86_64TargetInfo(T); |
| 4462 case llvm::Triple::Win32: // This is what Triple.h supports now. | 4496 case llvm::Triple::Win32: // This is what Triple.h supports now. |
| 4463 return new VisualStudioWindowsX86_64TargetInfo(T); | 4497 return new VisualStudioWindowsX86_64TargetInfo(T); |
| 4498 case llvm::Triple::NativeClient: |
| 4499 return new NaClTargetInfo<X86_64TargetInfo>(T); |
| 4464 default: | 4500 default: |
| 4465 return new X86_64TargetInfo(T); | 4501 return new X86_64TargetInfo(T); |
| 4466 } | 4502 } |
| 4467 } | 4503 } |
| 4468 } | 4504 } |
| 4469 | 4505 |
| 4470 /// CreateTargetInfo - Return the target info object for the specified target | 4506 /// CreateTargetInfo - Return the target info object for the specified target |
| 4471 /// triple. | 4507 /// triple. |
| 4472 TargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, | 4508 TargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, |
| 4473 TargetOptions &Opts) { | 4509 TargetOptions &Opts) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4540 // FIXME: If we are completely confident that we have the right set, we only | 4576 // FIXME: If we are completely confident that we have the right set, we only |
| 4541 // need to pass the minuses. | 4577 // need to pass the minuses. |
| 4542 Opts.Features.clear(); | 4578 Opts.Features.clear(); |
| 4543 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), | 4579 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), |
| 4544 ie = Features.end(); it != ie; ++it) | 4580 ie = Features.end(); it != ie; ++it) |
| 4545 Opts.Features.push_back((it->second ? "+" : "-") + it->first().str()); | 4581 Opts.Features.push_back((it->second ? "+" : "-") + it->first().str()); |
| 4546 Target->HandleTargetFeatures(Opts.Features); | 4582 Target->HandleTargetFeatures(Opts.Features); |
| 4547 | 4583 |
| 4548 return Target.take(); | 4584 return Target.take(); |
| 4549 } | 4585 } |
| OLD | NEW |