Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: lib/Basic/Targets.cpp

Issue 10986071: Properly factor Native Client defines to support NaCl OS on ARM and x86 (Closed) Base URL: http://llvm.org/git/clang.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/CodeGen/TargetInfo.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | lib/CodeGen/TargetInfo.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698