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 2825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2836 MacroBuilder &Builder) const { | 2836 MacroBuilder &Builder) const { |
2837 DefineStd(Builder, "mips", Opts); | 2837 DefineStd(Builder, "mips", Opts); |
2838 Builder.defineMacro("_mips"); | 2838 Builder.defineMacro("_mips"); |
2839 DefineStd(Builder, "MIPSEL", Opts); | 2839 DefineStd(Builder, "MIPSEL", Opts); |
2840 Builder.defineMacro("_MIPSEL"); | 2840 Builder.defineMacro("_MIPSEL"); |
2841 Builder.defineMacro("__REGISTER_PREFIX__", ""); | 2841 Builder.defineMacro("__REGISTER_PREFIX__", ""); |
2842 getArchDefines(Opts, Builder); | 2842 getArchDefines(Opts, Builder); |
2843 } | 2843 } |
2844 } // end anonymous namespace. | 2844 } // end anonymous namespace. |
2845 | 2845 |
2846 namespace { | |
2847 class PNaClTargetInfo : public TargetInfo { | |
2848 public: | |
2849 PNaClTargetInfo(const std::string& triple) : TargetInfo(triple) { | |
2850 this->UserLabelPrefix = ""; | |
2851 this->LongWidth = this->LongAlign = | |
2852 this->PointerWidth = this->PointerAlign = 32; | |
nlewycky
2011/08/23 21:22:26
I don't think this is worth saving two lines :)
krasin
2011/08/23 22:12:30
Done.
| |
2853 this->IntMaxType = TargetInfo::SignedLongLong; | |
2854 this->UIntMaxType = TargetInfo::UnsignedLongLong; | |
2855 this->Int64Type = TargetInfo::SignedLongLong; | |
2856 this->SizeType = TargetInfo::UnsignedInt; | |
2857 DescriptionString = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-" | |
2858 "f32:32:32-f64:64:64-p:32:32:32-v128:32:32"; | |
2859 } | |
2860 | |
2861 void getDefaultFeatures(const std::string &CPU, | |
2862 llvm::StringMap<bool> &Features) const { | |
2863 } | |
2864 virtual void getArchDefines(const LangOptions &Opts, | |
nlewycky
2011/08/23 21:22:26
Do you really want to leave this blank? __PNACL32_
krasin
2011/08/23 22:12:30
You're right. PNaCl gcc defines __pnacl__. Clang a
| |
2865 MacroBuilder &Builder) const { | |
nlewycky
2011/08/23 21:22:26
whitespace
krasin
2011/08/23 22:12:30
Done.
| |
2866 } | |
2867 virtual void getTargetDefines(const LangOptions &Opts, | |
2868 MacroBuilder &Builder) const { | |
2869 Builder.defineMacro("__native_client__"); | |
2870 } | |
2871 virtual void getTargetBuiltins(const Builtin::Info *&Records, | |
2872 unsigned &NumRecords) const { | |
2873 } | |
2874 virtual const char *getVAListDeclaration() const { | |
2875 return "typedef void* __builtin_va_list;"; | |
2876 } | |
2877 virtual void getGCCRegNames(const char * const *&Names, | |
2878 unsigned &NumNames) const; | |
2879 virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, | |
2880 unsigned &NumAliases) const; | |
2881 virtual bool validateAsmConstraint(const char *&Name, | |
2882 TargetInfo::ConstraintInfo &Info) const { | |
2883 return false; | |
2884 } | |
2885 | |
2886 virtual const char *getClobbers() const { | |
2887 return ""; | |
2888 } | |
2889 }; | |
2890 | |
2891 void PNaClTargetInfo::getGCCRegNames(const char * const *&Names, | |
2892 unsigned &NumNames) const { | |
nlewycky
2011/08/23 21:22:26
whitespace
krasin
2011/08/23 22:12:30
Done.
| |
2893 Names = NULL; | |
2894 NumNames = 0; | |
2895 } | |
2896 | |
2897 void PNaClTargetInfo::getGCCRegAliases(const GCCRegAlias *&Aliases, | |
2898 unsigned &NumAliases) const { | |
nlewycky
2011/08/23 21:22:26
whitespace
krasin
2011/08/23 22:12:30
Done.
| |
2899 Aliases = NULL; | |
2900 NumAliases = 0; | |
2901 } | |
2902 } // end anonymous namespace. | |
2903 | |
2904 | |
2846 //===----------------------------------------------------------------------===// | 2905 //===----------------------------------------------------------------------===// |
2847 // Driver code | 2906 // Driver code |
2848 //===----------------------------------------------------------------------===// | 2907 //===----------------------------------------------------------------------===// |
2849 | 2908 |
2850 static TargetInfo *AllocateTarget(const std::string &T) { | 2909 static TargetInfo *AllocateTarget(const std::string &T) { |
2851 llvm::Triple Triple(T); | 2910 llvm::Triple Triple(T); |
2852 llvm::Triple::OSType os = Triple.getOS(); | 2911 llvm::Triple::OSType os = Triple.getOS(); |
2853 | 2912 |
2854 switch (Triple.getArch()) { | 2913 switch (Triple.getArch()) { |
2855 default: | 2914 default: |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2905 return new LinuxTargetInfo<MipselTargetInfo>(T); | 2964 return new LinuxTargetInfo<MipselTargetInfo>(T); |
2906 case llvm::Triple::RTEMS: | 2965 case llvm::Triple::RTEMS: |
2907 return new RTEMSTargetInfo<MipselTargetInfo>(T); | 2966 return new RTEMSTargetInfo<MipselTargetInfo>(T); |
2908 case llvm::Triple::FreeBSD: | 2967 case llvm::Triple::FreeBSD: |
2909 return new FreeBSDTargetInfo<MipselTargetInfo>(T); | 2968 return new FreeBSDTargetInfo<MipselTargetInfo>(T); |
2910 case llvm::Triple::NetBSD: | 2969 case llvm::Triple::NetBSD: |
2911 return new NetBSDTargetInfo<MipselTargetInfo>(T); | 2970 return new NetBSDTargetInfo<MipselTargetInfo>(T); |
2912 default: | 2971 default: |
2913 return new MipsTargetInfo(T); | 2972 return new MipsTargetInfo(T); |
2914 } | 2973 } |
2974 case llvm::Triple::le32: | |
nlewycky
2011/08/23 21:22:26
Please add a blank line above.
krasin
2011/08/23 22:12:30
Done.
| |
2975 switch (os) { | |
2976 case llvm::Triple::NativeClient: | |
2977 return new PNaClTargetInfo(T); | |
2978 default: | |
2979 return NULL; | |
2980 } | |
2915 | 2981 |
2916 case llvm::Triple::ppc: | 2982 case llvm::Triple::ppc: |
2917 if (Triple.isOSDarwin()) | 2983 if (Triple.isOSDarwin()) |
2918 return new DarwinPPC32TargetInfo(T); | 2984 return new DarwinPPC32TargetInfo(T); |
2919 switch (os) { | 2985 switch (os) { |
2920 case llvm::Triple::FreeBSD: | 2986 case llvm::Triple::FreeBSD: |
2921 return new FreeBSDTargetInfo<PPC32TargetInfo>(T); | 2987 return new FreeBSDTargetInfo<PPC32TargetInfo>(T); |
2922 case llvm::Triple::NetBSD: | 2988 case llvm::Triple::NetBSD: |
2923 return new NetBSDTargetInfo<PPC32TargetInfo>(T); | 2989 return new NetBSDTargetInfo<PPC32TargetInfo>(T); |
2924 case llvm::Triple::RTEMS: | 2990 case llvm::Triple::RTEMS: |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3092 // need to pass the minuses. | 3158 // need to pass the minuses. |
3093 Opts.Features.clear(); | 3159 Opts.Features.clear(); |
3094 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), | 3160 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), |
3095 ie = Features.end(); it != ie; ++it) | 3161 ie = Features.end(); it != ie; ++it) |
3096 Opts.Features.push_back(std::string(it->second ? "+" : "-") + | 3162 Opts.Features.push_back(std::string(it->second ? "+" : "-") + |
3097 it->first().str()); | 3163 it->first().str()); |
3098 Target->HandleTargetFeatures(Opts.Features); | 3164 Target->HandleTargetFeatures(Opts.Features); |
3099 | 3165 |
3100 return Target.take(); | 3166 return Target.take(); |
3101 } | 3167 } |
OLD | NEW |