1 //===--- VE.h - Declare VE target feature support ---------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This file declares VE TargetInfo objects.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
14 #define LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
16 #include "clang/Basic/TargetInfo.h"
17 #include "clang/Basic/TargetOptions.h"
18 #include "llvm/Support/Compiler.h"
19 #include "llvm/TargetParser/Triple.h"
24 class LLVM_LIBRARY_VISIBILITY VETargetInfo
: public TargetInfo
{
27 VETargetInfo(const llvm::Triple
&Triple
, const TargetOptions
&)
28 : TargetInfo(Triple
) {
30 LongDoubleWidth
= 128;
31 LongDoubleAlign
= 128;
32 LongDoubleFormat
= &llvm::APFloat::IEEEquad();
33 DoubleAlign
= LongLongAlign
= 64;
35 LongWidth
= LongAlign
= PointerWidth
= PointerAlign
= 64;
36 SizeType
= UnsignedLong
;
37 PtrDiffType
= SignedLong
;
38 IntPtrType
= SignedLong
;
39 IntMaxType
= SignedLong
;
40 Int64Type
= SignedLong
;
42 MaxAtomicPromoteWidth
= MaxAtomicInlineWidth
= 64;
44 WCharType
= UnsignedInt
;
45 WIntType
= UnsignedInt
;
46 UseZeroLengthBitfieldAlignment
= true;
48 "e-m:e-i64:64-n32:64-S128-v64:64:64-v128:64:64-v256:64:64-v512:64:64-"
49 "v1024:64:64-v2048:64:64-v4096:64:64-v8192:64:64-v16384:64:64");
52 void getTargetDefines(const LangOptions
&Opts
,
53 MacroBuilder
&Builder
) const override
;
55 bool hasSjLjLowering() const override
{ return true; }
57 ArrayRef
<Builtin::Info
> getTargetBuiltins() const override
;
59 BuiltinVaListKind
getBuiltinVaListKind() const override
{
60 return TargetInfo::VoidPtrBuiltinVaList
;
63 CallingConvCheckResult
checkCallingConvention(CallingConv CC
) const override
{
72 const char *getClobbers() const override
{ return ""; }
74 ArrayRef
<const char *> getGCCRegNames() const override
{
75 static const char *const GCCRegNames
[] = {
77 "sx0", "sx1", "sx2", "sx3", "sx4", "sx5", "sx6", "sx7",
78 "sx8", "sx9", "sx10", "sx11", "sx12", "sx13", "sx14", "sx15",
79 "sx16", "sx17", "sx18", "sx19", "sx20", "sx21", "sx22", "sx23",
80 "sx24", "sx25", "sx26", "sx27", "sx28", "sx29", "sx30", "sx31",
81 "sx32", "sx33", "sx34", "sx35", "sx36", "sx37", "sx38", "sx39",
82 "sx40", "sx41", "sx42", "sx43", "sx44", "sx45", "sx46", "sx47",
83 "sx48", "sx49", "sx50", "sx51", "sx52", "sx53", "sx54", "sx55",
84 "sx56", "sx57", "sx58", "sx59", "sx60", "sx61", "sx62", "sx63",
86 return llvm::ArrayRef(GCCRegNames
);
89 ArrayRef
<TargetInfo::GCCRegAlias
> getGCCRegAliases() const override
{
90 static const TargetInfo::GCCRegAlias GCCRegAliases
[] = {
99 {{"s8", "sl"}, "sx8"},
100 {{"s9", "fp"}, "sx9"},
101 {{"s10", "lr"}, "sx10"},
102 {{"s11", "sp"}, "sx11"},
103 {{"s12", "outer"}, "sx12"},
105 {{"s14", "tp"}, "sx14"},
106 {{"s15", "got"}, "sx15"},
107 {{"s16", "plt"}, "sx16"},
108 {{"s17", "info"}, "sx17"},
156 return llvm::ArrayRef(GCCRegAliases
);
159 bool validateAsmConstraint(const char *&Name
,
160 TargetInfo::ConstraintInfo
&Info
) const override
{
165 Info
.setAllowsRegister();
171 bool allowsLargerPreferedTypeAlignment() const override
{ return false; }
173 } // namespace targets
175 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_VE_H