1249259Sdim//===- AArch64.td - Describe the AArch64 Target Machine -------*- tblgen -*-==//
2249259Sdim//
3249259Sdim//                     The LLVM Compiler Infrastructure
4249259Sdim//
5249259Sdim// This file is distributed under the University of Illinois Open Source
6249259Sdim// License. See LICENSE.TXT for details.
7249259Sdim//
8249259Sdim//===----------------------------------------------------------------------===//
9249259Sdim//
10249259Sdim// This is the top level entry point for the AArch64 target.
11249259Sdim//
12249259Sdim//===----------------------------------------------------------------------===//
13249259Sdim
14249259Sdim//===----------------------------------------------------------------------===//
15249259Sdim// Target-independent interfaces
16249259Sdim//===----------------------------------------------------------------------===//
17249259Sdim
18249259Sdiminclude "llvm/Target/Target.td"
19249259Sdim
20249259Sdim//===----------------------------------------------------------------------===//
21249259Sdim// AArch64 Subtarget features.
22249259Sdim//
23249259Sdim
24263509Sdimdef FeatureFPARMv8 : SubtargetFeature<"fp-armv8", "HasFPARMv8", "true",
25263509Sdim  "Enable ARMv8 FP">;
26263509Sdim
27249259Sdimdef FeatureNEON : SubtargetFeature<"neon", "HasNEON", "true",
28263509Sdim  "Enable Advanced SIMD instructions", [FeatureFPARMv8]>;
29249259Sdim
30249259Sdimdef FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",
31249259Sdim  "Enable cryptographic instructions">;
32249259Sdim
33249259Sdim//===----------------------------------------------------------------------===//
34249259Sdim// AArch64 Processors
35249259Sdim//
36249259Sdim
37249259Sdiminclude "AArch64Schedule.td"
38249259Sdim
39263509Sdimdef : Processor<"generic", GenericItineraries, [FeatureFPARMv8]>;
40249259Sdim
41249259Sdim//===----------------------------------------------------------------------===//
42249259Sdim// Register File Description
43249259Sdim//===----------------------------------------------------------------------===//
44249259Sdim
45249259Sdiminclude "AArch64RegisterInfo.td"
46249259Sdim
47249259Sdiminclude "AArch64CallingConv.td"
48249259Sdim
49249259Sdim//===----------------------------------------------------------------------===//
50249259Sdim// Instruction Descriptions
51249259Sdim//===----------------------------------------------------------------------===//
52249259Sdim
53249259Sdiminclude "AArch64InstrInfo.td"
54249259Sdim
55249259Sdimdef AArch64InstrInfo : InstrInfo;
56249259Sdim
57249259Sdim//===----------------------------------------------------------------------===//
58249259Sdim// Assembly printer
59249259Sdim//===----------------------------------------------------------------------===//
60249259Sdim
61249259Sdimdef A64InstPrinter : AsmWriter {
62249259Sdim  string AsmWriterClassName = "InstPrinter";
63249259Sdim  bit isMCAsmWriter = 1;
64249259Sdim}
65249259Sdim
66249259Sdim//===----------------------------------------------------------------------===//
67249259Sdim// Declare the target which we are implementing
68249259Sdim//===----------------------------------------------------------------------===//
69249259Sdim
70249259Sdimdef AArch64 : Target {
71249259Sdim  let InstructionSet = AArch64InstrInfo;
72249259Sdim  let AssemblyWriters = [A64InstPrinter];
73249259Sdim}
74