-
Notifications
You must be signed in to change notification settings - Fork 8
/
EpiphanyInstrFormats.td
93 lines (76 loc) · 2.77 KB
/
EpiphanyInstrFormats.td
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//===- EpiphanyInstrFormats.td - Epiphany Instruction Formats --*- tablegen -*-=//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// This file describes Epiphany instruction formats, down to the level of the
// instruction's overall class.
// ===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
// A64 Instruction Format Definitions.
//===----------------------------------------------------------------------===//
class PseudoInst<dag outs, dag ins, list<dag> patterns> : Instruction {
let Namespace = "Epiphany";
let OutOperandList = outs;
let InOperandList= ins;
let Pattern = patterns;
let isCodeGenOnly = 1;
let isPseudo = 1;
let Size = 4;
}
// As above, this will be a single A64 instruction, but we can actually give the
// expansion in TableGen.
class A64PseudoExpand<dag outs, dag ins, list<dag> patterns, dag Result>
: PseudoInst<outs, ins, patterns>,
PseudoInstExpansion<Result>;
class EP1INST<dag outs, dag ins, string asmstr, list<dag> patterns, InstrItinClass itin> : Instruction {
field bits<32> Inst =0 ;
// LLVM-level model of the Epiphany/A64 distinction.
let Namespace = "Epiphany";
let Size = 4;
// Set the templated fields
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = patterns;
let Itinerary = itin;
}
class EP2INST<dag outs, dag ins, string asmstr, list<dag> patterns, InstrItinClass itin> : Instruction {
field bits<32> Inst =0 ;
// LLVM-level model of the Epiphany/A64 distinction.
let Namespace = "Epiphany";
let Size = 4;
// Set the templated fields
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = patterns;
let Itinerary = itin;
}
class EP3INST<dag outs, dag ins, string asmstr, list<dag> patterns, InstrItinClass itin> : Instruction {
field bits<32> Inst =0 ;
// LLVM-level model of the Epiphany/A64 distinction.
let Namespace = "Epiphany";
let Size = 4;
// Set the templated fields
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = patterns;
let Itinerary = itin;
}
class EP4INST<dag outs, dag ins, string asmstr, list<dag> patterns, InstrItinClass itin> : Instruction {
field bits<32> Inst =0 ;
// LLVM-level model of the Epiphany/A64 distinction.
let Namespace = "Epiphany";
let Size = 4;
// Set the templated fields
let OutOperandList = outs;
let InOperandList = ins;
let AsmString = asmstr;
let Pattern = patterns;
let Itinerary = itin;
}