blob: ee04dd62ee36d5ddf63a24d0b8374f021043ab11 [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;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000364 let Inst{11-20} = SPR;
365 let Inst{21-30} = xo;
366 let Inst{31} = 0;
367}
368
Chris Lattnerd790d222005-04-19 04:40:07 +0000369class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000370 dag OL, string asmstr, InstrItinClass itin>
371 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000372 let SPR = spr;
373}
374
Jim Laskey74ab9962005-10-19 19:51:16 +0000375class XFXForm_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<5> RT;
379
380 let Inst{6-10} = RT;
381 let Inst{11-20} = 0;
382 let Inst{21-30} = xo;
383 let Inst{31} = 0;
384}
385
Jim Laskey74ab9962005-10-19 19:51:16 +0000386class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
387 InstrItinClass itin>
388 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000389 bits<8> FXM;
390 bits<5> ST;
391
392 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000393 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000394 let Inst{12-19} = FXM;
395 let Inst{20} = 0;
396 let Inst{21-30} = xo;
397 let Inst{31} = 0;
398}
399
Jim Laskey74ab9962005-10-19 19:51:16 +0000400class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
401 InstrItinClass itin>
402 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000403 bits<5> ST;
404 bits<8> FXM;
405
406 let Inst{6-10} = ST;
407 let Inst{11} = 1;
408 let Inst{12-19} = FXM;
409 let Inst{20} = 0;
410 let Inst{21-30} = xo;
411 let Inst{31} = 0;
412}
413
414
Jim Laskey74ab9962005-10-19 19:51:16 +0000415class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
416 InstrItinClass itin>
417 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000418
Nate Begeman143cf942004-08-30 02:28:06 +0000419class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000420 dag OL, string asmstr, InstrItinClass itin>
421 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000422 let SPR = spr;
423}
424
Nate Begeman765cb5f2004-08-13 02:19:26 +0000425// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000426class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
427 InstrItinClass itin>
428 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000429 bits<5> RS;
430 bits<5> A;
431 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000432
Chris Lattnerf9172e12005-04-19 05:15:18 +0000433 bit RC = 0; // set by isDOT
434
Nate Begeman765cb5f2004-08-13 02:19:26 +0000435 let Inst{6-10} = RS;
436 let Inst{11-15} = A;
437 let Inst{16-20} = SH{1-5};
438 let Inst{21-29} = xo;
439 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000440 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000441}
442
Misha Brukman5295e1d2004-08-09 17:24:04 +0000443// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000444class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000445 InstrItinClass itin, list<dag> pattern>
446 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000447 bits<5> RT;
448 bits<5> RA;
449 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000450
Chris Lattner3a1002d2005-09-02 21:18:00 +0000451 let Pattern = pattern;
452
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000453 bit RC = 0; // set by isDOT
454
Misha Brukman5295e1d2004-08-09 17:24:04 +0000455 let Inst{6-10} = RT;
456 let Inst{11-15} = RA;
457 let Inst{16-20} = RB;
458 let Inst{21} = oe;
459 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000460 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000461}
462
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000463class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000464 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
465 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000466 let RB = 0;
467}
468
469// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000470class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000471 InstrItinClass itin, list<dag> pattern>
472 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000473 bits<5> FRT;
474 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000475 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000476 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000477
Chris Lattner027a2672005-09-29 23:34:24 +0000478 let Pattern = pattern;
479
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000480 bit RC = 0; // set by isDOT
481
Misha Brukman5295e1d2004-08-09 17:24:04 +0000482 let Inst{6-10} = FRT;
483 let Inst{11-15} = FRA;
484 let Inst{16-20} = FRB;
485 let Inst{21-25} = FRC;
486 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000487 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000488}
489
Jim Laskey74ab9962005-10-19 19:51:16 +0000490class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
491 InstrItinClass itin, list<dag> pattern>
492 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000493 let FRC = 0;
494}
495
Jim Laskey74ab9962005-10-19 19:51:16 +0000496class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
497 InstrItinClass itin, list<dag> pattern>
498 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000499 let FRB = 0;
500}
501
Misha Brukman5295e1d2004-08-09 17:24:04 +0000502// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000503class MForm_1<bits<6> opcode, dag OL, string asmstr,
504 InstrItinClass itin, list<dag> pattern>
505 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000506 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000507 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000508 bits<5> RB;
509 bits<5> MB;
510 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000511
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000512 let Pattern = pattern;
513
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000514 bit RC = 0; // set by isDOT
515
Misha Brukman5295e1d2004-08-09 17:24:04 +0000516 let Inst{6-10} = RS;
517 let Inst{11-15} = RA;
518 let Inst{16-20} = RB;
519 let Inst{21-25} = MB;
520 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000521 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000522}
523
Jim Laskey74ab9962005-10-19 19:51:16 +0000524class MForm_2<bits<6> opcode, dag OL, string asmstr,
525 InstrItinClass itin, list<dag> pattern>
526 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000527}
528
Nate Begeman765cb5f2004-08-13 02:19:26 +0000529// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000530class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
531 InstrItinClass itin, list<dag> pattern>
532 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000533 bits<5> RS;
534 bits<5> RA;
535 bits<6> SH;
536 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000537
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000538 let Pattern = pattern;
539
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000540 bit RC = 0; // set by isDOT
541
Nate Begeman765cb5f2004-08-13 02:19:26 +0000542 let Inst{6-10} = RS;
543 let Inst{11-15} = RA;
544 let Inst{16-20} = SH{1-5};
545 let Inst{21-26} = MBE;
546 let Inst{27-29} = xo;
547 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000548 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000549}
550
Misha Brukman6b21bde2004-08-02 21:56:35 +0000551//===----------------------------------------------------------------------===//
Jim Laskey74ab9962005-10-19 19:51:16 +0000552def NoItin : InstrItinClass;
553class Pseudo<dag OL, string asmstr>
554 : I<0, OL, asmstr, NoItin> {
Nate Begeman61738782004-09-02 08:13:00 +0000555 let PPC64 = 0;
556 let VMX = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000557
Nate Begeman61738782004-09-02 08:13:00 +0000558 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000559}