xref: /openbsd-src/gnu/llvm/clang/lib/Basic/Targets/M68k.h (revision 12c855180aad702bbcca06e0398d774beeafb155)
1a9ac8606Spatrick //===--- M68k.h - Declare M68k target feature support -------*- C++ -*-===//
2a9ac8606Spatrick //
3a9ac8606Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4a9ac8606Spatrick // See https://llvm.org/LICENSE.txt for license information.
5a9ac8606Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a9ac8606Spatrick //
7a9ac8606Spatrick //===----------------------------------------------------------------------===//
8a9ac8606Spatrick //
9a9ac8606Spatrick // This file declares M68k TargetInfo objects.
10a9ac8606Spatrick //
11a9ac8606Spatrick //===----------------------------------------------------------------------===//
12a9ac8606Spatrick 
13a9ac8606Spatrick #ifndef LLVM_CLANG_LIB_BASIC_TARGETS_M68K_H
14a9ac8606Spatrick #define LLVM_CLANG_LIB_BASIC_TARGETS_M68K_H
15a9ac8606Spatrick 
16a9ac8606Spatrick #include "OSTargets.h"
17a9ac8606Spatrick #include "clang/Basic/TargetInfo.h"
18a9ac8606Spatrick #include "clang/Basic/TargetOptions.h"
19a9ac8606Spatrick #include "llvm/ADT/Triple.h"
20a9ac8606Spatrick #include "llvm/Support/Compiler.h"
21*12c85518Srobert #include <optional>
22a9ac8606Spatrick 
23a9ac8606Spatrick namespace clang {
24a9ac8606Spatrick namespace targets {
25a9ac8606Spatrick 
26a9ac8606Spatrick class LLVM_LIBRARY_VISIBILITY M68kTargetInfo : public TargetInfo {
27a9ac8606Spatrick   static const char *const GCCRegNames[];
28a9ac8606Spatrick 
29a9ac8606Spatrick   enum CPUKind {
30a9ac8606Spatrick     CK_Unknown,
31a9ac8606Spatrick     CK_68000,
32a9ac8606Spatrick     CK_68010,
33a9ac8606Spatrick     CK_68020,
34a9ac8606Spatrick     CK_68030,
35a9ac8606Spatrick     CK_68040,
36a9ac8606Spatrick     CK_68060
37a9ac8606Spatrick   } CPU = CK_Unknown;
38a9ac8606Spatrick 
39a9ac8606Spatrick public:
40a9ac8606Spatrick   M68kTargetInfo(const llvm::Triple &Triple, const TargetOptions &);
41a9ac8606Spatrick 
42a9ac8606Spatrick   void getTargetDefines(const LangOptions &Opts,
43a9ac8606Spatrick                         MacroBuilder &Builder) const override;
44a9ac8606Spatrick   ArrayRef<Builtin::Info> getTargetBuiltins() const override;
45a9ac8606Spatrick   bool hasFeature(StringRef Feature) const override;
46a9ac8606Spatrick   ArrayRef<const char *> getGCCRegNames() const override;
47a9ac8606Spatrick   ArrayRef<TargetInfo::GCCRegAlias> getGCCRegAliases() const override;
48a9ac8606Spatrick   std::string convertConstraint(const char *&Constraint) const override;
49a9ac8606Spatrick   bool validateAsmConstraint(const char *&Name,
50a9ac8606Spatrick                              TargetInfo::ConstraintInfo &info) const override;
51*12c85518Srobert   std::optional<std::string> handleAsmEscapedChar(char EscChar) const override;
52a9ac8606Spatrick   const char *getClobbers() const override;
53a9ac8606Spatrick   BuiltinVaListKind getBuiltinVaListKind() const override;
54a9ac8606Spatrick   bool setCPU(const std::string &Name) override;
55a9ac8606Spatrick };
56a9ac8606Spatrick 
57a9ac8606Spatrick } // namespace targets
58a9ac8606Spatrick } // namespace clang
59a9ac8606Spatrick 
60a9ac8606Spatrick #endif
61