xref: /openbsd-src/gnu/llvm/clang/lib/Basic/Targets/ARC.h (revision 12c855180aad702bbcca06e0398d774beeafb155)
1e5dd7070Spatrick //===--- ARC.h - Declare ARC target feature support -------------*- C++ -*-===//
2e5dd7070Spatrick //
3e5dd7070Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5dd7070Spatrick // See https://llvm.org/LICENSE.txt for license information.
5e5dd7070Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5dd7070Spatrick //
7e5dd7070Spatrick //===----------------------------------------------------------------------===//
8e5dd7070Spatrick //
9e5dd7070Spatrick // This file declares ARC TargetInfo objects.
10e5dd7070Spatrick //
11e5dd7070Spatrick //===----------------------------------------------------------------------===//
12e5dd7070Spatrick 
13e5dd7070Spatrick #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_ARC_H
14e5dd7070Spatrick #define LLVM_CLANG_LIB_BASIC_TARGETS_ARC_H
15e5dd7070Spatrick 
16e5dd7070Spatrick #include "clang/Basic/TargetInfo.h"
17e5dd7070Spatrick #include "clang/Basic/TargetOptions.h"
18e5dd7070Spatrick #include "llvm/ADT/Triple.h"
19e5dd7070Spatrick #include "llvm/Support/Compiler.h"
20e5dd7070Spatrick 
21e5dd7070Spatrick namespace clang {
22e5dd7070Spatrick namespace targets {
23e5dd7070Spatrick 
24e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY ARCTargetInfo : public TargetInfo {
25e5dd7070Spatrick public:
ARCTargetInfo(const llvm::Triple & Triple,const TargetOptions &)26e5dd7070Spatrick   ARCTargetInfo(const llvm::Triple &Triple, const TargetOptions &)
27e5dd7070Spatrick       : TargetInfo(Triple) {
28e5dd7070Spatrick     NoAsmVariants = true;
29e5dd7070Spatrick     LongLongAlign = 32;
30e5dd7070Spatrick     SuitableAlign = 32;
31e5dd7070Spatrick     DoubleAlign = LongDoubleAlign = 32;
32e5dd7070Spatrick     SizeType = UnsignedInt;
33e5dd7070Spatrick     PtrDiffType = SignedInt;
34e5dd7070Spatrick     IntPtrType = SignedInt;
35e5dd7070Spatrick     UseZeroLengthBitfieldAlignment = true;
36e5dd7070Spatrick     resetDataLayout("e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-"
37e5dd7070Spatrick                     "i32:32:32-f32:32:32-i64:32-f64:32-a:0:32-n32");
38e5dd7070Spatrick   }
39e5dd7070Spatrick 
40e5dd7070Spatrick   void getTargetDefines(const LangOptions &Opts,
41e5dd7070Spatrick                         MacroBuilder &Builder) const override;
42e5dd7070Spatrick 
getTargetBuiltins()43*12c85518Srobert   ArrayRef<Builtin::Info> getTargetBuiltins() const override {
44*12c85518Srobert     return std::nullopt;
45*12c85518Srobert   }
46e5dd7070Spatrick 
getBuiltinVaListKind()47e5dd7070Spatrick   BuiltinVaListKind getBuiltinVaListKind() const override {
48e5dd7070Spatrick     return TargetInfo::VoidPtrBuiltinVaList;
49e5dd7070Spatrick   }
50e5dd7070Spatrick 
getClobbers()51e5dd7070Spatrick   const char *getClobbers() const override { return ""; }
52e5dd7070Spatrick 
getGCCRegNames()53e5dd7070Spatrick   ArrayRef<const char *> getGCCRegNames() const override {
54e5dd7070Spatrick     static const char *const GCCRegNames[] = {
55e5dd7070Spatrick         "r0",  "r1",  "r2",  "r3",  "r4",  "r5",     "r6",  "r7",
56e5dd7070Spatrick         "r8",  "r9",  "r10", "r11", "r12", "r13",    "r14", "r15",
57e5dd7070Spatrick         "r16", "r17", "r18", "r19", "r20", "r21",    "r22", "r23",
58e5dd7070Spatrick         "r24", "r25", "gp",  "sp",  "fp",  "ilink1", "r30", "blink"};
59*12c85518Srobert     return llvm::ArrayRef(GCCRegNames);
60e5dd7070Spatrick   }
61e5dd7070Spatrick 
getGCCRegAliases()62e5dd7070Spatrick   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
63*12c85518Srobert     return std::nullopt;
64e5dd7070Spatrick   }
65e5dd7070Spatrick 
validateAsmConstraint(const char * & Name,TargetInfo::ConstraintInfo & Info)66e5dd7070Spatrick   bool validateAsmConstraint(const char *&Name,
67e5dd7070Spatrick                              TargetInfo::ConstraintInfo &Info) const override {
68e5dd7070Spatrick     return false;
69e5dd7070Spatrick   }
70ec727ea7Spatrick 
hasBitIntType()71*12c85518Srobert   bool hasBitIntType() const override { return true; }
72*12c85518Srobert 
isCLZForZeroUndef()73*12c85518Srobert   bool isCLZForZeroUndef() const override { return false; }
74e5dd7070Spatrick };
75e5dd7070Spatrick 
76e5dd7070Spatrick } // namespace targets
77e5dd7070Spatrick } // namespace clang
78e5dd7070Spatrick 
79e5dd7070Spatrick #endif // LLVM_CLANG_LIB_BASIC_TARGETS_ARC_H
80