brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · d7d05f9 Raw
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