1e5dd7070Spatrick //===--- XCore.h - Declare XCore 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 XCore TargetInfo objects. 10e5dd7070Spatrick // 11e5dd7070Spatrick //===----------------------------------------------------------------------===// 12e5dd7070Spatrick 13e5dd7070Spatrick #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_XCORE_H 14e5dd7070Spatrick #define LLVM_CLANG_LIB_BASIC_TARGETS_XCORE_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 XCoreTargetInfo : public TargetInfo { 25e5dd7070Spatrick 26e5dd7070Spatrick public: XCoreTargetInfo(const llvm::Triple & Triple,const TargetOptions &)27e5dd7070Spatrick XCoreTargetInfo(const llvm::Triple &Triple, const TargetOptions &) 28e5dd7070Spatrick : TargetInfo(Triple) { 29e5dd7070Spatrick NoAsmVariants = true; 30e5dd7070Spatrick LongLongAlign = 32; 31e5dd7070Spatrick SuitableAlign = 32; 32e5dd7070Spatrick DoubleAlign = LongDoubleAlign = 32; 33e5dd7070Spatrick SizeType = UnsignedInt; 34e5dd7070Spatrick PtrDiffType = SignedInt; 35e5dd7070Spatrick IntPtrType = SignedInt; 36e5dd7070Spatrick WCharType = UnsignedChar; 37e5dd7070Spatrick WIntType = UnsignedInt; 38e5dd7070Spatrick UseZeroLengthBitfieldAlignment = true; 39e5dd7070Spatrick resetDataLayout("e-m:e-p:32:32-i1:8:32-i8:8:32-i16:16:32-i64:32" 40e5dd7070Spatrick "-f64:32-a:0:32-n32"); 41e5dd7070Spatrick } 42e5dd7070Spatrick 43e5dd7070Spatrick void getTargetDefines(const LangOptions &Opts, 44e5dd7070Spatrick MacroBuilder &Builder) const override; 45e5dd7070Spatrick 46e5dd7070Spatrick ArrayRef<Builtin::Info> getTargetBuiltins() const override; 47e5dd7070Spatrick getBuiltinVaListKind()48e5dd7070Spatrick BuiltinVaListKind getBuiltinVaListKind() const override { 49e5dd7070Spatrick return TargetInfo::VoidPtrBuiltinVaList; 50e5dd7070Spatrick } 51e5dd7070Spatrick getClobbers()52e5dd7070Spatrick const char *getClobbers() const override { return ""; } 53e5dd7070Spatrick getGCCRegNames()54e5dd7070Spatrick ArrayRef<const char *> getGCCRegNames() const override { 55e5dd7070Spatrick static const char *const GCCRegNames[] = { 56e5dd7070Spatrick "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", 57e5dd7070Spatrick "r8", "r9", "r10", "r11", "cp", "dp", "sp", "lr" 58e5dd7070Spatrick }; 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 } 70e5dd7070Spatrick getEHDataRegisterNumber(unsigned RegNo)71e5dd7070Spatrick int getEHDataRegisterNumber(unsigned RegNo) const override { 72e5dd7070Spatrick // R0=ExceptionPointerRegister R1=ExceptionSelectorRegister 73e5dd7070Spatrick return (RegNo < 2) ? RegNo : -1; 74e5dd7070Spatrick } 75e5dd7070Spatrick allowsLargerPreferedTypeAlignment()76e5dd7070Spatrick bool allowsLargerPreferedTypeAlignment() const override { return false; } 77ec727ea7Spatrick hasBitIntType()78*12c85518Srobert bool hasBitIntType() const override { return true; } 79e5dd7070Spatrick }; 80e5dd7070Spatrick } // namespace targets 81e5dd7070Spatrick } // namespace clang 82e5dd7070Spatrick #endif // LLVM_CLANG_LIB_BASIC_TARGETS_XCORE_H 83