blob: ef3cf1a7ab60044f59c81f24dfcab963659f780c [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;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000030}
31
Misha Brukman5295e1d2004-08-09 17:24:04 +000032// 1.7.1 I-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000033class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr,
34 InstrItinClass itin>
35 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000036 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000037
Misha Brukman5295e1d2004-08-09 17:24:04 +000038 let Inst{6-29} = LI;
39 let Inst{30} = aa;
40 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000041}
42
Misha Brukman5295e1d2004-08-09 17:24:04 +000043// 1.7.2 B-Form
Nate Begeman7b809f52005-08-26 04:11:42 +000044class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL,
Jim Laskey74ab9962005-10-19 19:51:16 +000045 string asmstr, InstrItinClass itin>
46 : I<opcode, OL, asmstr, itin> {
Nate Begeman7b809f52005-08-26 04:11:42 +000047 bits<3> CR;
Misha Brukman189f3dc2004-10-14 05:55:37 +000048 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000049
Nate Begeman7b809f52005-08-26 04:11:42 +000050 let Inst{6-10} = bo;
51 let Inst{11-13} = CR;
52 let Inst{14-15} = bicode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000053 let Inst{16-29} = BD;
54 let Inst{30} = aa;
55 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000056}
57
Misha Brukman5295e1d2004-08-09 17:24:04 +000058// 1.7.4 D-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000059class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
60 list<dag> pattern>
61 : I<opcode, OL, asmstr, itin> {
Chris Lattner2d8032b2005-09-08 17:33:10 +000062 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000063 bits<5> A;
64 bits<5> B;
65 bits<16> C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000066
Misha Brukman6b21bde2004-08-02 21:56:35 +000067 let Inst{6-10} = A;
68 let Inst{11-15} = B;
69 let Inst{16-31} = C;
70}
71
Jim Laskey74ab9962005-10-19 19:51:16 +000072class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
73 : I<opcode, OL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +000074 bits<5> A;
75 bits<16> C;
76 bits<5> B;
77
Misha Brukman15b0fb52004-10-23 06:08:38 +000078 let Inst{6-10} = A;
79 let Inst{11-15} = B;
80 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000081}
82
Jim Laskey74ab9962005-10-19 19:51:16 +000083class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
84 list<dag> pattern>
85 : DForm_base<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +000086
Jim Laskey74ab9962005-10-19 19:51:16 +000087class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
88 list<dag> pattern>
89 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000090 bits<5> A;
91 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +000092
Chris Lattner2d8032b2005-09-08 17:33:10 +000093 let Pattern = pattern;
94
Nate Begeman4bfceb12004-09-04 05:00:00 +000095 let Inst{6-10} = A;
96 let Inst{11-15} = 0;
97 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +000098}
99
100// Currently we make the use/def reg distinction in ISel, not tablegen
Jim Laskey74ab9962005-10-19 19:51:16 +0000101class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
102 : DForm_1<opcode, OL, asmstr, itin>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000103
Jim Laskey74ab9962005-10-19 19:51:16 +0000104class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
105 list<dag> pattern>
106 : I<opcode, OL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000107 bits<5> B;
108 bits<5> A;
109 bits<16> C;
110
Chris Lattner76cb0062005-09-08 17:40:49 +0000111 let Pattern = pattern;
112
Chris Lattner022e2712004-11-24 02:15:41 +0000113 let Inst{6-10} = A;
114 let Inst{11-15} = B;
115 let Inst{16-31} = C;
116}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000117
Jim Laskey74ab9962005-10-19 19:51:16 +0000118class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
119 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000120 let A = 0;
121 let B = 0;
122 let C = 0;
123}
124
Jim Laskey74ab9962005-10-19 19:51:16 +0000125class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
126 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000127 bits<3> BF;
128 bits<1> L;
129 bits<5> RA;
130 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000131
Misha Brukman5295e1d2004-08-09 17:24:04 +0000132 let Inst{6-8} = BF;
133 let Inst{9} = 0;
134 let Inst{10} = L;
135 let Inst{11-15} = RA;
136 let Inst{16-31} = I;
137}
138
Jim Laskey74ab9962005-10-19 19:51:16 +0000139class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
140 : DForm_5<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000141 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000142}
143
Jim Laskey74ab9962005-10-19 19:51:16 +0000144class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
145 : DForm_5<opcode, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000146
Jim Laskey74ab9962005-10-19 19:51:16 +0000147class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
148 : DForm_6<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000149 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000150}
151
Jim Laskey74ab9962005-10-19 19:51:16 +0000152class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
153 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000154}
155
Jim Laskey74ab9962005-10-19 19:51:16 +0000156class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
157 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000158}
159
Misha Brukman28beda92004-08-11 15:54:36 +0000160// 1.7.5 DS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000161class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
162 InstrItinClass itin>
163 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000164 bits<5> RST;
165 bits<14> DS;
166 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000167
Misha Brukman28beda92004-08-11 15:54:36 +0000168 let Inst{6-10} = RST;
169 let Inst{11-15} = RA;
170 let Inst{16-29} = DS;
171 let Inst{30-31} = xo;
172}
173
Jim Laskey74ab9962005-10-19 19:51:16 +0000174class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
175 InstrItinClass itin>
176 : DSForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman28beda92004-08-11 15:54:36 +0000177
Misha Brukman5295e1d2004-08-09 17:24:04 +0000178// 1.7.6 X-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000179class XForm_base_r3xo<bits<6> opcode, bits<10> xo,
Jim Laskey74ab9962005-10-19 19:51:16 +0000180 dag OL, string asmstr, InstrItinClass itin>
181 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000182 bits<5> RST;
183 bits<5> A;
184 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000185
Chris Lattnerf9172e12005-04-19 05:15:18 +0000186 bit RC = 0; // set by isDOT
187
Misha Brukman28beda92004-08-11 15:54:36 +0000188 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000189 let Inst{11-15} = A;
190 let Inst{16-20} = B;
191 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000192 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000193}
194
Chris Lattner130888ad2004-11-24 03:52:02 +0000195// This is the same as XForm_base_r3xo, but the first two operands are swapped
196// when code is emitted.
197class XForm_base_r3xo_swapped
Jim Laskey74ab9962005-10-19 19:51:16 +0000198 <bits<6> opcode, bits<10> xo, dag OL, string asmstr,
199 InstrItinClass itin>
200 : I<opcode, OL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000201 bits<5> A;
202 bits<5> RST;
203 bits<5> B;
204
Chris Lattnerf9172e12005-04-19 05:15:18 +0000205 bit RC = 0; // set by isDOT
206
Chris Lattner130888ad2004-11-24 03:52:02 +0000207 let Inst{6-10} = RST;
208 let Inst{11-15} = A;
209 let Inst{16-20} = B;
210 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000211 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000212}
213
Nate Begeman765cb5f2004-08-13 02:19:26 +0000214
Jim Laskey74ab9962005-10-19 19:51:16 +0000215class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
216 InstrItinClass itin>
217 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000218
Jim Laskey74ab9962005-10-19 19:51:16 +0000219class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
220 InstrItinClass itin, list<dag> pattern>
221 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000222 let Pattern = pattern;
223}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000224
Jim Laskey74ab9962005-10-19 19:51:16 +0000225class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
226 InstrItinClass itin>
227 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000228
Jim Laskey74ab9962005-10-19 19:51:16 +0000229class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
230 InstrItinClass itin, list<dag> pattern>
231 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
232 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000233}
234
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000235class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000236 InstrItinClass itin, list<dag> pattern>
237 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000238 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000239 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000240}
241
Jim Laskey74ab9962005-10-19 19:51:16 +0000242class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
243 InstrItinClass itin>
244 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000245 bits<3> BF;
246 bits<1> L;
247 bits<5> RA;
248 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000249
Misha Brukman5295e1d2004-08-09 17:24:04 +0000250 let Inst{6-8} = BF;
251 let Inst{9} = 0;
252 let Inst{10} = L;
253 let Inst{11-15} = RA;
254 let Inst{16-20} = RB;
255 let Inst{21-30} = xo;
256 let Inst{31} = 0;
257}
258
Jim Laskey74ab9962005-10-19 19:51:16 +0000259class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
260 InstrItinClass itin>
261 : XForm_16<opcode, xo, OL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000262 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000263}
264
Jim Laskey74ab9962005-10-19 19:51:16 +0000265class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
266 InstrItinClass itin>
267 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000268 bits<3> BF;
269 bits<5> FRA;
270 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000271
Misha Brukman5295e1d2004-08-09 17:24:04 +0000272 let Inst{6-8} = BF;
273 let Inst{9-10} = 0;
274 let Inst{11-15} = FRA;
275 let Inst{16-20} = FRB;
276 let Inst{21-30} = xo;
277 let Inst{31} = 0;
278}
279
Jim Laskey74ab9962005-10-19 19:51:16 +0000280class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
281 InstrItinClass itin>
282 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000283}
284
Jim Laskey74ab9962005-10-19 19:51:16 +0000285class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
286 InstrItinClass itin, list<dag> pattern>
287 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000288 let A = 0;
Jim Laskey74ab9962005-10-19 19:51:16 +0000289 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000290}
291
Jim Laskey74ab9962005-10-19 19:51:16 +0000292class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
293 InstrItinClass itin>
294 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000295}
296
297// 1.7.7 XL-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000298class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
299 InstrItinClass itin>
300 : I<opcode, OL, asmstr, itin> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000301 bits<3> CRD;
302 bits<2> CRDb;
303 bits<3> CRA;
304 bits<2> CRAb;
305 bits<3> CRB;
306 bits<2> CRBb;
307
308 let Inst{6-8} = CRD;
309 let Inst{9-10} = CRDb;
310 let Inst{11-13} = CRA;
311 let Inst{14-15} = CRAb;
312 let Inst{16-18} = CRB;
313 let Inst{19-20} = CRBb;
314 let Inst{21-30} = xo;
315 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000316}
317
Jim Laskey74ab9962005-10-19 19:51:16 +0000318class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr,
319 InstrItinClass itin>
320 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000321 bits<5> BO;
322 bits<5> BI;
323 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000324
Misha Brukman5295e1d2004-08-09 17:24:04 +0000325 let Inst{6-10} = BO;
326 let Inst{11-15} = BI;
327 let Inst{16-18} = 0;
328 let Inst{19-20} = BH;
329 let Inst{21-30} = xo;
330 let Inst{31} = lk;
331}
332
Jim Laskey74ab9962005-10-19 19:51:16 +0000333class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
334 dag OL, string asmstr, InstrItinClass itin>
335 : XLForm_2<opcode, xo, lk, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000336 let BO = bo;
337 let BI = bi;
338 let BH = 0;
339}
340
Jim Laskey74ab9962005-10-19 19:51:16 +0000341class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
342 InstrItinClass itin>
343 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000344 bits<3> BF;
345 bits<3> BFA;
346
347 let Inst{6-8} = BF;
348 let Inst{9-10} = 0;
349 let Inst{11-13} = BFA;
350 let Inst{14-15} = 0;
351 let Inst{16-20} = 0;
352 let Inst{21-30} = xo;
353 let Inst{31} = 0;
354}
355
Misha Brukman5295e1d2004-08-09 17:24:04 +0000356// 1.7.8 XFX-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000357class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
358 InstrItinClass itin>
359 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000360 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000361 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000362
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000363 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000364 let Inst{11} = SPR{4};
365 let Inst{12} = SPR{3};
366 let Inst{13} = SPR{2};
367 let Inst{14} = SPR{1};
368 let Inst{15} = SPR{0};
369 let Inst{16} = SPR{9};
370 let Inst{17} = SPR{8};
371 let Inst{18} = SPR{7};
372 let Inst{19} = SPR{6};
373 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000374 let Inst{21-30} = xo;
375 let Inst{31} = 0;
376}
377
Chris Lattnerd790d222005-04-19 04:40:07 +0000378class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000379 dag OL, string asmstr, InstrItinClass itin>
380 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000381 let SPR = spr;
382}
383
Jim Laskey74ab9962005-10-19 19:51:16 +0000384class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
385 InstrItinClass itin>
386 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000387 bits<5> RT;
388
389 let Inst{6-10} = RT;
390 let Inst{11-20} = 0;
391 let Inst{21-30} = xo;
392 let Inst{31} = 0;
393}
394
Jim Laskey74ab9962005-10-19 19:51:16 +0000395class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
396 InstrItinClass itin>
397 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000398 bits<8> FXM;
399 bits<5> ST;
400
401 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000402 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000403 let Inst{12-19} = FXM;
404 let Inst{20} = 0;
405 let Inst{21-30} = xo;
406 let Inst{31} = 0;
407}
408
Jim Laskey74ab9962005-10-19 19:51:16 +0000409class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
410 InstrItinClass itin>
411 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000412 bits<5> ST;
413 bits<8> FXM;
414
415 let Inst{6-10} = ST;
416 let Inst{11} = 1;
417 let Inst{12-19} = FXM;
418 let Inst{20} = 0;
419 let Inst{21-30} = xo;
420 let Inst{31} = 0;
421}
422
Jim Laskey74ab9962005-10-19 19:51:16 +0000423class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
424 InstrItinClass itin>
425 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000426
Nate Begeman143cf942004-08-30 02:28:06 +0000427class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000428 dag OL, string asmstr, InstrItinClass itin>
429 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000430 let SPR = spr;
431}
432
Nate Begeman765cb5f2004-08-13 02:19:26 +0000433// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000434class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
435 InstrItinClass itin>
436 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000437 bits<5> RS;
438 bits<5> A;
439 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000440
Chris Lattnerf9172e12005-04-19 05:15:18 +0000441 bit RC = 0; // set by isDOT
442
Nate Begeman765cb5f2004-08-13 02:19:26 +0000443 let Inst{6-10} = RS;
444 let Inst{11-15} = A;
445 let Inst{16-20} = SH{1-5};
446 let Inst{21-29} = xo;
447 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000448 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000449}
450
Misha Brukman5295e1d2004-08-09 17:24:04 +0000451// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000452class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000453 InstrItinClass itin, list<dag> pattern>
454 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000455 bits<5> RT;
456 bits<5> RA;
457 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000458
Chris Lattner3a1002d2005-09-02 21:18:00 +0000459 let Pattern = pattern;
460
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000461 bit RC = 0; // set by isDOT
462
Misha Brukman5295e1d2004-08-09 17:24:04 +0000463 let Inst{6-10} = RT;
464 let Inst{11-15} = RA;
465 let Inst{16-20} = RB;
466 let Inst{21} = oe;
467 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000468 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000469}
470
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000471class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000472 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
473 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000474 let RB = 0;
475}
476
477// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000478class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000479 InstrItinClass itin, list<dag> pattern>
480 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000481 bits<5> FRT;
482 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000483 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000484 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000485
Chris Lattner027a2672005-09-29 23:34:24 +0000486 let Pattern = pattern;
487
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000488 bit RC = 0; // set by isDOT
489
Misha Brukman5295e1d2004-08-09 17:24:04 +0000490 let Inst{6-10} = FRT;
491 let Inst{11-15} = FRA;
492 let Inst{16-20} = FRB;
493 let Inst{21-25} = FRC;
494 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000495 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000496}
497
Jim Laskey74ab9962005-10-19 19:51:16 +0000498class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
499 InstrItinClass itin, list<dag> pattern>
500 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000501 let FRC = 0;
502}
503
Jim Laskey74ab9962005-10-19 19:51:16 +0000504class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
505 InstrItinClass itin, list<dag> pattern>
506 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000507 let FRB = 0;
508}
509
Misha Brukman5295e1d2004-08-09 17:24:04 +0000510// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000511class MForm_1<bits<6> opcode, dag OL, string asmstr,
512 InstrItinClass itin, list<dag> pattern>
513 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000514 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000515 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000516 bits<5> RB;
517 bits<5> MB;
518 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000519
Nate Begeman9f3c26c2005-10-19 18:42:01 +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} = RS;
525 let Inst{11-15} = RA;
526 let Inst{16-20} = RB;
527 let Inst{21-25} = MB;
528 let Inst{26-30} = ME;
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 MForm_2<bits<6> opcode, dag OL, string asmstr,
533 InstrItinClass itin, list<dag> pattern>
534 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000535}
536
Nate Begeman765cb5f2004-08-13 02:19:26 +0000537// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000538class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
539 InstrItinClass itin, list<dag> pattern>
540 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000541 bits<5> RS;
542 bits<5> RA;
543 bits<6> SH;
544 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000545
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000546 let Pattern = pattern;
547
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000548 bit RC = 0; // set by isDOT
549
Nate Begeman765cb5f2004-08-13 02:19:26 +0000550 let Inst{6-10} = RS;
551 let Inst{11-15} = RA;
552 let Inst{16-20} = SH{1-5};
553 let Inst{21-26} = MBE;
554 let Inst{27-29} = xo;
555 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000556 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000557}
558
Nate Begeman8492fd32005-11-23 05:29:52 +0000559// E-1 VA-Form
560class VAForm_1<bits<6> xo, dag OL, string asmstr,
561 InstrItinClass itin, list<dag> pattern>
562 : I<4, OL, asmstr, itin> {
563 bits<5> VD;
564 bits<5> VA;
565 bits<5> VB;
566 bits<5> VC;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000567
568 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000569
570 let Inst{6-10} = VD;
571 let Inst{11-15} = VA;
572 let Inst{16-20} = VB;
573 let Inst{21-25} = VC;
574 let Inst{26-31} = xo;
575}
576
577// E-2 VX-Form
578class VXForm_1<bits<11> xo, dag OL, string asmstr,
579 InstrItinClass itin, list<dag> pattern>
580 : I<4, OL, asmstr, itin> {
581 bits<5> VD;
582 bits<5> VA;
583 bits<5> VB;
584
Nate Begeman11fd6b22005-11-26 22:39:34 +0000585 let Pattern = pattern;
586
Nate Begeman8492fd32005-11-23 05:29:52 +0000587 let Inst{6-10} = VD;
588 let Inst{11-15} = VA;
589 let Inst{16-20} = VB;
590 let Inst{21-31} = xo;
591}
592
Nate Begemanc1381182005-11-29 08:04:45 +0000593class VXForm_2<bits<11> xo, dag OL, string asmstr,
594 InstrItinClass itin, list<dag> pattern>
595 : I<4, OL, asmstr, itin> {
596 bits<5> VD;
597 bits<5> VB;
598
599 let Pattern = pattern;
600
601 let Inst{6-10} = VD;
602 let Inst{11-15} = 0;
603 let Inst{16-20} = VB;
604 let Inst{21-31} = xo;
605}
606
Nate Begeman8492fd32005-11-23 05:29:52 +0000607// E-4 VXR-Form
608class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
609 InstrItinClass itin, list<dag> pattern>
610 : I<4, OL, asmstr, itin> {
611 bits<5> VD;
612 bits<5> VA;
613 bits<5> VB;
614
Nate Begeman11fd6b22005-11-26 22:39:34 +0000615 let Pattern = pattern;
616
Nate Begeman8492fd32005-11-23 05:29:52 +0000617 let Inst{6-10} = VD;
618 let Inst{11-15} = VA;
619 let Inst{16-20} = VB;
620 let Inst{21} = rc;
621 let Inst{22-31} = xo;
622}
623
Misha Brukman6b21bde2004-08-02 21:56:35 +0000624//===----------------------------------------------------------------------===//
Jim Laskey74ab9962005-10-19 19:51:16 +0000625def NoItin : InstrItinClass;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000626class Pseudo<dag OL, string asmstr, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000627 : I<0, OL, asmstr, NoItin> {
Nate Begeman61738782004-09-02 08:13:00 +0000628 let PPC64 = 0;
629 let VMX = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000630 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000631 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000632}