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 |