1*0b57cec5SDimitry Andric//===-- BPF.td - Describe the BPF Target Machine -----------*- tablegen -*-===// 2*0b57cec5SDimitry Andric// 3*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric// 7*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric 9*0b57cec5SDimitry Andricinclude "llvm/Target/Target.td" 10*0b57cec5SDimitry Andric 11*0b57cec5SDimitry Andricinclude "BPFRegisterInfo.td" 12*0b57cec5SDimitry Andricinclude "BPFCallingConv.td" 13*0b57cec5SDimitry Andricinclude "BPFInstrInfo.td" 14*0b57cec5SDimitry Andric 15*0b57cec5SDimitry Andricdef BPFInstrInfo : InstrInfo; 16*0b57cec5SDimitry Andric 17*0b57cec5SDimitry Andricclass Proc<string Name, list<SubtargetFeature> Features> 18*0b57cec5SDimitry Andric : Processor<Name, NoItineraries, Features>; 19*0b57cec5SDimitry Andric 20*0b57cec5SDimitry Andricdef : Proc<"generic", []>; 21*0b57cec5SDimitry Andricdef : Proc<"v1", []>; 22*0b57cec5SDimitry Andricdef : Proc<"v2", []>; 23*0b57cec5SDimitry Andricdef : Proc<"v3", []>; 24*0b57cec5SDimitry Andricdef : Proc<"probe", []>; 25*0b57cec5SDimitry Andric 26*0b57cec5SDimitry Andricdef DummyFeature : SubtargetFeature<"dummy", "isDummyMode", 27*0b57cec5SDimitry Andric "true", "unused feature">; 28*0b57cec5SDimitry Andric 29*0b57cec5SDimitry Andricdef ALU32 : SubtargetFeature<"alu32", "HasAlu32", "true", 30*0b57cec5SDimitry Andric "Enable ALU32 instructions">; 31*0b57cec5SDimitry Andric 32*0b57cec5SDimitry Andricdef DwarfRIS: SubtargetFeature<"dwarfris", "UseDwarfRIS", "true", 33*0b57cec5SDimitry Andric "Disable MCAsmInfo DwarfUsesRelocationsAcrossSections">; 34*0b57cec5SDimitry Andric 35*0b57cec5SDimitry Andricdef BPFInstPrinter : AsmWriter { 36*0b57cec5SDimitry Andric string AsmWriterClassName = "InstPrinter"; 37*0b57cec5SDimitry Andric bit isMCAsmWriter = 1; 38*0b57cec5SDimitry Andric} 39*0b57cec5SDimitry Andric 40*0b57cec5SDimitry Andricdef BPFAsmParser : AsmParser { 41*0b57cec5SDimitry Andric bit HasMnemonicFirst = 0; 42*0b57cec5SDimitry Andric} 43*0b57cec5SDimitry Andric 44*0b57cec5SDimitry Andricdef BPFAsmParserVariant : AsmParserVariant { 45*0b57cec5SDimitry Andric int Variant = 0; 46*0b57cec5SDimitry Andric string Name = "BPF"; 47*0b57cec5SDimitry Andric string BreakCharacters = "."; 48*0b57cec5SDimitry Andric string TokenizingCharacters = "#()[]=:.<>!+*"; 49*0b57cec5SDimitry Andric} 50*0b57cec5SDimitry Andric 51*0b57cec5SDimitry Andricdef BPF : Target { 52*0b57cec5SDimitry Andric let InstructionSet = BPFInstrInfo; 53*0b57cec5SDimitry Andric let AssemblyWriters = [BPFInstPrinter]; 54*0b57cec5SDimitry Andric let AssemblyParsers = [BPFAsmParser]; 55*0b57cec5SDimitry Andric let AssemblyParserVariants = [BPFAsmParserVariant]; 56*0b57cec5SDimitry Andric} 57