]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Basic/Targets/Lanai.h
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Basic / Targets / Lanai.h
1 //===--- Lanai.h - Declare Lanai target feature support ---------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares Lanai TargetInfo objects.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_LANAI_H
15 #define LLVM_CLANG_LIB_BASIC_TARGETS_LANAI_H
16
17 #include "clang/Basic/TargetInfo.h"
18 #include "clang/Basic/TargetOptions.h"
19 #include "llvm/ADT/Triple.h"
20 #include "llvm/Support/Compiler.h"
21
22 namespace clang {
23 namespace targets {
24
25 class LLVM_LIBRARY_VISIBILITY LanaiTargetInfo : public TargetInfo {
26   // Class for Lanai (32-bit).
27   // The CPU profiles supported by the Lanai backend
28   enum CPUKind {
29     CK_NONE,
30     CK_V11,
31   } CPU;
32
33   static const TargetInfo::GCCRegAlias GCCRegAliases[];
34   static const char *const GCCRegNames[];
35
36 public:
37   LanaiTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
38       : TargetInfo(Triple) {
39     // Description string has to be kept in sync with backend.
40     resetDataLayout("E"        // Big endian
41                     "-m:e"     // ELF name manging
42                     "-p:32:32" // 32 bit pointers, 32 bit aligned
43                     "-i64:64"  // 64 bit integers, 64 bit aligned
44                     "-a:0:32"  // 32 bit alignment of objects of aggregate type
45                     "-n32"     // 32 bit native integer width
46                     "-S64"     // 64 bit natural stack alignment
47     );
48
49     // Setting RegParmMax equal to what mregparm was set to in the old
50     // toolchain
51     RegParmMax = 4;
52
53     // Set the default CPU to V11
54     CPU = CK_V11;
55
56     // Temporary approach to make everything at least word-aligned and allow for
57     // safely casting between pointers with different alignment requirements.
58     // TODO: Remove this when there are no more cast align warnings on the
59     // firmware.
60     MinGlobalAlign = 32;
61   }
62
63   void getTargetDefines(const LangOptions &Opts,
64                         MacroBuilder &Builder) const override;
65
66   bool isValidCPUName(StringRef Name) const override;
67
68   void fillValidCPUList(SmallVectorImpl<StringRef> &Values) const override;
69
70   bool setCPU(const std::string &Name) override;
71
72   bool hasFeature(StringRef Feature) const override;
73
74   ArrayRef<const char *> getGCCRegNames() const override;
75
76   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override;
77
78   BuiltinVaListKind getBuiltinVaListKind() const override {
79     return TargetInfo::VoidPtrBuiltinVaList;
80   }
81
82   ArrayRef<Builtin::Info> getTargetBuiltins() const override { return None; }
83
84   bool validateAsmConstraint(const char *&Name,
85                              TargetInfo::ConstraintInfo &info) const override {
86     return false;
87   }
88
89   const char *getClobbers() const override { return ""; }
90 };
91 } // namespace targets
92 } // namespace clang
93
94 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_LANAI_H