xref: /freebsd/contrib/llvm-project/llvm/lib/Target/VE/VE.td (revision a0ca4af9455b844c5e094fc1b09b1390ffa979fc)
1//===-- VE.td - Describe the VE Target Machine -------------*- tablegen -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9//
10//===----------------------------------------------------------------------===//
11
12//===----------------------------------------------------------------------===//
13// Target-independent interfaces which we are implementing
14//===----------------------------------------------------------------------===//
15
16include "llvm/Target/Target.td"
17
18//===----------------------------------------------------------------------===//
19// VE Subtarget features.
20//
21def FeatureEnableVPU
22  : SubtargetFeature<"vpu", "EnableVPU", "true",
23                     "Enable the VPU">;
24
25//===----------------------------------------------------------------------===//
26// Register File, Calling Conv, Instruction Descriptions
27//===----------------------------------------------------------------------===//
28
29include "VERegisterInfo.td"
30include "VECallingConv.td"
31include "VEInstrInfo.td"
32
33def VEInstrInfo : InstrInfo {}
34
35def VEAsmParser : AsmParser {
36  // Use both VE register name matcher to accept "S0~S63" register names
37  // and default register matcher to accept other registeres.
38  let AllowDuplicateRegisterNames = 1;
39  let ShouldEmitMatchRegisterAltName = 1;
40}
41
42//===----------------------------------------------------------------------===//
43// VE processors supported.
44//===----------------------------------------------------------------------===//
45
46class Proc<string Name, list<SubtargetFeature> Features>
47 : Processor<Name, NoItineraries, Features>;
48
49def : Proc<"generic", [FeatureEnableVPU]>;
50
51//===----------------------------------------------------------------------===//
52// Declare the target which we are implementing
53//===----------------------------------------------------------------------===//
54
55def VEAsmWriter : AsmWriter {
56  string AsmWriterClassName  = "InstPrinter";
57  int PassSubtarget = 1;
58  int Variant = 0;
59}
60
61def VE : Target {
62  // Pull in Instruction Info:
63  let InstructionSet = VEInstrInfo;
64  let AssemblyParsers = [VEAsmParser];
65  let AssemblyWriters = [VEAsmWriter];
66  let AllowRegisterRenaming = 1;
67}
68