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->LongAlign = 32; |
| 2852 this->LongWidth = 32; |
| 2853 this->PointerAlign = 32; |
| 2854 this->PointerWidth = 32; |
| 2855 this->IntMaxType = TargetInfo::SignedLongLong; |
| 2856 this->UIntMaxType = TargetInfo::UnsignedLongLong; |
| 2857 this->Int64Type = TargetInfo::SignedLongLong; |
| 2858 this->SizeType = TargetInfo::UnsignedInt; |
| 2859 DescriptionString = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-" |
| 2860 "f32:32:32-f64:64:64-p:32:32:32-v128:32:32"; |
| 2861 } |
| 2862 |
| 2863 void getDefaultFeatures(const std::string &CPU, |
| 2864 llvm::StringMap<bool> &Features) const { |
| 2865 } |
| 2866 virtual void getArchDefines(const LangOptions &Opts, |
| 2867 MacroBuilder &Builder) const { |
| 2868 Builder.defineMacro("__le32__"); |
| 2869 Builder.defineMacro("__pnacl__"); |
| 2870 } |
| 2871 virtual void getTargetDefines(const LangOptions &Opts, |
| 2872 MacroBuilder &Builder) const { |
| 2873 Builder.defineMacro("__native_client__"); |
| 2874 getArchDefines(Opts, Builder); |
| 2875 } |
| 2876 virtual void getTargetBuiltins(const Builtin::Info *&Records, |
| 2877 unsigned &NumRecords) const { |
| 2878 } |
| 2879 virtual const char *getVAListDeclaration() const { |
| 2880 return "typedef void* __builtin_va_list;"; |
| 2881 } |
| 2882 virtual void getGCCRegNames(const char * const *&Names, |
| 2883 unsigned &NumNames) const; |
| 2884 virtual void getGCCRegAliases(const GCCRegAlias *&Aliases, |
| 2885 unsigned &NumAliases) const; |
| 2886 virtual bool validateAsmConstraint(const char *&Name, |
| 2887 TargetInfo::ConstraintInfo &Info) const { |
| 2888 return false; |
| 2889 } |
| 2890 |
| 2891 virtual const char *getClobbers() const { |
| 2892 return ""; |
| 2893 } |
| 2894 }; |
| 2895 |
| 2896 void PNaClTargetInfo::getGCCRegNames(const char * const *&Names, |
| 2897 unsigned &NumNames) const { |
| 2898 Names = NULL; |
| 2899 NumNames = 0; |
| 2900 } |
| 2901 |
| 2902 void PNaClTargetInfo::getGCCRegAliases(const GCCRegAlias *&Aliases, |
| 2903 unsigned &NumAliases) const { |
| 2904 Aliases = NULL; |
| 2905 NumAliases = 0; |
| 2906 } |
| 2907 } // end anonymous namespace. |
| 2908 |
| 2909 |
2846 //===----------------------------------------------------------------------===// | 2910 //===----------------------------------------------------------------------===// |
2847 // Driver code | 2911 // Driver code |
2848 //===----------------------------------------------------------------------===// | 2912 //===----------------------------------------------------------------------===// |
2849 | 2913 |
2850 static TargetInfo *AllocateTarget(const std::string &T) { | 2914 static TargetInfo *AllocateTarget(const std::string &T) { |
2851 llvm::Triple Triple(T); | 2915 llvm::Triple Triple(T); |
2852 llvm::Triple::OSType os = Triple.getOS(); | 2916 llvm::Triple::OSType os = Triple.getOS(); |
2853 | 2917 |
2854 switch (Triple.getArch()) { | 2918 switch (Triple.getArch()) { |
2855 default: | 2919 default: |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2906 case llvm::Triple::RTEMS: | 2970 case llvm::Triple::RTEMS: |
2907 return new RTEMSTargetInfo<MipselTargetInfo>(T); | 2971 return new RTEMSTargetInfo<MipselTargetInfo>(T); |
2908 case llvm::Triple::FreeBSD: | 2972 case llvm::Triple::FreeBSD: |
2909 return new FreeBSDTargetInfo<MipselTargetInfo>(T); | 2973 return new FreeBSDTargetInfo<MipselTargetInfo>(T); |
2910 case llvm::Triple::NetBSD: | 2974 case llvm::Triple::NetBSD: |
2911 return new NetBSDTargetInfo<MipselTargetInfo>(T); | 2975 return new NetBSDTargetInfo<MipselTargetInfo>(T); |
2912 default: | 2976 default: |
2913 return new MipsTargetInfo(T); | 2977 return new MipsTargetInfo(T); |
2914 } | 2978 } |
2915 | 2979 |
| 2980 case llvm::Triple::le32: |
| 2981 switch (os) { |
| 2982 case llvm::Triple::NativeClient: |
| 2983 return new PNaClTargetInfo(T); |
| 2984 default: |
| 2985 return NULL; |
| 2986 } |
| 2987 |
2916 case llvm::Triple::ppc: | 2988 case llvm::Triple::ppc: |
2917 if (Triple.isOSDarwin()) | 2989 if (Triple.isOSDarwin()) |
2918 return new DarwinPPC32TargetInfo(T); | 2990 return new DarwinPPC32TargetInfo(T); |
2919 switch (os) { | 2991 switch (os) { |
2920 case llvm::Triple::FreeBSD: | 2992 case llvm::Triple::FreeBSD: |
2921 return new FreeBSDTargetInfo<PPC32TargetInfo>(T); | 2993 return new FreeBSDTargetInfo<PPC32TargetInfo>(T); |
2922 case llvm::Triple::NetBSD: | 2994 case llvm::Triple::NetBSD: |
2923 return new NetBSDTargetInfo<PPC32TargetInfo>(T); | 2995 return new NetBSDTargetInfo<PPC32TargetInfo>(T); |
2924 case llvm::Triple::RTEMS: | 2996 case llvm::Triple::RTEMS: |
2925 return new RTEMSTargetInfo<PPC32TargetInfo>(T); | 2997 return new RTEMSTargetInfo<PPC32TargetInfo>(T); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3092 // need to pass the minuses. | 3164 // need to pass the minuses. |
3093 Opts.Features.clear(); | 3165 Opts.Features.clear(); |
3094 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), | 3166 for (llvm::StringMap<bool>::const_iterator it = Features.begin(), |
3095 ie = Features.end(); it != ie; ++it) | 3167 ie = Features.end(); it != ie; ++it) |
3096 Opts.Features.push_back(std::string(it->second ? "+" : "-") + | 3168 Opts.Features.push_back(std::string(it->second ? "+" : "-") + |
3097 it->first().str()); | 3169 it->first().str()); |
3098 Target->HandleTargetFeatures(Opts.Features); | 3170 Target->HandleTargetFeatures(Opts.Features); |
3099 | 3171 |
3100 return Target.take(); | 3172 return Target.take(); |
3101 } | 3173 } |
OLD | NEW |