123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //===--- VE.h - Declare VE target feature support ---------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file declares VE TargetInfo objects.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
- #define LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
- #include "clang/Basic/TargetInfo.h"
- #include "clang/Basic/TargetOptions.h"
- #include "llvm/ADT/Triple.h"
- #include "llvm/Support/Compiler.h"
- namespace clang {
- namespace targets {
- class LLVM_LIBRARY_VISIBILITY VETargetInfo : public TargetInfo {
- static const Builtin::Info BuiltinInfo[];
- public:
- VETargetInfo(const llvm::Triple &Triple, const TargetOptions &)
- : TargetInfo(Triple) {
- NoAsmVariants = true;
- LongDoubleWidth = 128;
- LongDoubleAlign = 128;
- LongDoubleFormat = &llvm::APFloat::IEEEquad();
- DoubleAlign = LongLongAlign = 64;
- SuitableAlign = 64;
- LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
- SizeType = UnsignedLong;
- PtrDiffType = SignedLong;
- IntPtrType = SignedLong;
- IntMaxType = SignedLong;
- Int64Type = SignedLong;
- RegParmMax = 8;
- MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
- WCharType = UnsignedInt;
- WIntType = UnsignedInt;
- UseZeroLengthBitfieldAlignment = true;
- resetDataLayout(
- "e-m:e-i64:64-n32:64-S128-v64:64:64-v128:64:64-v256:64:64-v512:64:64-"
- "v1024:64:64-v2048:64:64-v4096:64:64-v8192:64:64-v16384:64:64");
- }
- void getTargetDefines(const LangOptions &Opts,
- MacroBuilder &Builder) const override;
- bool hasSjLjLowering() const override { return true; }
- ArrayRef<Builtin::Info> getTargetBuiltins() const override;
- BuiltinVaListKind getBuiltinVaListKind() const override {
- return TargetInfo::VoidPtrBuiltinVaList;
- }
- CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
- switch (CC) {
- default:
- return CCCR_Warning;
- case CC_C:
- return CCCR_OK;
- }
- }
- const char *getClobbers() const override { return ""; }
- ArrayRef<const char *> getGCCRegNames() const override {
- static const char *const GCCRegNames[] = {
- // Regular registers
- "sx0", "sx1", "sx2", "sx3", "sx4", "sx5", "sx6", "sx7",
- "sx8", "sx9", "sx10", "sx11", "sx12", "sx13", "sx14", "sx15",
- "sx16", "sx17", "sx18", "sx19", "sx20", "sx21", "sx22", "sx23",
- "sx24", "sx25", "sx26", "sx27", "sx28", "sx29", "sx30", "sx31",
- "sx32", "sx33", "sx34", "sx35", "sx36", "sx37", "sx38", "sx39",
- "sx40", "sx41", "sx42", "sx43", "sx44", "sx45", "sx46", "sx47",
- "sx48", "sx49", "sx50", "sx51", "sx52", "sx53", "sx54", "sx55",
- "sx56", "sx57", "sx58", "sx59", "sx60", "sx61", "sx62", "sx63",
- };
- return llvm::makeArrayRef(GCCRegNames);
- }
- ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
- static const TargetInfo::GCCRegAlias GCCRegAliases[] = {
- {{"s0"}, "sx0"},
- {{"s1"}, "sx1"},
- {{"s2"}, "sx2"},
- {{"s3"}, "sx3"},
- {{"s4"}, "sx4"},
- {{"s5"}, "sx5"},
- {{"s6"}, "sx6"},
- {{"s7"}, "sx7"},
- {{"s8", "sl"}, "sx8"},
- {{"s9", "fp"}, "sx9"},
- {{"s10", "lr"}, "sx10"},
- {{"s11", "sp"}, "sx11"},
- {{"s12", "outer"}, "sx12"},
- {{"s13"}, "sx13"},
- {{"s14", "tp"}, "sx14"},
- {{"s15", "got"}, "sx15"},
- {{"s16", "plt"}, "sx16"},
- {{"s17", "info"}, "sx17"},
- {{"s18"}, "sx18"},
- {{"s19"}, "sx19"},
- {{"s20"}, "sx20"},
- {{"s21"}, "sx21"},
- {{"s22"}, "sx22"},
- {{"s23"}, "sx23"},
- {{"s24"}, "sx24"},
- {{"s25"}, "sx25"},
- {{"s26"}, "sx26"},
- {{"s27"}, "sx27"},
- {{"s28"}, "sx28"},
- {{"s29"}, "sx29"},
- {{"s30"}, "sx30"},
- {{"s31"}, "sx31"},
- {{"s32"}, "sx32"},
- {{"s33"}, "sx33"},
- {{"s34"}, "sx34"},
- {{"s35"}, "sx35"},
- {{"s36"}, "sx36"},
- {{"s37"}, "sx37"},
- {{"s38"}, "sx38"},
- {{"s39"}, "sx39"},
- {{"s40"}, "sx40"},
- {{"s41"}, "sx41"},
- {{"s42"}, "sx42"},
- {{"s43"}, "sx43"},
- {{"s44"}, "sx44"},
- {{"s45"}, "sx45"},
- {{"s46"}, "sx46"},
- {{"s47"}, "sx47"},
- {{"s48"}, "sx48"},
- {{"s49"}, "sx49"},
- {{"s50"}, "sx50"},
- {{"s51"}, "sx51"},
- {{"s52"}, "sx52"},
- {{"s53"}, "sx53"},
- {{"s54"}, "sx54"},
- {{"s55"}, "sx55"},
- {{"s56"}, "sx56"},
- {{"s57"}, "sx57"},
- {{"s58"}, "sx58"},
- {{"s59"}, "sx59"},
- {{"s60"}, "sx60"},
- {{"s61"}, "sx61"},
- {{"s62"}, "sx62"},
- {{"s63"}, "sx63"},
- };
- return llvm::makeArrayRef(GCCRegAliases);
- }
- bool validateAsmConstraint(const char *&Name,
- TargetInfo::ConstraintInfo &Info) const override {
- switch (*Name) {
- default:
- return false;
- case 'v':
- Info.setAllowsRegister();
- return true;
- }
- return false;
- }
- bool allowsLargerPreferedTypeAlignment() const override { return false; }
- };
- } // namespace targets
- } // namespace clang
- #endif // LLVM_CLANG_LIB_BASIC_TARGETS_VE_H
|