diff options
Diffstat (limited to 'clang/lib/Basic/Targets/PNaCl.h')
| -rw-r--r-- | clang/lib/Basic/Targets/PNaCl.h | 86 | 
1 files changed, 86 insertions, 0 deletions
| diff --git a/clang/lib/Basic/Targets/PNaCl.h b/clang/lib/Basic/Targets/PNaCl.h new file mode 100644 index 000000000000..ab4abf9fc567 --- /dev/null +++ b/clang/lib/Basic/Targets/PNaCl.h @@ -0,0 +1,86 @@ +//===--- PNaCl.h - Declare PNaCl 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 PNaCl TargetInfo objects. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H +#define LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H + +#include "Mips.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 PNaClTargetInfo : public TargetInfo { +public: +  PNaClTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) +      : TargetInfo(Triple) { +    this->LongAlign = 32; +    this->LongWidth = 32; +    this->PointerAlign = 32; +    this->PointerWidth = 32; +    this->IntMaxType = TargetInfo::SignedLongLong; +    this->Int64Type = TargetInfo::SignedLongLong; +    this->DoubleAlign = 64; +    this->LongDoubleWidth = 64; +    this->LongDoubleAlign = 64; +    this->SizeType = TargetInfo::UnsignedInt; +    this->PtrDiffType = TargetInfo::SignedInt; +    this->IntPtrType = TargetInfo::SignedInt; +    this->RegParmMax = 0; // Disallow regparm +  } + +  void getArchDefines(const LangOptions &Opts, MacroBuilder &Builder) const; + +  void getTargetDefines(const LangOptions &Opts, +                        MacroBuilder &Builder) const override { +    getArchDefines(Opts, Builder); +  } + +  bool hasFeature(StringRef Feature) const override { +    return Feature == "pnacl"; +  } + +  ArrayRef<Builtin::Info> getTargetBuiltins() const override { return None; } + +  BuiltinVaListKind getBuiltinVaListKind() const override { +    return TargetInfo::PNaClABIBuiltinVaList; +  } + +  ArrayRef<const char *> getGCCRegNames() const override; + +  ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override; + +  bool validateAsmConstraint(const char *&Name, +                             TargetInfo::ConstraintInfo &Info) const override { +    return false; +  } + +  const char *getClobbers() const override { return ""; } +}; + +// We attempt to use PNaCl (le32) frontend and Mips32EL backend. +class LLVM_LIBRARY_VISIBILITY NaClMips32TargetInfo : public MipsTargetInfo { +public: +  NaClMips32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) +      : MipsTargetInfo(Triple, Opts) {} + +  BuiltinVaListKind getBuiltinVaListKind() const override { +    return TargetInfo::PNaClABIBuiltinVaList; +  } +}; +} // namespace targets +} // namespace clang + +#endif // LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H | 
