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