xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/M68k/M68k.td (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
104eeddc0SDimitry Andric//===-- M68k.td - Motorola 680x0 target definitions --------*- tablegen -*-===//
2fe6060f1SDimitry Andric//
3fe6060f1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4fe6060f1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5fe6060f1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fe6060f1SDimitry Andric//
7fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
8fe6060f1SDimitry Andric///
9fe6060f1SDimitry Andric/// \file
10fe6060f1SDimitry Andric/// This is a target description file for the Motorola 680x0 family, referred
11fe6060f1SDimitry Andric/// to here as the "M68k" architecture.
12fe6060f1SDimitry Andric///
13fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
14fe6060f1SDimitry Andric
15fe6060f1SDimitry Andricinclude "llvm/Target/Target.td"
16fe6060f1SDimitry Andric
17fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
18fe6060f1SDimitry Andric// M68k Subtarget features
19fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
20fe6060f1SDimitry Andric
21fe6060f1SDimitry Andricdef FeatureISA00
22fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68000", "SubtargetKind", "M00",
23fe6060f1SDimitry Andric                     "Is M68000 ISA supported">;
24fe6060f1SDimitry Andric
25fe6060f1SDimitry Andricdef FeatureISA10
26fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68010", "SubtargetKind", "M10",
27fe6060f1SDimitry Andric                     "Is M68010 ISA supported",
28fe6060f1SDimitry Andric                     [ FeatureISA00 ]>;
29fe6060f1SDimitry Andric
30fe6060f1SDimitry Andricdef FeatureISA20
31fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68020", "SubtargetKind", "M20",
32fe6060f1SDimitry Andric                     "Is M68020 ISA supported",
33fe6060f1SDimitry Andric                     [ FeatureISA10 ]>;
34fe6060f1SDimitry Andric
35fe6060f1SDimitry Andricdef FeatureISA30
36fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68030", "SubtargetKind", "M30",
37fe6060f1SDimitry Andric                     "Is M68030 ISA supported",
38fe6060f1SDimitry Andric                     [ FeatureISA20 ]>;
39fe6060f1SDimitry Andric
40*06c3fb27SDimitry Andricdef FeatureISA881
41*06c3fb27SDimitry Andric  : SubtargetFeature<"isa-68881", "FPUKind", "M881",
42*06c3fb27SDimitry Andric                     "Is M68881 (FPU) ISA supported">;
43*06c3fb27SDimitry Andric
44*06c3fb27SDimitry Andricdef FeatureISA882
45*06c3fb27SDimitry Andric  : SubtargetFeature<"isa-68882", "FPUKind", "M882",
46*06c3fb27SDimitry Andric                     "Is M68882 (FPU) ISA supported",
47*06c3fb27SDimitry Andric                     [ FeatureISA881 ]>;
48*06c3fb27SDimitry Andric
49fe6060f1SDimitry Andricdef FeatureISA40
50fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68040", "SubtargetKind", "M40",
51fe6060f1SDimitry Andric                     "Is M68040 ISA supported",
52*06c3fb27SDimitry Andric                     [ FeatureISA30, FeatureISA882 ]>;
53fe6060f1SDimitry Andric
54fe6060f1SDimitry Andricdef FeatureISA60
55fe6060f1SDimitry Andric  : SubtargetFeature<"isa-68060", "SubtargetKind", "M60",
56fe6060f1SDimitry Andric                     "Is M68060 ISA supported",
57fe6060f1SDimitry Andric                     [ FeatureISA40 ]>;
58fe6060f1SDimitry Andric
59fe6060f1SDimitry Andricforeach i = {0-6} in
60fe6060f1SDimitry Andric  def FeatureReserveA#i :
61fe6060f1SDimitry Andric      SubtargetFeature<"reserve-a"#i, "UserReservedRegister[M68k::A"#i#"]",
62fe6060f1SDimitry Andric                       "true", "Reserve A"#i#" register">;
63fe6060f1SDimitry Andricforeach i = {0-7} in
64fe6060f1SDimitry Andric  def FeatureReserveD#i :
65fe6060f1SDimitry Andric      SubtargetFeature<"reserve-d"#i, "UserReservedRegister[M68k::D"#i#"]",
66fe6060f1SDimitry Andric                       "true", "Reserve D"#i#" register">;
67fe6060f1SDimitry Andric
68fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
69fe6060f1SDimitry Andric// M68k processors supported.
70fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
71fe6060f1SDimitry Andric
72fe6060f1SDimitry Andricinclude "M68kSchedule.td"
73fe6060f1SDimitry Andric
74fe6060f1SDimitry Andricclass Proc<string Name, list<SubtargetFeature> Features>
75fe6060f1SDimitry Andric    : ProcessorModel<Name, GenericM68kModel, Features>;
76fe6060f1SDimitry Andric
77fe6060f1SDimitry Andricdef : Proc<"generic", [ FeatureISA00 ]>;
78fe6060f1SDimitry Andricdef : Proc<"M68000",  [ FeatureISA00 ]>;
79fe6060f1SDimitry Andricdef : Proc<"M68010",  [ FeatureISA10 ]>;
80fe6060f1SDimitry Andricdef : Proc<"M68020",  [ FeatureISA20 ]>;
81fe6060f1SDimitry Andricdef : Proc<"M68030",  [ FeatureISA30 ]>;
82fe6060f1SDimitry Andricdef : Proc<"M68040",  [ FeatureISA40 ]>;
83fe6060f1SDimitry Andricdef : Proc<"M68060",  [ FeatureISA60 ]>;
84fe6060f1SDimitry Andric
85fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
86fe6060f1SDimitry Andric// Register File Description
87fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
88fe6060f1SDimitry Andric
89fe6060f1SDimitry Andricinclude "M68kRegisterInfo.td"
90349cc55cSDimitry Andricinclude "GISel/M68kRegisterBanks.td"
91fe6060f1SDimitry Andric
92fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
93fe6060f1SDimitry Andric// Instruction Descriptions
94fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
95fe6060f1SDimitry Andric
96fe6060f1SDimitry Andricinclude "M68kInstrInfo.td"
97fe6060f1SDimitry Andric
98fe6060f1SDimitry Andricdef M68kInstrInfo : InstrInfo;
99fe6060f1SDimitry Andric
100fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
101fe6060f1SDimitry Andric// Calling Conventions
102fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
103fe6060f1SDimitry Andric
104fe6060f1SDimitry Andricinclude "M68kCallingConv.td"
105fe6060f1SDimitry Andric
106fe6060f1SDimitry Andric//===---------------------------------------------------------------------===//
107fe6060f1SDimitry Andric// Assembly Printers
108fe6060f1SDimitry Andric//===---------------------------------------------------------------------===//
109fe6060f1SDimitry Andric
110fe6060f1SDimitry Andricdef M68kAsmWriter : AsmWriter {
111fe6060f1SDimitry Andric string AsmWriterClassName = "InstPrinter";
112fe6060f1SDimitry Andric bit isMCAsmWriter = 1;
113fe6060f1SDimitry Andric}
114fe6060f1SDimitry Andric
115fe6060f1SDimitry Andric//===---------------------------------------------------------------------===//
116fe6060f1SDimitry Andric// Assembly Parsers
117fe6060f1SDimitry Andric//===---------------------------------------------------------------------===//
118fe6060f1SDimitry Andric
119fe6060f1SDimitry Andricdef M68kAsmParser : AsmParser {
120fe6060f1SDimitry Andric  let ShouldEmitMatchRegisterName = 0;
121fe6060f1SDimitry Andric  let ShouldEmitMatchRegisterAltName = 0;
122fe6060f1SDimitry Andric}
123fe6060f1SDimitry Andric
124fe6060f1SDimitry Andricdef M68kAsmParserVariant : AsmParserVariant {
125fe6060f1SDimitry Andric  int Variant = 0;
126fe6060f1SDimitry Andric}
127fe6060f1SDimitry Andric
128fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
129fe6060f1SDimitry Andric// Target
130fe6060f1SDimitry Andric//===----------------------------------------------------------------------===//
131fe6060f1SDimitry Andric
132fe6060f1SDimitry Andricdef M68k : Target {
133fe6060f1SDimitry Andric  let InstructionSet = M68kInstrInfo;
134fe6060f1SDimitry Andric  let AssemblyParsers = [M68kAsmParser];
135fe6060f1SDimitry Andric  let AssemblyWriters = [M68kAsmWriter];
136fe6060f1SDimitry Andric}
137