| //===-- M68k.td - Motorola 680x0 target definitions ------*- tablegen -*-===// |
| // |
| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This is a target description file for the Motorola 680x0 family, referred |
| /// to here as the "M68k" architecture. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| include "llvm/Target/Target.td" |
| |
| //===----------------------------------------------------------------------===// |
| // M68k Subtarget features |
| //===----------------------------------------------------------------------===// |
| |
| def FeatureISA00 |
| : SubtargetFeature<"isa-68000", "SubtargetKind", "M00", |
| "Is M68000 ISA supported">; |
| |
| def FeatureISA10 |
| : SubtargetFeature<"isa-68010", "SubtargetKind", "M10", |
| "Is M68010 ISA supported", |
| [ FeatureISA00 ]>; |
| |
| def FeatureISA20 |
| : SubtargetFeature<"isa-68020", "SubtargetKind", "M20", |
| "Is M68020 ISA supported", |
| [ FeatureISA10 ]>; |
| |
| def FeatureISA30 |
| : SubtargetFeature<"isa-68030", "SubtargetKind", "M30", |
| "Is M68030 ISA supported", |
| [ FeatureISA20 ]>; |
| |
| def FeatureISA40 |
| : SubtargetFeature<"isa-68040", "SubtargetKind", "M40", |
| "Is M68040 ISA supported", |
| [ FeatureISA30 ]>; |
| |
| def FeatureISA60 |
| : SubtargetFeature<"isa-68060", "SubtargetKind", "M60", |
| "Is M68060 ISA supported", |
| [ FeatureISA40 ]>; |
| |
| foreach i = {0-6} in |
| def FeatureReserveA#i : |
| SubtargetFeature<"reserve-a"#i, "UserReservedRegister[M68k::A"#i#"]", |
| "true", "Reserve A"#i#" register">; |
| foreach i = {0-7} in |
| def FeatureReserveD#i : |
| SubtargetFeature<"reserve-d"#i, "UserReservedRegister[M68k::D"#i#"]", |
| "true", "Reserve D"#i#" register">; |
| |
| //===----------------------------------------------------------------------===// |
| // M68k processors supported. |
| //===----------------------------------------------------------------------===// |
| |
| include "M68kSchedule.td" |
| |
| class Proc<string Name, list<SubtargetFeature> Features> |
| : ProcessorModel<Name, GenericM68kModel, Features>; |
| |
| def : Proc<"generic", [ FeatureISA00 ]>; |
| def : Proc<"M68000", [ FeatureISA00 ]>; |
| def : Proc<"M68010", [ FeatureISA10 ]>; |
| def : Proc<"M68020", [ FeatureISA20 ]>; |
| def : Proc<"M68030", [ FeatureISA30 ]>; |
| def : Proc<"M68040", [ FeatureISA40 ]>; |
| def : Proc<"M68060", [ FeatureISA60 ]>; |
| |
| //===----------------------------------------------------------------------===// |
| // Register File Description |
| //===----------------------------------------------------------------------===// |
| |
| include "M68kRegisterInfo.td" |
| include "GISel/M68kRegisterBanks.td" |
| |
| //===----------------------------------------------------------------------===// |
| // Instruction Descriptions |
| //===----------------------------------------------------------------------===// |
| |
| include "M68kInstrInfo.td" |
| |
| def M68kInstrInfo : InstrInfo; |
| |
| //===----------------------------------------------------------------------===// |
| // Calling Conventions |
| //===----------------------------------------------------------------------===// |
| |
| include "M68kCallingConv.td" |
| |
| //===---------------------------------------------------------------------===// |
| // Assembly Printers |
| //===---------------------------------------------------------------------===// |
| |
| def M68kAsmWriter : AsmWriter { |
| string AsmWriterClassName = "InstPrinter"; |
| bit isMCAsmWriter = 1; |
| } |
| |
| //===---------------------------------------------------------------------===// |
| // Assembly Parsers |
| //===---------------------------------------------------------------------===// |
| |
| def M68kAsmParser : AsmParser { |
| let ShouldEmitMatchRegisterName = 0; |
| let ShouldEmitMatchRegisterAltName = 0; |
| } |
| |
| def M68kAsmParserVariant : AsmParserVariant { |
| int Variant = 0; |
| } |
| |
| //===----------------------------------------------------------------------===// |
| // Target |
| //===----------------------------------------------------------------------===// |
| |
| def M68k : Target { |
| let InstructionSet = M68kInstrInfo; |
| let AssemblyParsers = [M68kAsmParser]; |
| let AssemblyWriters = [M68kAsmWriter]; |
| } |