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