104 lines · c
1//===--- MSP430.h - Declare MSP430 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-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares MSP430 TargetInfo objects.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H14#define LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H15 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 21namespace clang {22namespace targets {23 24class LLVM_LIBRARY_VISIBILITY MSP430TargetInfo : public TargetInfo {25 static const char *const GCCRegNames[];26 27public:28 MSP430TargetInfo(const llvm::Triple &Triple, const TargetOptions &)29 : TargetInfo(Triple) {30 TLSSupported = false;31 IntWidth = 16;32 IntAlign = 16;33 LongWidth = 32;34 LongLongWidth = 64;35 LongAlign = LongLongAlign = 16;36 FloatWidth = 32;37 FloatAlign = 16;38 DoubleWidth = LongDoubleWidth = 64;39 DoubleAlign = LongDoubleAlign = 16;40 PointerWidth = 16;41 PointerAlign = 16;42 SuitableAlign = 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");49 }50 void getTargetDefines(const LangOptions &Opts,51 MacroBuilder &Builder) const override;52 53 llvm::SmallVector<Builtin::InfosShard> getTargetBuiltins() const override {54 // FIXME: Implement.55 return {};56 }57 58 bool allowsLargerPreferedTypeAlignment() const override { return false; }59 60 bool hasFeature(StringRef Feature) const override {61 return Feature == "msp430";62 }63 64 ArrayRef<const char *> getGCCRegNames() const override;65 66 ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override {67 // Make r0 - r3 be recognized by llc (f.e., in clobber list)68 static const TargetInfo::GCCRegAlias GCCRegAliases[] = {69 {{"r0"}, "pc"},70 {{"r1"}, "sp"},71 {{"r2"}, "sr"},72 {{"r3"}, "cg"},73 };74 return llvm::ArrayRef(GCCRegAliases);75 }76 77 bool validateAsmConstraint(const char *&Name,78 TargetInfo::ConstraintInfo &info) const override {79 // FIXME: implement80 switch (*Name) {81 case 'K': // the constant 182 case 'L': // constant -1^20 .. 1^1983 case 'M': // constant 1-4:84 return true;85 }86 // No target constraints for now.87 return false;88 }89 90 std::string_view getClobbers() const override {91 // FIXME: Is this really right?92 return "";93 }94 95 BuiltinVaListKind getBuiltinVaListKind() const override {96 // FIXME: implement97 return TargetInfo::CharPtrBuiltinVaList;98 }99};100 101} // namespace targets102} // namespace clang103#endif // LLVM_CLANG_LIB_BASIC_TARGETS_MSP430_H104