blob: 4d69c7700bab33f85bf52b4f65a0cbe86dc83202 [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,
Chris Lattnerd9d18af2005-12-04 18:42:54 +000034 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +000035 : I<opcode, OL, asmstr, itin> {
Chris Lattnerd9d18af2005-12-04 18:42:54 +000036 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000037 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000038
Misha Brukman5295e1d2004-08-09 17:24:04 +000039 let Inst{6-29} = LI;
40 let Inst{30} = aa;
41 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000042}
43
Misha Brukman5295e1d2004-08-09 17:24:04 +000044// 1.7.2 B-Form
Nate Begeman7b809f52005-08-26 04:11:42 +000045class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL,
Jim Laskey74ab9962005-10-19 19:51:16 +000046 string asmstr, InstrItinClass itin>
47 : I<opcode, OL, asmstr, itin> {
Nate Begeman7b809f52005-08-26 04:11:42 +000048 bits<3> CR;
Misha Brukman189f3dc2004-10-14 05:55:37 +000049 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000050
Nate Begeman7b809f52005-08-26 04:11:42 +000051 let Inst{6-10} = bo;
52 let Inst{11-13} = CR;
53 let Inst{14-15} = bicode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000054 let Inst{16-29} = BD;
55 let Inst{30} = aa;
56 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000057}
58
Misha Brukman5295e1d2004-08-09 17:24:04 +000059// 1.7.4 D-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000060class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
61 list<dag> pattern>
62 : I<opcode, OL, asmstr, itin> {
Chris Lattner2d8032b2005-09-08 17:33:10 +000063 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000064 bits<5> A;
65 bits<5> B;
66 bits<16> C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000067
Misha Brukman6b21bde2004-08-02 21:56:35 +000068 let Inst{6-10} = A;
69 let Inst{11-15} = B;
70 let Inst{16-31} = C;
71}
72
Jim Laskey74ab9962005-10-19 19:51:16 +000073class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
74 : I<opcode, OL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +000075 bits<5> A;
76 bits<16> C;
77 bits<5> B;
78
Misha Brukman15b0fb52004-10-23 06:08:38 +000079 let Inst{6-10} = A;
80 let Inst{11-15} = B;
81 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000082}
83
Jim Laskey74ab9962005-10-19 19:51:16 +000084class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
85 list<dag> pattern>
86 : DForm_base<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +000087
Jim Laskey74ab9962005-10-19 19:51:16 +000088class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
89 list<dag> pattern>
90 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000091 bits<5> A;
92 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +000093
Chris Lattner2d8032b2005-09-08 17:33:10 +000094 let Pattern = pattern;
95
Nate Begeman4bfceb12004-09-04 05:00:00 +000096 let Inst{6-10} = A;
97 let Inst{11-15} = 0;
98 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +000099}
100
101// Currently we make the use/def reg distinction in ISel, not tablegen
Jim Laskey74ab9962005-10-19 19:51:16 +0000102class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
103 : DForm_1<opcode, OL, asmstr, itin>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000104
Jim Laskey74ab9962005-10-19 19:51:16 +0000105class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
106 list<dag> pattern>
107 : I<opcode, OL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000108 bits<5> B;
109 bits<5> A;
110 bits<16> C;
111
Chris Lattner76cb0062005-09-08 17:40:49 +0000112 let Pattern = pattern;
113
Chris Lattner022e2712004-11-24 02:15:41 +0000114 let Inst{6-10} = A;
115 let Inst{11-15} = B;
116 let Inst{16-31} = C;
117}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000118
Jim Laskey74ab9962005-10-19 19:51:16 +0000119class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
120 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000121 let A = 0;
122 let B = 0;
123 let C = 0;
124}
125
Jim Laskey74ab9962005-10-19 19:51:16 +0000126class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
127 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000128 bits<3> BF;
129 bits<1> L;
130 bits<5> RA;
131 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000132
Misha Brukman5295e1d2004-08-09 17:24:04 +0000133 let Inst{6-8} = BF;
134 let Inst{9} = 0;
135 let Inst{10} = L;
136 let Inst{11-15} = RA;
137 let Inst{16-31} = I;
138}
139
Jim Laskey74ab9962005-10-19 19:51:16 +0000140class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
141 : DForm_5<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000142 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000143}
144
Jim Laskey74ab9962005-10-19 19:51:16 +0000145class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
146 : DForm_5<opcode, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000147
Jim Laskey74ab9962005-10-19 19:51:16 +0000148class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
149 : DForm_6<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000150 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000151}
152
Jim Laskey74ab9962005-10-19 19:51:16 +0000153class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
154 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000155}
156
Jim Laskey74ab9962005-10-19 19:51:16 +0000157class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
158 : DForm_1<opcode, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000159}
160
Misha Brukman28beda92004-08-11 15:54:36 +0000161// 1.7.5 DS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000162class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
163 InstrItinClass itin>
164 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000165 bits<5> RST;
166 bits<14> DS;
167 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000168
Misha Brukman28beda92004-08-11 15:54:36 +0000169 let Inst{6-10} = RST;
170 let Inst{11-15} = RA;
171 let Inst{16-29} = DS;
172 let Inst{30-31} = xo;
173}
174
Jim Laskey74ab9962005-10-19 19:51:16 +0000175class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
176 InstrItinClass itin>
177 : DSForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman28beda92004-08-11 15:54:36 +0000178
Misha Brukman5295e1d2004-08-09 17:24:04 +0000179// 1.7.6 X-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000180class XForm_base_r3xo<bits<6> opcode, bits<10> xo,
Jim Laskey74ab9962005-10-19 19:51:16 +0000181 dag OL, string asmstr, InstrItinClass itin>
182 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000183 bits<5> RST;
184 bits<5> A;
185 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000186
Chris Lattnerf9172e12005-04-19 05:15:18 +0000187 bit RC = 0; // set by isDOT
188
Misha Brukman28beda92004-08-11 15:54:36 +0000189 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000190 let Inst{11-15} = A;
191 let Inst{16-20} = B;
192 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000193 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000194}
195
Chris Lattner130888ad2004-11-24 03:52:02 +0000196// This is the same as XForm_base_r3xo, but the first two operands are swapped
197// when code is emitted.
198class XForm_base_r3xo_swapped
Jim Laskey74ab9962005-10-19 19:51:16 +0000199 <bits<6> opcode, bits<10> xo, dag OL, string asmstr,
200 InstrItinClass itin>
201 : I<opcode, OL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000202 bits<5> A;
203 bits<5> RST;
204 bits<5> B;
205
Chris Lattnerf9172e12005-04-19 05:15:18 +0000206 bit RC = 0; // set by isDOT
207
Chris Lattner130888ad2004-11-24 03:52:02 +0000208 let Inst{6-10} = RST;
209 let Inst{11-15} = A;
210 let Inst{16-20} = B;
211 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000212 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000213}
214
Nate Begeman765cb5f2004-08-13 02:19:26 +0000215
Jim Laskey74ab9962005-10-19 19:51:16 +0000216class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
217 InstrItinClass itin>
218 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000219
Jim Laskey74ab9962005-10-19 19:51:16 +0000220class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
221 InstrItinClass itin, list<dag> pattern>
222 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000223 let Pattern = pattern;
224}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000225
Jim Laskey74ab9962005-10-19 19:51:16 +0000226class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
227 InstrItinClass itin>
228 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000229
Jim Laskey74ab9962005-10-19 19:51:16 +0000230class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
231 InstrItinClass itin, list<dag> pattern>
232 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
233 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000234}
235
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000236class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000237 InstrItinClass itin, list<dag> pattern>
238 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000239 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000240 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000241}
242
Jim Laskey74ab9962005-10-19 19:51:16 +0000243class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
244 InstrItinClass itin>
245 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000246 bits<3> BF;
247 bits<1> L;
248 bits<5> RA;
249 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000250
Misha Brukman5295e1d2004-08-09 17:24:04 +0000251 let Inst{6-8} = BF;
252 let Inst{9} = 0;
253 let Inst{10} = L;
254 let Inst{11-15} = RA;
255 let Inst{16-20} = RB;
256 let Inst{21-30} = xo;
257 let Inst{31} = 0;
258}
259
Jim Laskey74ab9962005-10-19 19:51:16 +0000260class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
261 InstrItinClass itin>
262 : XForm_16<opcode, xo, OL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000263 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000264}
265
Jim Laskey74ab9962005-10-19 19:51:16 +0000266class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
267 InstrItinClass itin>
268 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000269 bits<3> BF;
270 bits<5> FRA;
271 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000272
Misha Brukman5295e1d2004-08-09 17:24:04 +0000273 let Inst{6-8} = BF;
274 let Inst{9-10} = 0;
275 let Inst{11-15} = FRA;
276 let Inst{16-20} = FRB;
277 let Inst{21-30} = xo;
278 let Inst{31} = 0;
279}
280
Jim Laskey74ab9962005-10-19 19:51:16 +0000281class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
282 InstrItinClass itin>
283 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000284}
285
Jim Laskey74ab9962005-10-19 19:51:16 +0000286class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
287 InstrItinClass itin, list<dag> pattern>
288 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000289 let A = 0;
Jim Laskey74ab9962005-10-19 19:51:16 +0000290 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000291}
292
Jim Laskey74ab9962005-10-19 19:51:16 +0000293class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
294 InstrItinClass itin>
295 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000296}
297
298// 1.7.7 XL-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000299class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
300 InstrItinClass itin>
301 : I<opcode, OL, asmstr, itin> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000302 bits<3> CRD;
303 bits<2> CRDb;
304 bits<3> CRA;
305 bits<2> CRAb;
306 bits<3> CRB;
307 bits<2> CRBb;
308
309 let Inst{6-8} = CRD;
310 let Inst{9-10} = CRDb;
311 let Inst{11-13} = CRA;
312 let Inst{14-15} = CRAb;
313 let Inst{16-18} = CRB;
314 let Inst{19-20} = CRBb;
315 let Inst{21-30} = xo;
316 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000317}
318
Jim Laskey74ab9962005-10-19 19:51:16 +0000319class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr,
320 InstrItinClass itin>
321 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000322 bits<5> BO;
323 bits<5> BI;
324 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000325
Misha Brukman5295e1d2004-08-09 17:24:04 +0000326 let Inst{6-10} = BO;
327 let Inst{11-15} = BI;
328 let Inst{16-18} = 0;
329 let Inst{19-20} = BH;
330 let Inst{21-30} = xo;
331 let Inst{31} = lk;
332}
333
Jim Laskey74ab9962005-10-19 19:51:16 +0000334class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
335 dag OL, string asmstr, InstrItinClass itin>
336 : XLForm_2<opcode, xo, lk, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000337 let BO = bo;
338 let BI = bi;
339 let BH = 0;
340}
341
Jim Laskey74ab9962005-10-19 19:51:16 +0000342class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
343 InstrItinClass itin>
344 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000345 bits<3> BF;
346 bits<3> BFA;
347
348 let Inst{6-8} = BF;
349 let Inst{9-10} = 0;
350 let Inst{11-13} = BFA;
351 let Inst{14-15} = 0;
352 let Inst{16-20} = 0;
353 let Inst{21-30} = xo;
354 let Inst{31} = 0;
355}
356
Misha Brukman5295e1d2004-08-09 17:24:04 +0000357// 1.7.8 XFX-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000358class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
359 InstrItinClass itin>
360 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000361 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000362 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000363
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000364 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000365 let Inst{11} = SPR{4};
366 let Inst{12} = SPR{3};
367 let Inst{13} = SPR{2};
368 let Inst{14} = SPR{1};
369 let Inst{15} = SPR{0};
370 let Inst{16} = SPR{9};
371 let Inst{17} = SPR{8};
372 let Inst{18} = SPR{7};
373 let Inst{19} = SPR{6};
374 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000375 let Inst{21-30} = xo;
376 let Inst{31} = 0;
377}
378
Chris Lattnerd790d222005-04-19 04:40:07 +0000379class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000380 dag OL, string asmstr, InstrItinClass itin>
381 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000382 let SPR = spr;
383}
384
Jim Laskey74ab9962005-10-19 19:51:16 +0000385class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
386 InstrItinClass itin>
387 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000388 bits<5> RT;
389
390 let Inst{6-10} = RT;
391 let Inst{11-20} = 0;
392 let Inst{21-30} = xo;
393 let Inst{31} = 0;
394}
395
Jim Laskey74ab9962005-10-19 19:51:16 +0000396class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
397 InstrItinClass itin>
398 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000399 bits<8> FXM;
400 bits<5> ST;
401
402 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000403 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000404 let Inst{12-19} = FXM;
405 let Inst{20} = 0;
406 let Inst{21-30} = xo;
407 let Inst{31} = 0;
408}
409
Jim Laskey74ab9962005-10-19 19:51:16 +0000410class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
411 InstrItinClass itin>
412 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000413 bits<5> ST;
414 bits<8> FXM;
415
416 let Inst{6-10} = ST;
417 let Inst{11} = 1;
418 let Inst{12-19} = FXM;
419 let Inst{20} = 0;
420 let Inst{21-30} = xo;
421 let Inst{31} = 0;
422}
423
Jim Laskey74ab9962005-10-19 19:51:16 +0000424class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
425 InstrItinClass itin>
426 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000427
Nate Begeman143cf942004-08-30 02:28:06 +0000428class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000429 dag OL, string asmstr, InstrItinClass itin>
430 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000431 let SPR = spr;
432}
433
Nate Begeman765cb5f2004-08-13 02:19:26 +0000434// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000435class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
436 InstrItinClass itin>
437 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000438 bits<5> RS;
439 bits<5> A;
440 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000441
Chris Lattnerf9172e12005-04-19 05:15:18 +0000442 bit RC = 0; // set by isDOT
443
Nate Begeman765cb5f2004-08-13 02:19:26 +0000444 let Inst{6-10} = RS;
445 let Inst{11-15} = A;
446 let Inst{16-20} = SH{1-5};
447 let Inst{21-29} = xo;
448 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000449 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000450}
451
Misha Brukman5295e1d2004-08-09 17:24:04 +0000452// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000453class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000454 InstrItinClass itin, list<dag> pattern>
455 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000456 bits<5> RT;
457 bits<5> RA;
458 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000459
Chris Lattner3a1002d2005-09-02 21:18:00 +0000460 let Pattern = pattern;
461
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000462 bit RC = 0; // set by isDOT
463
Misha Brukman5295e1d2004-08-09 17:24:04 +0000464 let Inst{6-10} = RT;
465 let Inst{11-15} = RA;
466 let Inst{16-20} = RB;
467 let Inst{21} = oe;
468 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000469 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000470}
471
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000472class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000473 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
474 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000475 let RB = 0;
476}
477
478// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000479class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000480 InstrItinClass itin, list<dag> pattern>
481 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000482 bits<5> FRT;
483 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000484 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000485 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000486
Chris Lattner027a2672005-09-29 23:34:24 +0000487 let Pattern = pattern;
488
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000489 bit RC = 0; // set by isDOT
490
Misha Brukman5295e1d2004-08-09 17:24:04 +0000491 let Inst{6-10} = FRT;
492 let Inst{11-15} = FRA;
493 let Inst{16-20} = FRB;
494 let Inst{21-25} = FRC;
495 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000496 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000497}
498
Jim Laskey74ab9962005-10-19 19:51:16 +0000499class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
500 InstrItinClass itin, list<dag> pattern>
501 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000502 let FRC = 0;
503}
504
Jim Laskey74ab9962005-10-19 19:51:16 +0000505class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
506 InstrItinClass itin, list<dag> pattern>
507 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000508 let FRB = 0;
509}
510
Misha Brukman5295e1d2004-08-09 17:24:04 +0000511// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000512class MForm_1<bits<6> opcode, dag OL, string asmstr,
513 InstrItinClass itin, list<dag> pattern>
514 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000515 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000516 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000517 bits<5> RB;
518 bits<5> MB;
519 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000520
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000521 let Pattern = pattern;
522
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000523 bit RC = 0; // set by isDOT
524
Misha Brukman5295e1d2004-08-09 17:24:04 +0000525 let Inst{6-10} = RS;
526 let Inst{11-15} = RA;
527 let Inst{16-20} = RB;
528 let Inst{21-25} = MB;
529 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000530 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000531}
532
Jim Laskey74ab9962005-10-19 19:51:16 +0000533class MForm_2<bits<6> opcode, dag OL, string asmstr,
534 InstrItinClass itin, list<dag> pattern>
535 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000536}
537
Nate Begeman765cb5f2004-08-13 02:19:26 +0000538// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000539class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
540 InstrItinClass itin, list<dag> pattern>
541 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000542 bits<5> RS;
543 bits<5> RA;
544 bits<6> SH;
545 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000546
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000547 let Pattern = pattern;
548
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000549 bit RC = 0; // set by isDOT
550
Nate Begeman765cb5f2004-08-13 02:19:26 +0000551 let Inst{6-10} = RS;
552 let Inst{11-15} = RA;
553 let Inst{16-20} = SH{1-5};
554 let Inst{21-26} = MBE;
555 let Inst{27-29} = xo;
556 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000557 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000558}
559
Nate Begeman8492fd32005-11-23 05:29:52 +0000560// E-1 VA-Form
561class VAForm_1<bits<6> xo, dag OL, string asmstr,
562 InstrItinClass itin, list<dag> pattern>
563 : I<4, OL, asmstr, itin> {
564 bits<5> VD;
565 bits<5> VA;
566 bits<5> VB;
567 bits<5> VC;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000568
569 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000570
571 let Inst{6-10} = VD;
572 let Inst{11-15} = VA;
573 let Inst{16-20} = VB;
574 let Inst{21-25} = VC;
575 let Inst{26-31} = xo;
576}
577
578// E-2 VX-Form
579class VXForm_1<bits<11> xo, dag OL, string asmstr,
580 InstrItinClass itin, list<dag> pattern>
581 : I<4, OL, asmstr, itin> {
582 bits<5> VD;
583 bits<5> VA;
584 bits<5> VB;
585
Nate Begeman11fd6b22005-11-26 22:39:34 +0000586 let Pattern = pattern;
587
Nate Begeman8492fd32005-11-23 05:29:52 +0000588 let Inst{6-10} = VD;
589 let Inst{11-15} = VA;
590 let Inst{16-20} = VB;
591 let Inst{21-31} = xo;
592}
593
Nate Begemanc1381182005-11-29 08:04:45 +0000594class VXForm_2<bits<11> xo, dag OL, string asmstr,
595 InstrItinClass itin, list<dag> pattern>
596 : I<4, OL, asmstr, itin> {
597 bits<5> VD;
598 bits<5> VB;
599
600 let Pattern = pattern;
601
602 let Inst{6-10} = VD;
603 let Inst{11-15} = 0;
604 let Inst{16-20} = VB;
605 let Inst{21-31} = xo;
606}
607
Nate Begeman8492fd32005-11-23 05:29:52 +0000608// E-4 VXR-Form
609class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
610 InstrItinClass itin, list<dag> pattern>
611 : I<4, OL, asmstr, itin> {
612 bits<5> VD;
613 bits<5> VA;
614 bits<5> VB;
615
Nate Begeman11fd6b22005-11-26 22:39:34 +0000616 let Pattern = pattern;
617
Nate Begeman8492fd32005-11-23 05:29:52 +0000618 let Inst{6-10} = VD;
619 let Inst{11-15} = VA;
620 let Inst{16-20} = VB;
621 let Inst{21} = rc;
622 let Inst{22-31} = xo;
623}
624
Misha Brukman6b21bde2004-08-02 21:56:35 +0000625//===----------------------------------------------------------------------===//
Jim Laskey74ab9962005-10-19 19:51:16 +0000626def NoItin : InstrItinClass;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000627class Pseudo<dag OL, string asmstr, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000628 : I<0, OL, asmstr, NoItin> {
Nate Begeman61738782004-09-02 08:13:00 +0000629 let PPC64 = 0;
630 let VMX = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000631 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000632 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000633}