Coverage Report

Created: 2024-01-17 10:31

/src/llvm-project/clang/lib/Basic/Targets/VE.h
Line
Count
Source (jump to first uncovered line)
1
//===--- VE.h - Declare VE target feature support ---------------*- C++ -*-===//
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 declares VE TargetInfo objects.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
14
#define LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
15
16
#include "clang/Basic/TargetInfo.h"
17
#include "clang/Basic/TargetOptions.h"
18
#include "llvm/Support/Compiler.h"
19
#include "llvm/TargetParser/Triple.h"
20
21
namespace clang {
22
namespace targets {
23
24
class LLVM_LIBRARY_VISIBILITY VETargetInfo : public TargetInfo {
25
26
public:
27
  VETargetInfo(const llvm::Triple &Triple, const TargetOptions &)
28
0
      : TargetInfo(Triple) {
29
0
    NoAsmVariants = true;
30
0
    LongDoubleWidth = 128;
31
0
    LongDoubleAlign = 128;
32
0
    LongDoubleFormat = &llvm::APFloat::IEEEquad();
33
0
    DoubleAlign = LongLongAlign = 64;
34
0
    SuitableAlign = 64;
35
0
    LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
36
0
    SizeType = UnsignedLong;
37
0
    PtrDiffType = SignedLong;
38
0
    IntPtrType = SignedLong;
39
0
    IntMaxType = SignedLong;
40
0
    Int64Type = SignedLong;
41
0
    RegParmMax = 8;
42
0
    MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
43
44
0
    WCharType = UnsignedInt;
45
0
    WIntType = UnsignedInt;
46
0
    UseZeroLengthBitfieldAlignment = true;
47
0
    resetDataLayout(
48
0
        "e-m:e-i64:64-n32:64-S128-v64:64:64-v128:64:64-v256:64:64-v512:64:64-"
49
0
        "v1024:64:64-v2048:64:64-v4096:64:64-v8192:64:64-v16384:64:64");
50
0
  }
51
52
  void getTargetDefines(const LangOptions &Opts,
53
                        MacroBuilder &Builder) const override;
54
55
0
  bool hasSjLjLowering() const override { return true; }
56
57
  ArrayRef<Builtin::Info> getTargetBuiltins() const override;
58
59
0
  BuiltinVaListKind getBuiltinVaListKind() const override {
60
0
    return TargetInfo::VoidPtrBuiltinVaList;
61
0
  }
62
63
0
  CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
64
0
    switch (CC) {
65
0
    default:
66
0
      return CCCR_Warning;
67
0
    case CC_C:
68
0
      return CCCR_OK;
69
0
    }
70
0
  }
71
72
0
  std::string_view getClobbers() const override { return ""; }
73
74
0
  ArrayRef<const char *> getGCCRegNames() const override {
75
0
    static const char *const GCCRegNames[] = {
76
        // Regular registers
77
0
        "sx0",  "sx1",  "sx2",  "sx3",  "sx4",  "sx5",  "sx6",  "sx7",
78
0
        "sx8",  "sx9",  "sx10", "sx11", "sx12", "sx13", "sx14", "sx15",
79
0
        "sx16", "sx17", "sx18", "sx19", "sx20", "sx21", "sx22", "sx23",
80
0
        "sx24", "sx25", "sx26", "sx27", "sx28", "sx29", "sx30", "sx31",
81
0
        "sx32", "sx33", "sx34", "sx35", "sx36", "sx37", "sx38", "sx39",
82
0
        "sx40", "sx41", "sx42", "sx43", "sx44", "sx45", "sx46", "sx47",
83
0
        "sx48", "sx49", "sx50", "sx51", "sx52", "sx53", "sx54", "sx55",
84
0
        "sx56", "sx57", "sx58", "sx59", "sx60", "sx61", "sx62", "sx63",
85
0
    };
86
0
    return llvm::ArrayRef(GCCRegNames);
87
0
  }
88
89
0
  ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
90
0
    static const TargetInfo::GCCRegAlias GCCRegAliases[] = {
91
0
        {{"s0"}, "sx0"},
92
0
        {{"s1"}, "sx1"},
93
0
        {{"s2"}, "sx2"},
94
0
        {{"s3"}, "sx3"},
95
0
        {{"s4"}, "sx4"},
96
0
        {{"s5"}, "sx5"},
97
0
        {{"s6"}, "sx6"},
98
0
        {{"s7"}, "sx7"},
99
0
        {{"s8", "sl"}, "sx8"},
100
0
        {{"s9", "fp"}, "sx9"},
101
0
        {{"s10", "lr"}, "sx10"},
102
0
        {{"s11", "sp"}, "sx11"},
103
0
        {{"s12", "outer"}, "sx12"},
104
0
        {{"s13"}, "sx13"},
105
0
        {{"s14", "tp"}, "sx14"},
106
0
        {{"s15", "got"}, "sx15"},
107
0
        {{"s16", "plt"}, "sx16"},
108
0
        {{"s17", "info"}, "sx17"},
109
0
        {{"s18"}, "sx18"},
110
0
        {{"s19"}, "sx19"},
111
0
        {{"s20"}, "sx20"},
112
0
        {{"s21"}, "sx21"},
113
0
        {{"s22"}, "sx22"},
114
0
        {{"s23"}, "sx23"},
115
0
        {{"s24"}, "sx24"},
116
0
        {{"s25"}, "sx25"},
117
0
        {{"s26"}, "sx26"},
118
0
        {{"s27"}, "sx27"},
119
0
        {{"s28"}, "sx28"},
120
0
        {{"s29"}, "sx29"},
121
0
        {{"s30"}, "sx30"},
122
0
        {{"s31"}, "sx31"},
123
0
        {{"s32"}, "sx32"},
124
0
        {{"s33"}, "sx33"},
125
0
        {{"s34"}, "sx34"},
126
0
        {{"s35"}, "sx35"},
127
0
        {{"s36"}, "sx36"},
128
0
        {{"s37"}, "sx37"},
129
0
        {{"s38"}, "sx38"},
130
0
        {{"s39"}, "sx39"},
131
0
        {{"s40"}, "sx40"},
132
0
        {{"s41"}, "sx41"},
133
0
        {{"s42"}, "sx42"},
134
0
        {{"s43"}, "sx43"},
135
0
        {{"s44"}, "sx44"},
136
0
        {{"s45"}, "sx45"},
137
0
        {{"s46"}, "sx46"},
138
0
        {{"s47"}, "sx47"},
139
0
        {{"s48"}, "sx48"},
140
0
        {{"s49"}, "sx49"},
141
0
        {{"s50"}, "sx50"},
142
0
        {{"s51"}, "sx51"},
143
0
        {{"s52"}, "sx52"},
144
0
        {{"s53"}, "sx53"},
145
0
        {{"s54"}, "sx54"},
146
0
        {{"s55"}, "sx55"},
147
0
        {{"s56"}, "sx56"},
148
0
        {{"s57"}, "sx57"},
149
0
        {{"s58"}, "sx58"},
150
0
        {{"s59"}, "sx59"},
151
0
        {{"s60"}, "sx60"},
152
0
        {{"s61"}, "sx61"},
153
0
        {{"s62"}, "sx62"},
154
0
        {{"s63"}, "sx63"},
155
0
    };
156
0
    return llvm::ArrayRef(GCCRegAliases);
157
0
  }
158
159
  bool validateAsmConstraint(const char *&Name,
160
0
                             TargetInfo::ConstraintInfo &Info) const override {
161
0
    switch (*Name) {
162
0
    default:
163
0
      return false;
164
0
    case 'v':
165
0
      Info.setAllowsRegister();
166
0
      return true;
167
0
    }
168
0
    return false;
169
0
  }
170
171
0
  bool allowsLargerPreferedTypeAlignment() const override { return false; }
172
};
173
} // namespace targets
174
} // namespace clang
175
#endif // LLVM_CLANG_LIB_BASIC_TARGETS_VE_H