blob: 6901543d052160c181c6c543e10ffbd11880cedd [file] [log] [blame]
Misha Brukmancd4f51b2004-08-02 16:54:54 +00001//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//
11//===----------------------------------------------------------------------===//
12
Misha Brukman6b21bde2004-08-02 21:56:35 +000013//===----------------------------------------------------------------------===//
14//
15// PowerPC instruction formats
Misha Brukmancd4f51b2004-08-02 16:54:54 +000016
Jim Laskey74ab9962005-10-19 19:51:16 +000017class I<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
18 : Instruction {
Misha Brukman6b21bde2004-08-02 21:56:35 +000019 field bits<32> Inst;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000020
Chris Lattner5b78da42005-04-19 05:05:22 +000021 bit PPC64 = 0; // Default value, override with isPPC64
22 bit VMX = 0; // Default value, override with isVMX
Misha Brukmancd4f51b2004-08-02 16:54:54 +000023
Nate Begeman4bfceb12004-09-04 05:00:00 +000024 let Name = "";
Misha Brukmandad438b2004-08-10 22:47:03 +000025 let Namespace = "PPC";
Misha Brukman5295e1d2004-08-09 17:24:04 +000026 let Inst{0-5} = opcode;
Nate Begeman4bfceb12004-09-04 05:00:00 +000027 let OperandList = OL;
28 let AsmString = asmstr;
Jim Laskey74ab9962005-10-19 19:51:16 +000029 let Itinerary = itin;
Chris Lattner51348c52006-03-12 09:13:49 +000030
31 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to
32 /// these must be reflected there! See comments there for what these are.
33 bits<1> PPC970_First = 0;
34 bits<1> PPC970_Single = 0;
35 bits<3> PPC970_Unit = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000036}
37
Chris Lattner51348c52006-03-12 09:13:49 +000038class PPC970_DGroup_First { bits<1> PPC970_First = 1; }
39class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; }
40class PPC970_MicroCode;
41
42class PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; }
43class PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; }
44class PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; }
45class PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; }
46class PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; }
47class PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; }
48class PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; }
49class PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; }
50
51
Misha Brukman5295e1d2004-08-09 17:24:04 +000052// 1.7.1 I-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000053class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr,
Chris Lattnerd9d18af2005-12-04 18:42:54 +000054 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +000055 : I<opcode, OL, asmstr, itin> {
Chris Lattnerd9d18af2005-12-04 18:42:54 +000056 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000057 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000058
Misha Brukman5295e1d2004-08-09 17:24:04 +000059 let Inst{6-29} = LI;
60 let Inst{30} = aa;
61 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000062}
63
Misha Brukman5295e1d2004-08-09 17:24:04 +000064// 1.7.2 B-Form
Nate Begeman7b809f52005-08-26 04:11:42 +000065class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL,
Jim Laskey74ab9962005-10-19 19:51:16 +000066 string asmstr, InstrItinClass itin>
67 : I<opcode, OL, asmstr, itin> {
Nate Begeman7b809f52005-08-26 04:11:42 +000068 bits<3> CR;
Misha Brukman189f3dc2004-10-14 05:55:37 +000069 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000070
Nate Begeman7b809f52005-08-26 04:11:42 +000071 let Inst{6-10} = bo;
72 let Inst{11-13} = CR;
73 let Inst{14-15} = bicode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000074 let Inst{16-29} = BD;
75 let Inst{30} = aa;
76 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000077}
78
Misha Brukman5295e1d2004-08-09 17:24:04 +000079// 1.7.4 D-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000080class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
Nate Begemanade6f9a2005-12-09 23:54:18 +000081 list<dag> pattern>
82 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000083 bits<5> A;
84 bits<5> B;
85 bits<16> C;
Nate Begemanade6f9a2005-12-09 23:54:18 +000086
87 let Pattern = pattern;
Misha Brukman6b21bde2004-08-02 21:56:35 +000088
Misha Brukman6b21bde2004-08-02 21:56:35 +000089 let Inst{6-10} = A;
90 let Inst{11-15} = B;
91 let Inst{16-31} = C;
92}
93
Nate Begemanade6f9a2005-12-09 23:54:18 +000094class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
95 list<dag> pattern>
96 : I<opcode, OL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +000097 bits<5> A;
98 bits<16> C;
99 bits<5> B;
Nate Begemanade6f9a2005-12-09 23:54:18 +0000100
101 let Pattern = pattern;
Misha Brukman15b0fb52004-10-23 06:08:38 +0000102
Misha Brukman15b0fb52004-10-23 06:08:38 +0000103 let Inst{6-10} = A;
104 let Inst{11-15} = B;
105 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000106}
107
Jim Laskey74ab9962005-10-19 19:51:16 +0000108class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
109 list<dag> pattern>
110 : DForm_base<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000111
Jim Laskey74ab9962005-10-19 19:51:16 +0000112class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
113 list<dag> pattern>
114 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000115 bits<5> A;
116 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +0000117
Chris Lattner2d8032b2005-09-08 17:33:10 +0000118 let Pattern = pattern;
119
Nate Begeman4bfceb12004-09-04 05:00:00 +0000120 let Inst{6-10} = A;
121 let Inst{11-15} = 0;
122 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000123}
124
125// Currently we make the use/def reg distinction in ISel, not tablegen
Nate Begemanade6f9a2005-12-09 23:54:18 +0000126class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
127 list<dag> pattern>
128 : DForm_1<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000129
Jim Laskey74ab9962005-10-19 19:51:16 +0000130class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
131 list<dag> pattern>
Nate Begemanade6f9a2005-12-09 23:54:18 +0000132 : I<opcode, OL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000133 bits<5> B;
134 bits<5> A;
135 bits<16> C;
136
Chris Lattner76cb0062005-09-08 17:40:49 +0000137 let Pattern = pattern;
138
Chris Lattner022e2712004-11-24 02:15:41 +0000139 let Inst{6-10} = A;
140 let Inst{11-15} = B;
141 let Inst{16-31} = C;
142}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000143
Nate Begemanade6f9a2005-12-09 23:54:18 +0000144class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
145 list<dag> pattern>
146 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000147 let A = 0;
148 let B = 0;
149 let C = 0;
150}
151
Jim Laskey74ab9962005-10-19 19:51:16 +0000152class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
153 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000154 bits<3> BF;
155 bits<1> L;
156 bits<5> RA;
157 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000158
Misha Brukman5295e1d2004-08-09 17:24:04 +0000159 let Inst{6-8} = BF;
160 let Inst{9} = 0;
161 let Inst{10} = L;
162 let Inst{11-15} = RA;
163 let Inst{16-31} = I;
164}
165
Jim Laskey74ab9962005-10-19 19:51:16 +0000166class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
167 : DForm_5<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000168 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000169}
170
Jim Laskey74ab9962005-10-19 19:51:16 +0000171class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
172 : DForm_5<opcode, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000173
Jim Laskey74ab9962005-10-19 19:51:16 +0000174class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
175 : DForm_6<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000176 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000177}
178
Nate Begemanade6f9a2005-12-09 23:54:18 +0000179class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
180 list<dag> pattern>
181 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000182}
183
Nate Begemanade6f9a2005-12-09 23:54:18 +0000184class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
185 list<dag> pattern>
186 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000187}
188
Misha Brukman28beda92004-08-11 15:54:36 +0000189// 1.7.5 DS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000190class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000191 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000192 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000193 bits<5> RST;
194 bits<14> DS;
195 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000196
Nate Begemanade6f9a2005-12-09 23:54:18 +0000197 let Pattern = pattern;
198
Misha Brukman28beda92004-08-11 15:54:36 +0000199 let Inst{6-10} = RST;
200 let Inst{11-15} = RA;
201 let Inst{16-29} = DS;
202 let Inst{30-31} = xo;
203}
204
Jim Laskey74ab9962005-10-19 19:51:16 +0000205class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000206 InstrItinClass itin, list<dag> pattern>
207 : DSForm_1<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman28beda92004-08-11 15:54:36 +0000208
Misha Brukman5295e1d2004-08-09 17:24:04 +0000209// 1.7.6 X-Form
Nate Begemanade6f9a2005-12-09 23:54:18 +0000210class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
211 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000212 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000213 bits<5> RST;
214 bits<5> A;
215 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000216
Nate Begemanade6f9a2005-12-09 23:54:18 +0000217 let Pattern = pattern;
218
Chris Lattnerf9172e12005-04-19 05:15:18 +0000219 bit RC = 0; // set by isDOT
220
Misha Brukman28beda92004-08-11 15:54:36 +0000221 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000222 let Inst{11-15} = A;
223 let Inst{16-20} = B;
224 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000225 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000226}
227
Chris Lattner130888ad2004-11-24 03:52:02 +0000228// This is the same as XForm_base_r3xo, but the first two operands are swapped
229// when code is emitted.
230class XForm_base_r3xo_swapped
Jim Laskey74ab9962005-10-19 19:51:16 +0000231 <bits<6> opcode, bits<10> xo, dag OL, string asmstr,
232 InstrItinClass itin>
233 : I<opcode, OL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000234 bits<5> A;
235 bits<5> RST;
236 bits<5> B;
237
Chris Lattnerf9172e12005-04-19 05:15:18 +0000238 bit RC = 0; // set by isDOT
239
Chris Lattner130888ad2004-11-24 03:52:02 +0000240 let Inst{6-10} = RST;
241 let Inst{11-15} = A;
242 let Inst{16-20} = B;
243 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000244 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000245}
246
Nate Begeman765cb5f2004-08-13 02:19:26 +0000247
Jim Laskey74ab9962005-10-19 19:51:16 +0000248class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000249 InstrItinClass itin, list<dag> pattern>
250 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000251
Jim Laskey74ab9962005-10-19 19:51:16 +0000252class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
253 InstrItinClass itin, list<dag> pattern>
254 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000255 let Pattern = pattern;
256}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000257
Jim Laskey74ab9962005-10-19 19:51:16 +0000258class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000259 InstrItinClass itin, list<dag> pattern>
260 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000261
Jim Laskey74ab9962005-10-19 19:51:16 +0000262class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
263 InstrItinClass itin, list<dag> pattern>
264 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
265 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000266}
267
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000268class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000269 InstrItinClass itin, list<dag> pattern>
270 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000271 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000272 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000273}
274
Jim Laskey74ab9962005-10-19 19:51:16 +0000275class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
276 InstrItinClass itin>
277 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000278 bits<3> BF;
279 bits<1> L;
280 bits<5> RA;
281 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000282
Misha Brukman5295e1d2004-08-09 17:24:04 +0000283 let Inst{6-8} = BF;
284 let Inst{9} = 0;
285 let Inst{10} = L;
286 let Inst{11-15} = RA;
287 let Inst{16-20} = RB;
288 let Inst{21-30} = xo;
289 let Inst{31} = 0;
290}
291
Jim Laskey74ab9962005-10-19 19:51:16 +0000292class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
293 InstrItinClass itin>
294 : XForm_16<opcode, xo, OL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000295 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000296}
297
Jim Laskey74ab9962005-10-19 19:51:16 +0000298class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
299 InstrItinClass itin>
300 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000301 bits<3> BF;
302 bits<5> FRA;
303 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000304
Misha Brukman5295e1d2004-08-09 17:24:04 +0000305 let Inst{6-8} = BF;
306 let Inst{9-10} = 0;
307 let Inst{11-15} = FRA;
308 let Inst{16-20} = FRB;
309 let Inst{21-30} = xo;
310 let Inst{31} = 0;
311}
312
Jim Laskey74ab9962005-10-19 19:51:16 +0000313class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000314 InstrItinClass itin, list<dag> pattern>
315 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000316}
317
Jim Laskey74ab9962005-10-19 19:51:16 +0000318class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
319 InstrItinClass itin, list<dag> pattern>
Nate Begemanade6f9a2005-12-09 23:54:18 +0000320 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000321 let A = 0;
322}
323
Jim Laskey74ab9962005-10-19 19:51:16 +0000324class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000325 InstrItinClass itin, list<dag> pattern>
326 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000327}
328
329// 1.7.7 XL-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000330class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
331 InstrItinClass itin>
332 : I<opcode, OL, asmstr, itin> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000333 bits<3> CRD;
334 bits<2> CRDb;
335 bits<3> CRA;
336 bits<2> CRAb;
337 bits<3> CRB;
338 bits<2> CRBb;
339
340 let Inst{6-8} = CRD;
341 let Inst{9-10} = CRDb;
342 let Inst{11-13} = CRA;
343 let Inst{14-15} = CRAb;
344 let Inst{16-18} = CRB;
345 let Inst{19-20} = CRBb;
346 let Inst{21-30} = xo;
347 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000348}
349
Jim Laskey74ab9962005-10-19 19:51:16 +0000350class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000351 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000352 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000353 bits<5> BO;
354 bits<5> BI;
355 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000356
Nate Begemanb11b8e42005-12-20 00:26:01 +0000357 let Pattern = pattern;
358
Misha Brukman5295e1d2004-08-09 17:24:04 +0000359 let Inst{6-10} = BO;
360 let Inst{11-15} = BI;
361 let Inst{16-18} = 0;
362 let Inst{19-20} = BH;
363 let Inst{21-30} = xo;
364 let Inst{31} = lk;
365}
366
Jim Laskey74ab9962005-10-19 19:51:16 +0000367class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000368 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
369 : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000370 let BO = bo;
371 let BI = bi;
372 let BH = 0;
373}
374
Jim Laskey74ab9962005-10-19 19:51:16 +0000375class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
376 InstrItinClass itin>
377 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000378 bits<3> BF;
379 bits<3> BFA;
380
381 let Inst{6-8} = BF;
382 let Inst{9-10} = 0;
383 let Inst{11-13} = BFA;
384 let Inst{14-15} = 0;
385 let Inst{16-20} = 0;
386 let Inst{21-30} = xo;
387 let Inst{31} = 0;
388}
389
Misha Brukman5295e1d2004-08-09 17:24:04 +0000390// 1.7.8 XFX-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000391class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
392 InstrItinClass itin>
393 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000394 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000395 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000396
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000397 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000398 let Inst{11} = SPR{4};
399 let Inst{12} = SPR{3};
400 let Inst{13} = SPR{2};
401 let Inst{14} = SPR{1};
402 let Inst{15} = SPR{0};
403 let Inst{16} = SPR{9};
404 let Inst{17} = SPR{8};
405 let Inst{18} = SPR{7};
406 let Inst{19} = SPR{6};
407 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000408 let Inst{21-30} = xo;
409 let Inst{31} = 0;
410}
411
Chris Lattnerd790d222005-04-19 04:40:07 +0000412class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000413 dag OL, string asmstr, InstrItinClass itin>
414 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000415 let SPR = spr;
416}
417
Jim Laskey74ab9962005-10-19 19:51:16 +0000418class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
419 InstrItinClass itin>
420 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000421 bits<5> RT;
422
423 let Inst{6-10} = RT;
424 let Inst{11-20} = 0;
425 let Inst{21-30} = xo;
426 let Inst{31} = 0;
427}
428
Jim Laskey74ab9962005-10-19 19:51:16 +0000429class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
430 InstrItinClass itin>
431 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000432 bits<8> FXM;
433 bits<5> ST;
434
435 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000436 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000437 let Inst{12-19} = FXM;
438 let Inst{20} = 0;
439 let Inst{21-30} = xo;
440 let Inst{31} = 0;
441}
442
Jim Laskey74ab9962005-10-19 19:51:16 +0000443class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
444 InstrItinClass itin>
445 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000446 bits<5> ST;
447 bits<8> FXM;
448
449 let Inst{6-10} = ST;
450 let Inst{11} = 1;
451 let Inst{12-19} = FXM;
452 let Inst{20} = 0;
453 let Inst{21-30} = xo;
454 let Inst{31} = 0;
455}
456
Jim Laskey74ab9962005-10-19 19:51:16 +0000457class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
458 InstrItinClass itin>
459 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000460
Nate Begeman143cf942004-08-30 02:28:06 +0000461class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000462 dag OL, string asmstr, InstrItinClass itin>
463 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000464 let SPR = spr;
465}
466
Nate Begeman765cb5f2004-08-13 02:19:26 +0000467// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000468class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
469 InstrItinClass itin>
470 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000471 bits<5> RS;
472 bits<5> A;
473 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000474
Chris Lattnerf9172e12005-04-19 05:15:18 +0000475 bit RC = 0; // set by isDOT
476
Nate Begeman765cb5f2004-08-13 02:19:26 +0000477 let Inst{6-10} = RS;
478 let Inst{11-15} = A;
479 let Inst{16-20} = SH{1-5};
480 let Inst{21-29} = xo;
481 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000482 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000483}
484
Misha Brukman5295e1d2004-08-09 17:24:04 +0000485// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000486class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000487 InstrItinClass itin, list<dag> pattern>
488 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000489 bits<5> RT;
490 bits<5> RA;
491 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000492
Chris Lattner3a1002d2005-09-02 21:18:00 +0000493 let Pattern = pattern;
494
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000495 bit RC = 0; // set by isDOT
496
Misha Brukman5295e1d2004-08-09 17:24:04 +0000497 let Inst{6-10} = RT;
498 let Inst{11-15} = RA;
499 let Inst{16-20} = RB;
500 let Inst{21} = oe;
501 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000502 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000503}
504
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000505class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000506 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
507 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000508 let RB = 0;
509}
510
511// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000512class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000513 InstrItinClass itin, list<dag> pattern>
514 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000515 bits<5> FRT;
516 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000517 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000518 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000519
Chris Lattner027a2672005-09-29 23:34:24 +0000520 let Pattern = pattern;
521
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000522 bit RC = 0; // set by isDOT
523
Misha Brukman5295e1d2004-08-09 17:24:04 +0000524 let Inst{6-10} = FRT;
525 let Inst{11-15} = FRA;
526 let Inst{16-20} = FRB;
527 let Inst{21-25} = FRC;
528 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000529 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000530}
531
Jim Laskey74ab9962005-10-19 19:51:16 +0000532class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
533 InstrItinClass itin, list<dag> pattern>
534 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000535 let FRC = 0;
536}
537
Jim Laskey74ab9962005-10-19 19:51:16 +0000538class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
539 InstrItinClass itin, list<dag> pattern>
540 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000541 let FRB = 0;
542}
543
Misha Brukman5295e1d2004-08-09 17:24:04 +0000544// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000545class MForm_1<bits<6> opcode, dag OL, string asmstr,
546 InstrItinClass itin, list<dag> pattern>
547 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000548 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000549 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000550 bits<5> RB;
551 bits<5> MB;
552 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000553
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000554 let Pattern = pattern;
555
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000556 bit RC = 0; // set by isDOT
557
Misha Brukman5295e1d2004-08-09 17:24:04 +0000558 let Inst{6-10} = RS;
559 let Inst{11-15} = RA;
560 let Inst{16-20} = RB;
561 let Inst{21-25} = MB;
562 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000563 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000564}
565
Jim Laskey74ab9962005-10-19 19:51:16 +0000566class MForm_2<bits<6> opcode, dag OL, string asmstr,
567 InstrItinClass itin, list<dag> pattern>
568 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000569}
570
Nate Begeman765cb5f2004-08-13 02:19:26 +0000571// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000572class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
573 InstrItinClass itin, list<dag> pattern>
574 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000575 bits<5> RS;
576 bits<5> RA;
577 bits<6> SH;
578 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000579
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000580 let Pattern = pattern;
581
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000582 bit RC = 0; // set by isDOT
583
Nate Begeman765cb5f2004-08-13 02:19:26 +0000584 let Inst{6-10} = RS;
585 let Inst{11-15} = RA;
586 let Inst{16-20} = SH{1-5};
587 let Inst{21-26} = MBE;
588 let Inst{27-29} = xo;
589 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000590 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000591}
592
Nate Begeman8492fd32005-11-23 05:29:52 +0000593// E-1 VA-Form
594class VAForm_1<bits<6> xo, dag OL, string asmstr,
595 InstrItinClass itin, list<dag> pattern>
596 : I<4, OL, asmstr, itin> {
597 bits<5> VD;
598 bits<5> VA;
599 bits<5> VB;
600 bits<5> VC;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000601
602 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000603
604 let Inst{6-10} = VD;
605 let Inst{11-15} = VA;
606 let Inst{16-20} = VB;
607 let Inst{21-25} = VC;
608 let Inst{26-31} = xo;
609}
610
611// E-2 VX-Form
612class VXForm_1<bits<11> xo, dag OL, string asmstr,
613 InstrItinClass itin, list<dag> pattern>
614 : I<4, OL, asmstr, itin> {
615 bits<5> VD;
616 bits<5> VA;
617 bits<5> VB;
618
Nate Begeman11fd6b22005-11-26 22:39:34 +0000619 let Pattern = pattern;
620
Nate Begeman8492fd32005-11-23 05:29:52 +0000621 let Inst{6-10} = VD;
622 let Inst{11-15} = VA;
623 let Inst{16-20} = VB;
624 let Inst{21-31} = xo;
625}
626
Nate Begeman40f081d2005-12-14 00:34:09 +0000627class VXForm_setzero<bits<11> xo, dag OL, string asmstr,
628 InstrItinClass itin, list<dag> pattern>
629 : VXForm_1<xo, OL, asmstr, itin, pattern> {
630 let VA = VD;
631 let VB = VD;
632}
633
634
Nate Begemanc1381182005-11-29 08:04:45 +0000635class VXForm_2<bits<11> xo, dag OL, string asmstr,
636 InstrItinClass itin, list<dag> pattern>
637 : I<4, OL, asmstr, itin> {
638 bits<5> VD;
639 bits<5> VB;
640
641 let Pattern = pattern;
642
643 let Inst{6-10} = VD;
644 let Inst{11-15} = 0;
645 let Inst{16-20} = VB;
646 let Inst{21-31} = xo;
647}
648
Nate Begeman8492fd32005-11-23 05:29:52 +0000649// E-4 VXR-Form
650class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
651 InstrItinClass itin, list<dag> pattern>
652 : I<4, OL, asmstr, itin> {
653 bits<5> VD;
654 bits<5> VA;
655 bits<5> VB;
656
Nate Begeman11fd6b22005-11-26 22:39:34 +0000657 let Pattern = pattern;
658
Nate Begeman8492fd32005-11-23 05:29:52 +0000659 let Inst{6-10} = VD;
660 let Inst{11-15} = VA;
661 let Inst{16-20} = VB;
662 let Inst{21} = rc;
663 let Inst{22-31} = xo;
664}
665
Misha Brukman6b21bde2004-08-02 21:56:35 +0000666//===----------------------------------------------------------------------===//
Chris Lattnerb439dad2005-10-25 20:58:43 +0000667class Pseudo<dag OL, string asmstr, list<dag> pattern>
Chris Lattner12405742006-01-27 01:46:15 +0000668 : I<0, OL, asmstr, NoItinerary> {
Nate Begeman61738782004-09-02 08:13:00 +0000669 let PPC64 = 0;
670 let VMX = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000671 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000672 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000673}