xref: /freebsd/contrib/llvm-project/llvm/lib/Target/BPF/BPF.td (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
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