• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//===- SystemZInstrFormats.td - SystemZ Instruction Formats ----*- tablegen -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// Format specifies the encoding used by the instruction.  This is part of the
11// ad-hoc solution used to emit machine instruction encodings by our machine
12// code emitter.
13class Format<bits<5> val> {
14  bits<5> Value = val;
15}
16
17def Pseudo   : Format<0>;
18def EForm    : Format<1>;
19def IForm    : Format<2>;
20def RIForm   : Format<3>;
21def RIEForm  : Format<4>;
22def RILForm  : Format<5>;
23def RISForm  : Format<6>;
24def RRForm   : Format<7>;
25def RREForm  : Format<8>;
26def RRFForm  : Format<9>;
27def RRRForm  : Format<10>;
28def RRSForm  : Format<11>;
29def RSForm   : Format<12>;
30def RSIForm  : Format<13>;
31def RSILForm : Format<14>;
32def RSYForm  : Format<15>;
33def RXForm   : Format<16>;
34def RXEForm  : Format<17>;
35def RXFForm  : Format<18>;
36def RXYForm  : Format<19>;
37def SForm    : Format<20>;
38def SIForm   : Format<21>;
39def SILForm  : Format<22>;
40def SIYForm  : Format<23>;
41def SSForm   : Format<24>;
42def SSEForm  : Format<25>;
43def SSFForm  : Format<26>;
44
45class InstSystemZ<bits<16> op, Format f, dag outs, dag ins> : Instruction {
46  let Namespace = "SystemZ";
47
48  bits<16> Opcode = op;
49
50  Format Form = f;
51  bits<5> FormBits = Form.Value;
52
53  dag OutOperandList = outs;
54  dag InOperandList = ins;
55}
56
57class I8<bits<8> op, Format f, dag outs, dag ins, string asmstr,
58         list<dag> pattern>
59  : InstSystemZ<0, f, outs, ins> {
60  let Opcode{0-7} = op;
61  let Opcode{8-15} = 0;
62
63  let Pattern = pattern;
64  let AsmString = asmstr;
65}
66
67class I12<bits<12> op, Format f, dag outs, dag ins, string asmstr,
68         list<dag> pattern>
69  : InstSystemZ<0, f, outs, ins> {
70  let Opcode{0-11} = op;
71  let Opcode{12-15} = 0;
72
73  let Pattern = pattern;
74  let AsmString = asmstr;
75}
76
77class I16<bits<16> op, Format f, dag outs, dag ins, string asmstr,
78         list<dag> pattern>
79  : InstSystemZ<op, f, outs, ins> {
80  let Pattern = pattern;
81  let AsmString = asmstr;
82}
83
84class RRI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>
85  : I8<op, RRForm, outs, ins, asmstr, pattern>;
86
87class RII<bits<12> op, dag outs, dag ins, string asmstr, list<dag> pattern>
88  : I12<op, RIForm, outs, ins, asmstr, pattern>;
89
90class RILI<bits<12> op, dag outs, dag ins, string asmstr, list<dag> pattern>
91  : I12<op, RILForm, outs, ins, asmstr, pattern>;
92
93class RREI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern>
94  : I16<op, RREForm, outs, ins, asmstr, pattern>;
95
96class RXI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>
97  : I8<op, RXForm, outs, ins, asmstr, pattern> {
98  let AddedComplexity = 1;
99}
100
101class RXYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern>
102  : I16<op, RXYForm, outs, ins, asmstr, pattern>;
103
104class RSI<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>
105  : I8<op, RSForm, outs, ins, asmstr, pattern> {
106  let AddedComplexity = 1;
107}
108
109class RSYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern>
110  : I16<op, RSYForm, outs, ins, asmstr, pattern>;
111
112class SII<bits<8> op, dag outs, dag ins, string asmstr, list<dag> pattern>
113  : I8<op, SIForm, outs, ins, asmstr, pattern> {
114  let AddedComplexity = 1;
115}
116
117class SIYI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern>
118  : I16<op, SIYForm, outs, ins, asmstr, pattern>;
119
120class SILI<bits<16> op, dag outs, dag ins, string asmstr, list<dag> pattern>
121  : I16<op, SILForm, outs, ins, asmstr, pattern>;
122
123
124//===----------------------------------------------------------------------===//
125// Pseudo instructions
126//===----------------------------------------------------------------------===//
127
128class Pseudo<dag outs, dag ins, string asmstr, list<dag> pattern>
129   : InstSystemZ<0, Pseudo, outs, ins> {
130
131  let Pattern = pattern;
132  let AsmString = asmstr;
133}
134