/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/Basic/Targets/Lanai.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | //===--- Lanai.cpp - Implement Lanai target feature support ---------------===// |
2 | | // |
3 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | | // See https://llvm.org/LICENSE.txt for license information. |
5 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | // |
9 | | // This file implements Lanai TargetInfo objects. |
10 | | // |
11 | | //===----------------------------------------------------------------------===// |
12 | | |
13 | | #include "Lanai.h" |
14 | | #include "clang/Basic/MacroBuilder.h" |
15 | | #include "llvm/ADT/StringSwitch.h" |
16 | | |
17 | | using namespace clang; |
18 | | using namespace clang::targets; |
19 | | |
20 | | const char *const LanaiTargetInfo::GCCRegNames[] = { |
21 | | "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", |
22 | | "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", |
23 | | "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" |
24 | | }; |
25 | | |
26 | 0 | ArrayRef<const char *> LanaiTargetInfo::getGCCRegNames() const { |
27 | 0 | return llvm::makeArrayRef(GCCRegNames); |
28 | 0 | } |
29 | | |
30 | | const TargetInfo::GCCRegAlias LanaiTargetInfo::GCCRegAliases[] = { |
31 | | {{"pc"}, "r2"}, {{"sp"}, "r4"}, {{"fp"}, "r5"}, {{"rv"}, "r8"}, |
32 | | {{"rr1"}, "r10"}, {{"rr2"}, "r11"}, {{"rca"}, "r15"}, |
33 | | }; |
34 | | |
35 | 0 | ArrayRef<TargetInfo::GCCRegAlias> LanaiTargetInfo::getGCCRegAliases() const { |
36 | 0 | return llvm::makeArrayRef(GCCRegAliases); |
37 | 0 | } |
38 | | |
39 | 0 | bool LanaiTargetInfo::isValidCPUName(StringRef Name) const { |
40 | 0 | return llvm::StringSwitch<bool>(Name).Case("v11", true).Default(false); |
41 | 0 | } |
42 | | void LanaiTargetInfo::fillValidCPUList( |
43 | 1 | SmallVectorImpl<StringRef> &Values) const { |
44 | 1 | Values.emplace_back("v11"); |
45 | 1 | } |
46 | | |
47 | 1 | bool LanaiTargetInfo::setCPU(const std::string &Name) { |
48 | 1 | CPU = llvm::StringSwitch<CPUKind>(Name).Case("v11", CK_V11).Default(CK_NONE); |
49 | | |
50 | 1 | return CPU != CK_NONE; |
51 | 1 | } |
52 | | |
53 | 6 | bool LanaiTargetInfo::hasFeature(StringRef Feature) const { |
54 | 6 | return llvm::StringSwitch<bool>(Feature).Case("lanai", true).Default(false); |
55 | 6 | } |
56 | | |
57 | | void LanaiTargetInfo::getTargetDefines(const LangOptions &Opts, |
58 | 7 | MacroBuilder &Builder) const { |
59 | | // Define __lanai__ when building for target lanai. |
60 | 7 | Builder.defineMacro("__lanai__"); |
61 | | |
62 | | // Set define for the CPU specified. |
63 | 7 | switch (CPU) { |
64 | 7 | case CK_V11: |
65 | 7 | Builder.defineMacro("__LANAI_V11__"); |
66 | 7 | break; |
67 | 0 | case CK_NONE: |
68 | 0 | llvm_unreachable("Unhandled target CPU"); |
69 | 7 | } |
70 | 7 | } |