xref: /openbsd-src/gnu/llvm/clang/lib/Basic/Targets/PNaCl.h (revision 12c855180aad702bbcca06e0398d774beeafb155)
1e5dd7070Spatrick //===--- PNaCl.h - Declare PNaCl 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 PNaCl TargetInfo objects.
10e5dd7070Spatrick //
11e5dd7070Spatrick //===----------------------------------------------------------------------===//
12e5dd7070Spatrick 
13e5dd7070Spatrick #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H
14e5dd7070Spatrick #define LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H
15e5dd7070Spatrick 
16e5dd7070Spatrick #include "Mips.h"
17e5dd7070Spatrick #include "clang/Basic/TargetInfo.h"
18e5dd7070Spatrick #include "clang/Basic/TargetOptions.h"
19e5dd7070Spatrick #include "llvm/ADT/Triple.h"
20e5dd7070Spatrick #include "llvm/Support/Compiler.h"
21e5dd7070Spatrick 
22e5dd7070Spatrick namespace clang {
23e5dd7070Spatrick namespace targets {
24e5dd7070Spatrick 
25e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY PNaClTargetInfo : public TargetInfo {
26e5dd7070Spatrick public:
PNaClTargetInfo(const llvm::Triple & Triple,const TargetOptions & Opts)27e5dd7070Spatrick   PNaClTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
28e5dd7070Spatrick       : TargetInfo(Triple) {
29e5dd7070Spatrick     this->LongAlign = 32;
30e5dd7070Spatrick     this->LongWidth = 32;
31e5dd7070Spatrick     this->PointerAlign = 32;
32e5dd7070Spatrick     this->PointerWidth = 32;
33e5dd7070Spatrick     this->IntMaxType = TargetInfo::SignedLongLong;
34e5dd7070Spatrick     this->Int64Type = TargetInfo::SignedLongLong;
35e5dd7070Spatrick     this->DoubleAlign = 64;
36e5dd7070Spatrick     this->LongDoubleWidth = 64;
37e5dd7070Spatrick     this->LongDoubleAlign = 64;
38e5dd7070Spatrick     this->SizeType = TargetInfo::UnsignedInt;
39e5dd7070Spatrick     this->PtrDiffType = TargetInfo::SignedInt;
40e5dd7070Spatrick     this->IntPtrType = TargetInfo::SignedInt;
41e5dd7070Spatrick     this->RegParmMax = 0; // Disallow regparm
42e5dd7070Spatrick   }
43e5dd7070Spatrick 
44e5dd7070Spatrick   void getArchDefines(const LangOptions &Opts, MacroBuilder &Builder) const;
45e5dd7070Spatrick 
getTargetDefines(const LangOptions & Opts,MacroBuilder & Builder)46e5dd7070Spatrick   void getTargetDefines(const LangOptions &Opts,
47e5dd7070Spatrick                         MacroBuilder &Builder) const override {
48e5dd7070Spatrick     getArchDefines(Opts, Builder);
49e5dd7070Spatrick   }
50e5dd7070Spatrick 
hasFeature(StringRef Feature)51e5dd7070Spatrick   bool hasFeature(StringRef Feature) const override {
52e5dd7070Spatrick     return Feature == "pnacl";
53e5dd7070Spatrick   }
54e5dd7070Spatrick 
getTargetBuiltins()55*12c85518Srobert   ArrayRef<Builtin::Info> getTargetBuiltins() const override {
56*12c85518Srobert     return std::nullopt;
57*12c85518Srobert   }
58e5dd7070Spatrick 
getBuiltinVaListKind()59e5dd7070Spatrick   BuiltinVaListKind getBuiltinVaListKind() const override {
60e5dd7070Spatrick     return TargetInfo::PNaClABIBuiltinVaList;
61e5dd7070Spatrick   }
62e5dd7070Spatrick 
63e5dd7070Spatrick   ArrayRef<const char *> getGCCRegNames() const override;
64e5dd7070Spatrick 
65e5dd7070Spatrick   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override;
66e5dd7070Spatrick 
validateAsmConstraint(const char * & Name,TargetInfo::ConstraintInfo & Info)67e5dd7070Spatrick   bool validateAsmConstraint(const char *&Name,
68e5dd7070Spatrick                              TargetInfo::ConstraintInfo &Info) const override {
69e5dd7070Spatrick     return false;
70e5dd7070Spatrick   }
71e5dd7070Spatrick 
getClobbers()72e5dd7070Spatrick   const char *getClobbers() const override { return ""; }
73ec727ea7Spatrick 
hasBitIntType()74*12c85518Srobert   bool hasBitIntType() const override { return true; }
75e5dd7070Spatrick };
76e5dd7070Spatrick 
77e5dd7070Spatrick // We attempt to use PNaCl (le32) frontend and Mips32EL backend.
78e5dd7070Spatrick class LLVM_LIBRARY_VISIBILITY NaClMips32TargetInfo : public MipsTargetInfo {
79e5dd7070Spatrick public:
NaClMips32TargetInfo(const llvm::Triple & Triple,const TargetOptions & Opts)80e5dd7070Spatrick   NaClMips32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
81e5dd7070Spatrick       : MipsTargetInfo(Triple, Opts) {}
82e5dd7070Spatrick 
getBuiltinVaListKind()83e5dd7070Spatrick   BuiltinVaListKind getBuiltinVaListKind() const override {
84e5dd7070Spatrick     return TargetInfo::PNaClABIBuiltinVaList;
85e5dd7070Spatrick   }
86e5dd7070Spatrick };
87e5dd7070Spatrick } // namespace targets
88e5dd7070Spatrick } // namespace clang
89e5dd7070Spatrick 
90e5dd7070Spatrick #endif // LLVM_CLANG_LIB_BASIC_TARGETS_PNACL_H
91