xref: /llvm-project/clang/lib/Basic/Targets/Lanai.cpp (revision a3c248db87ebe88084386950846678c9a52dd7c0)
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