1 //===--- MSP430.h - Declare MSP430 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 MSP430 TargetInfo objects.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H
14 #define LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H
16 #include "clang/Basic/TargetInfo.h"
17 #include "clang/Basic/TargetOptions.h"
18 #include "llvm/ADT/Triple.h"
19 #include "llvm/Support/Compiler.h"
24 class LLVM_LIBRARY_VISIBILITY MSP430TargetInfo : public TargetInfo {
25 static const char *const GCCRegNames[];
28 MSP430TargetInfo(const llvm::Triple &Triple, const TargetOptions &)
29 : TargetInfo(Triple) {
35 LongAlign = LongLongAlign = 16;
38 DoubleWidth = LongDoubleWidth = 64;
39 DoubleAlign = LongDoubleAlign = 16;
43 SizeType = UnsignedInt;
44 IntMaxType = SignedLongLong;
45 IntPtrType = SignedInt;
46 PtrDiffType = SignedInt;
47 SigAtomicType = SignedLong;
48 resetDataLayout("e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16");
50 void getTargetDefines(const LangOptions &Opts,
51 MacroBuilder &Builder) const override;
53 ArrayRef<Builtin::Info> getTargetBuiltins() const override {
58 bool allowsLargerPreferedTypeAlignment() const override { return false; }
60 bool hasFeature(StringRef Feature) const override {
61 return Feature == "msp430";
64 ArrayRef<const char *> getGCCRegNames() const override;
66 ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {
71 bool validateAsmConstraint(const char *&Name,
72 TargetInfo::ConstraintInfo &info) const override {
75 case 'K': // the constant 1
76 case 'L': // constant -1^20 .. 1^19
77 case 'M': // constant 1-4:
80 // No target constraints for now.
84 const char *getClobbers() const override {
85 // FIXME: Is this really right?
89 BuiltinVaListKind getBuiltinVaListKind() const override {
91 return TargetInfo::CharPtrBuiltinVaList;
95 } // namespace targets
97 #endif // LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H