blob: 54cebcdecd61a35b3f5bf23871ea04baff34a5d4 [file] [log] [blame]
Misha Brukman28791dd2004-08-02 16:54:54 +00001//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Misha Brukman28791dd2004-08-02 16:54:54 +00007//
8//===----------------------------------------------------------------------===//
Misha Brukman28791dd2004-08-02 16:54:54 +00009
Misha Brukmanc681a4e2004-08-02 21:56:35 +000010//===----------------------------------------------------------------------===//
11//
12// PowerPC instruction formats
Misha Brukman28791dd2004-08-02 16:54:54 +000013
Evan Cheng64d80e32007-07-19 01:14:50 +000014class I<bits<6> opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin>
Jim Laskey53842142005-10-19 19:51:16 +000015 : Instruction {
Misha Brukmanc681a4e2004-08-02 21:56:35 +000016 field bits<32> Inst;
Misha Brukman28791dd2004-08-02 16:54:54 +000017
Chris Lattner97a2d422005-04-19 05:05:22 +000018 bit PPC64 = 0; // Default value, override with isPPC64
Misha Brukman28791dd2004-08-02 16:54:54 +000019
Misha Brukman5b570812004-08-10 22:47:03 +000020 let Namespace = "PPC";
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000021 let Inst{0-5} = opcode;
Evan Cheng64d80e32007-07-19 01:14:50 +000022 let OutOperandList = OOL;
23 let InOperandList = IOL;
Nate Begemaned428532004-09-04 05:00:00 +000024 let AsmString = asmstr;
Jim Laskey53842142005-10-19 19:51:16 +000025 let Itinerary = itin;
Chris Lattner88d211f2006-03-12 09:13:49 +000026
27 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to
28 /// these must be reflected there! See comments there for what these are.
29 bits<1> PPC970_First = 0;
30 bits<1> PPC970_Single = 0;
Chris Lattnerfd977342006-03-13 05:15:10 +000031 bits<1> PPC970_Cracked = 0;
Chris Lattner88d211f2006-03-12 09:13:49 +000032 bits<3> PPC970_Unit = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +000033}
34
Chris Lattnerfd977342006-03-13 05:15:10 +000035class PPC970_DGroup_First { bits<1> PPC970_First = 1; }
36class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; }
37class PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; }
Chris Lattner88d211f2006-03-12 09:13:49 +000038class PPC970_MicroCode;
39
40class PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; }
41class PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; }
42class PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; }
43class PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; }
44class PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; }
45class PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; }
46class PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; }
47class PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; }
48
49
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000050// 1.7.1 I-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000051class IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr,
Chris Lattner1e484782005-12-04 18:42:54 +000052 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +000053 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner1e484782005-12-04 18:42:54 +000054 let Pattern = pattern;
Misha Brukmana671f3b2004-10-14 05:55:37 +000055 bits<24> LI;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000056
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000057 let Inst{6-29} = LI;
58 let Inst{30} = aa;
59 let Inst{31} = lk;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000060}
61
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000062// 1.7.2 B-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000063class BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr>
64 : I<opcode, OOL, IOL, asmstr, BrB> {
Chris Lattnerd5275152006-11-17 23:53:28 +000065 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
66 bits<3> CR;
67 bits<14> BD;
68
69 bits<5> BI;
70 let BI{0-1} = BIBO{5-6};
71 let BI{2-4} = CR{0-2};
72
73 let Inst{6-10} = BIBO{4-0};
74 let Inst{11-15} = BI;
75 let Inst{16-29} = BD;
76 let Inst{30} = aa;
77 let Inst{31} = lk;
78}
79
80
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000081// 1.7.4 D-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000082class DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr,
83 InstrItinClass itin, list<dag> pattern>
84 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +000085 bits<5> A;
86 bits<5> B;
87 bits<16> C;
Nate Begeman09761222005-12-09 23:54:18 +000088
89 let Pattern = pattern;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000090
Misha Brukmanc681a4e2004-08-02 21:56:35 +000091 let Inst{6-10} = A;
92 let Inst{11-15} = B;
93 let Inst{16-31} = C;
94}
95
Evan Cheng64d80e32007-07-19 01:14:50 +000096class DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
97 InstrItinClass itin, list<dag> pattern>
98 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmanbd7780b2004-10-23 06:08:38 +000099 bits<5> A;
100 bits<16> C;
101 bits<5> B;
Nate Begeman09761222005-12-09 23:54:18 +0000102
103 let Pattern = pattern;
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000104
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000105 let Inst{6-10} = A;
106 let Inst{11-15} = B;
107 let Inst{16-31} = C;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000108}
109
Evan Cheng64d80e32007-07-19 01:14:50 +0000110class DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
111 InstrItinClass itin, list<dag> pattern>
112 : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern>;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000113
Evan Cheng64d80e32007-07-19 01:14:50 +0000114class DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
115 InstrItinClass itin, list<dag> pattern>
116 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000117 bits<5> A;
118 bits<16> B;
Nate Begemaned428532004-09-04 05:00:00 +0000119
Chris Lattner3e63ead2005-09-08 17:33:10 +0000120 let Pattern = pattern;
121
Nate Begemaned428532004-09-04 05:00:00 +0000122 let Inst{6-10} = A;
123 let Inst{11-15} = 0;
124 let Inst{16-31} = B;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000125}
126
Evan Cheng64d80e32007-07-19 01:14:50 +0000127class DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
128 InstrItinClass itin, list<dag> pattern>
129 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner2f5091a2004-11-24 02:15:41 +0000130 bits<5> B;
131 bits<5> A;
132 bits<16> C;
133
Chris Lattnerbfde0802005-09-08 17:40:49 +0000134 let Pattern = pattern;
135
Chris Lattner2f5091a2004-11-24 02:15:41 +0000136 let Inst{6-10} = A;
137 let Inst{11-15} = B;
138 let Inst{16-31} = C;
139}
Nate Begemaned428532004-09-04 05:00:00 +0000140
Evan Cheng64d80e32007-07-19 01:14:50 +0000141class DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
142 InstrItinClass itin, list<dag> pattern>
143 : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000144 let A = 0;
145 let B = 0;
146 let C = 0;
147}
148
Evan Cheng64d80e32007-07-19 01:14:50 +0000149class DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
150 InstrItinClass itin>
151 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000152 bits<3> BF;
153 bits<1> L;
154 bits<5> RA;
155 bits<16> I;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000156
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000157 let Inst{6-8} = BF;
158 let Inst{9} = 0;
159 let Inst{10} = L;
160 let Inst{11-15} = RA;
161 let Inst{16-31} = I;
162}
163
Evan Cheng64d80e32007-07-19 01:14:50 +0000164class DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
165 InstrItinClass itin>
166 : DForm_5<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000167 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000168}
169
Evan Cheng64d80e32007-07-19 01:14:50 +0000170class DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
171 InstrItinClass itin>
172 : DForm_5<opcode, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000173
Evan Cheng64d80e32007-07-19 01:14:50 +0000174class DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
175 InstrItinClass itin>
176 : DForm_6<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000177 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000178}
179
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000180
Misha Brukman96b61102004-08-11 15:54:36 +0000181// 1.7.5 DS-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000182class DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000183 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000184 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000185 bits<5> RST;
186 bits<14> DS;
187 bits<5> RA;
Misha Brukman96b61102004-08-11 15:54:36 +0000188
Nate Begeman09761222005-12-09 23:54:18 +0000189 let Pattern = pattern;
190
Misha Brukman96b61102004-08-11 15:54:36 +0000191 let Inst{6-10} = RST;
192 let Inst{11-15} = RA;
193 let Inst{16-29} = DS;
194 let Inst{30-31} = xo;
195}
196
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000197// 1.7.6 X-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000198class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000199 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000200 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000201 bits<5> RST;
202 bits<5> A;
203 bits<5> B;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000204
Nate Begeman09761222005-12-09 23:54:18 +0000205 let Pattern = pattern;
206
Chris Lattner883059f2005-04-19 05:15:18 +0000207 bit RC = 0; // set by isDOT
208
Misha Brukman96b61102004-08-11 15:54:36 +0000209 let Inst{6-10} = RST;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000210 let Inst{11-15} = A;
211 let Inst{16-20} = B;
212 let Inst{21-30} = xo;
Chris Lattner883059f2005-04-19 05:15:18 +0000213 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000214}
215
Chris Lattner69efbdd2004-11-24 03:52:02 +0000216// This is the same as XForm_base_r3xo, but the first two operands are swapped
217// when code is emitted.
218class XForm_base_r3xo_swapped
Evan Cheng64d80e32007-07-19 01:14:50 +0000219 <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000220 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000221 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner69efbdd2004-11-24 03:52:02 +0000222 bits<5> A;
223 bits<5> RST;
224 bits<5> B;
225
Chris Lattner883059f2005-04-19 05:15:18 +0000226 bit RC = 0; // set by isDOT
227
Chris Lattner69efbdd2004-11-24 03:52:02 +0000228 let Inst{6-10} = RST;
229 let Inst{11-15} = A;
230 let Inst{16-20} = B;
231 let Inst{21-30} = xo;
Chris Lattner883059f2005-04-19 05:15:18 +0000232 let Inst{31} = RC;
Chris Lattner69efbdd2004-11-24 03:52:02 +0000233}
234
Nate Begeman244e64e2004-08-13 02:19:26 +0000235
Evan Cheng64d80e32007-07-19 01:14:50 +0000236class XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000237 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000238 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000239
Evan Cheng64d80e32007-07-19 01:14:50 +0000240class XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000241 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000242 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattner6159fb22005-09-02 22:35:53 +0000243 let Pattern = pattern;
244}
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000245
Evan Cheng64d80e32007-07-19 01:14:50 +0000246class XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000247 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000248 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000249
Evan Cheng64d80e32007-07-19 01:14:50 +0000250class XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000251 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000252 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Jim Laskey53842142005-10-19 19:51:16 +0000253 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000254}
255
Evan Cheng64d80e32007-07-19 01:14:50 +0000256class XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000257 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000258 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000259 let B = 0;
Chris Lattner6159fb22005-09-02 22:35:53 +0000260 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000261}
262
Evan Cheng64d80e32007-07-19 01:14:50 +0000263class XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000264 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000265 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000266 bits<3> BF;
267 bits<1> L;
268 bits<5> RA;
269 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000270
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000271 let Inst{6-8} = BF;
272 let Inst{9} = 0;
273 let Inst{10} = L;
274 let Inst{11-15} = RA;
275 let Inst{16-20} = RB;
276 let Inst{21-30} = xo;
277 let Inst{31} = 0;
278}
279
Evan Cheng64d80e32007-07-19 01:14:50 +0000280class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000281 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000282 : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattnere19d0b12005-04-19 04:51:30 +0000283 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000284}
285
Evan Cheng64d80e32007-07-19 01:14:50 +0000286class XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000287 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000288 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000289 bits<3> BF;
290 bits<5> FRA;
291 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000292
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000293 let Inst{6-8} = BF;
294 let Inst{9-10} = 0;
295 let Inst{11-15} = FRA;
296 let Inst{16-20} = FRB;
297 let Inst{21-30} = xo;
298 let Inst{31} = 0;
299}
300
Nate Begeman1db3c922008-08-11 17:36:31 +0000301class XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
302 InstrItinClass itin, list<dag> pattern>
303 : I<opcode, OOL, IOL, asmstr, itin> {
304 let Pattern = pattern;
305 let Inst{6-10} = 31;
306 let Inst{11-15} = 0;
307 let Inst{16-20} = 0;
308 let Inst{21-30} = xo;
309 let Inst{31} = 0;
310}
311
Dale Johannesenf87d6c02008-08-22 17:20:54 +0000312class XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
313 string asmstr, InstrItinClass itin, list<dag> pattern>
314 : I<opcode, OOL, IOL, asmstr, itin> {
315 let Pattern = pattern;
316 let Inst{6-10} = 0;
317 let Inst{11-15} = 0;
318 let Inst{16-20} = 0;
319 let Inst{21-30} = xo;
320 let Inst{31} = 0;
321}
322
Evan Cheng64d80e32007-07-19 01:14:50 +0000323class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000324 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000325 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000326}
327
Evan Cheng64d80e32007-07-19 01:14:50 +0000328class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000329 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000330 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000331 let A = 0;
332}
333
Evan Cheng64d80e32007-07-19 01:14:50 +0000334class XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000335 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000336 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000337}
338
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000339// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
340// numbers presumably relates to some document, but I haven't found it.
341class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
342 InstrItinClass itin, list<dag> pattern>
343 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
344 let Pattern = pattern;
345
346 bit RC = 0; // set by isDOT
347
348 let Inst{6-10} = RST;
349 let Inst{11-20} = 0;
350 let Inst{21-30} = xo;
351 let Inst{31} = RC;
352}
353class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
354 InstrItinClass itin, list<dag> pattern>
355 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
356 let Pattern = pattern;
357 bits<5> FM;
358
359 bit RC = 0; // set by isDOT
360
361 let Inst{6-10} = FM;
362 let Inst{11-20} = 0;
363 let Inst{21-30} = xo;
364 let Inst{31} = RC;
365}
366
Chris Lattner001db452006-06-06 21:29:23 +0000367// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000368class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattner001db452006-06-06 21:29:23 +0000369 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000370 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattner001db452006-06-06 21:29:23 +0000371 bits<5> A;
372 bits<5> B;
373
374 let Pattern = pattern;
375
376 let Inst{6-10} = immfield;
377 let Inst{11-15} = A;
378 let Inst{16-20} = B;
379 let Inst{21-30} = xo;
380 let Inst{31} = 0;
381}
382
383
Chris Lattnerd8242b42006-04-05 22:27:14 +0000384// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000385class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerd8242b42006-04-05 22:27:14 +0000386 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000387 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerd8242b42006-04-05 22:27:14 +0000388 bits<1> T;
389 bits<2> STRM;
390 bits<5> A;
391 bits<5> B;
392
393 let Pattern = pattern;
394
395 let Inst{6} = T;
396 let Inst{7-8} = 0;
397 let Inst{9-10} = STRM;
398 let Inst{11-15} = A;
399 let Inst{16-20} = B;
400 let Inst{21-30} = xo;
401 let Inst{31} = 0;
402}
403
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000404// 1.7.7 XL-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000405class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000406 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000407 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000408 bits<5> CRD;
409 bits<5> CRA;
410 bits<5> CRB;
Nate Begemanef7288c2005-04-14 03:20:38 +0000411
Chris Lattnereb95d412007-02-25 05:07:49 +0000412 let Pattern = pattern;
413
414 let Inst{6-10} = CRD;
415 let Inst{11-15} = CRA;
416 let Inst{16-20} = CRB;
417 let Inst{21-30} = xo;
418 let Inst{31} = 0;
419}
420
Evan Cheng64d80e32007-07-19 01:14:50 +0000421class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000422 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000423 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000424 bits<5> CRD;
425
426 let Pattern = pattern;
427
428 let Inst{6-10} = CRD;
429 let Inst{11-15} = CRD;
430 let Inst{16-20} = CRD;
Nate Begemanef7288c2005-04-14 03:20:38 +0000431 let Inst{21-30} = xo;
432 let Inst{31} = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000433}
434
Evan Cheng64d80e32007-07-19 01:14:50 +0000435class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000436 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000437 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000438 bits<5> BO;
439 bits<5> BI;
440 bits<2> BH;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000441
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000442 let Pattern = pattern;
443
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000444 let Inst{6-10} = BO;
445 let Inst{11-15} = BI;
446 let Inst{16-18} = 0;
447 let Inst{19-20} = BH;
448 let Inst{21-30} = xo;
449 let Inst{31} = lk;
450}
451
Chris Lattner6fc40072006-11-04 05:42:48 +0000452class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000453 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
454 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner6fc40072006-11-04 05:42:48 +0000455 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
456 bits<3> CR;
457
Chris Lattner09213652006-11-07 01:51:50 +0000458 let BO = BIBO{2-6};
459 let BI{0-1} = BIBO{0-1};
Chris Lattner6fc40072006-11-04 05:42:48 +0000460 let BI{2-4} = CR;
461 let BH = 0;
462}
463
464
Jim Laskey53842142005-10-19 19:51:16 +0000465class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000466 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
467 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000468 let BO = bo;
469 let BI = bi;
470 let BH = 0;
471}
472
Evan Cheng64d80e32007-07-19 01:14:50 +0000473class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000474 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000475 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000476 bits<3> BF;
477 bits<3> BFA;
478
479 let Inst{6-8} = BF;
480 let Inst{9-10} = 0;
481 let Inst{11-13} = BFA;
482 let Inst{14-15} = 0;
483 let Inst{16-20} = 0;
484 let Inst{21-30} = xo;
485 let Inst{31} = 0;
486}
487
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000488// 1.7.8 XFX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000489class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000490 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000491 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000492 bits<5> RT;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000493 bits<10> SPR;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000494
Nate Begeman7af02482005-04-12 07:04:16 +0000495 let Inst{6-10} = RT;
Nate Begeman7ac8e6b2005-11-29 22:42:50 +0000496 let Inst{11} = SPR{4};
497 let Inst{12} = SPR{3};
498 let Inst{13} = SPR{2};
499 let Inst{14} = SPR{1};
500 let Inst{15} = SPR{0};
501 let Inst{16} = SPR{9};
502 let Inst{17} = SPR{8};
503 let Inst{18} = SPR{7};
504 let Inst{19} = SPR{6};
505 let Inst{20} = SPR{5};
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000506 let Inst{21-30} = xo;
507 let Inst{31} = 0;
508}
509
Chris Lattner5035cef2005-04-19 04:40:07 +0000510class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000511 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
512 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000513 let SPR = spr;
514}
515
Evan Cheng64d80e32007-07-19 01:14:50 +0000516class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000517 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000518 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000519 bits<5> RT;
520
521 let Inst{6-10} = RT;
522 let Inst{11-20} = 0;
523 let Inst{21-30} = xo;
524 let Inst{31} = 0;
525}
526
Evan Cheng64d80e32007-07-19 01:14:50 +0000527class XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000528 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000529 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000530 bits<8> FXM;
531 bits<5> ST;
532
533 let Inst{6-10} = ST;
Nate Begeman394cd132005-08-08 20:04:52 +0000534 let Inst{11} = 0;
Nate Begeman7af02482005-04-12 07:04:16 +0000535 let Inst{12-19} = FXM;
536 let Inst{20} = 0;
537 let Inst{21-30} = xo;
538 let Inst{31} = 0;
539}
540
Evan Cheng64d80e32007-07-19 01:14:50 +0000541class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000542 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000543 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman394cd132005-08-08 20:04:52 +0000544 bits<5> ST;
545 bits<8> FXM;
546
547 let Inst{6-10} = ST;
548 let Inst{11} = 1;
549 let Inst{12-19} = FXM;
550 let Inst{20} = 0;
551 let Inst{21-30} = xo;
552 let Inst{31} = 0;
553}
554
Evan Cheng64d80e32007-07-19 01:14:50 +0000555class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000556 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000557 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000558
Nate Begeman07aada82004-08-30 02:28:06 +0000559class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000560 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
561 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000562 let SPR = spr;
563}
564
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000565// XFL-Form - MTFSF
566// This is probably 1.7.9, but I don't have the reference that uses this
567// numbering scheme...
568class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
569 string cstr, InstrItinClass itin, list<dag>pattern>
570 : I<opcode, OOL, IOL, asmstr, itin> {
571 bits<8> FM;
572 bits<5> RT;
573
574 bit RC = 0; // set by isDOT
575 let Pattern = pattern;
576 let Constraints = cstr;
577
578 let Inst{6} = 0;
579 let Inst{7-14} = FM;
580 let Inst{15} = 0;
581 let Inst{16-20} = RT;
582 let Inst{21-30} = xo;
583 let Inst{31} = RC;
584}
585
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000586// 1.7.10 XS-Form - SRADI.
Evan Cheng64d80e32007-07-19 01:14:50 +0000587class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere4172be2006-06-27 20:07:26 +0000588 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000589 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000590 bits<5> A;
Chris Lattnerc5d24592006-12-06 21:35:10 +0000591 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000592 bits<6> SH;
Nate Begeman244e64e2004-08-13 02:19:26 +0000593
Chris Lattner883059f2005-04-19 05:15:18 +0000594 bit RC = 0; // set by isDOT
Chris Lattnere4172be2006-06-27 20:07:26 +0000595 let Pattern = pattern;
Chris Lattner883059f2005-04-19 05:15:18 +0000596
Nate Begeman244e64e2004-08-13 02:19:26 +0000597 let Inst{6-10} = RS;
598 let Inst{11-15} = A;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000599 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman244e64e2004-08-13 02:19:26 +0000600 let Inst{21-29} = xo;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000601 let Inst{30} = SH{5};
Chris Lattner883059f2005-04-19 05:15:18 +0000602 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000603}
604
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000605// 1.7.11 XO-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000606class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000607 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000608 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000609 bits<5> RT;
610 bits<5> RA;
611 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000612
Chris Lattner218a15d2005-09-02 21:18:00 +0000613 let Pattern = pattern;
614
Chris Lattner14522e32005-04-19 05:21:30 +0000615 bit RC = 0; // set by isDOT
616
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000617 let Inst{6-10} = RT;
618 let Inst{11-15} = RA;
619 let Inst{16-20} = RB;
620 let Inst{21} = oe;
621 let Inst{22-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000622 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000623}
624
Chris Lattner14522e32005-04-19 05:21:30 +0000625class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng64d80e32007-07-19 01:14:50 +0000626 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
627 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000628 let RB = 0;
629}
630
631// 1.7.12 A-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000632class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000633 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000634 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000635 bits<5> FRT;
636 bits<5> FRA;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000637 bits<5> FRC;
Chris Lattner5cbf3bc2004-11-25 04:11:07 +0000638 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000639
Chris Lattner67ab1182005-09-29 23:34:24 +0000640 let Pattern = pattern;
641
Chris Lattner14522e32005-04-19 05:21:30 +0000642 bit RC = 0; // set by isDOT
643
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000644 let Inst{6-10} = FRT;
645 let Inst{11-15} = FRA;
646 let Inst{16-20} = FRB;
647 let Inst{21-25} = FRC;
648 let Inst{26-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000649 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000650}
651
Evan Cheng64d80e32007-07-19 01:14:50 +0000652class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000653 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000654 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000655 let FRC = 0;
656}
657
Evan Cheng64d80e32007-07-19 01:14:50 +0000658class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000659 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000660 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000661 let FRB = 0;
662}
663
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000664// 1.7.13 M-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000665class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000666 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000667 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000668 bits<5> RA;
Chris Lattner89d60de2004-11-23 19:23:32 +0000669 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000670 bits<5> RB;
671 bits<5> MB;
672 bits<5> ME;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000673
Nate Begeman2d5aff72005-10-19 18:42:01 +0000674 let Pattern = pattern;
675
Chris Lattner14522e32005-04-19 05:21:30 +0000676 bit RC = 0; // set by isDOT
677
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000678 let Inst{6-10} = RS;
679 let Inst{11-15} = RA;
680 let Inst{16-20} = RB;
681 let Inst{21-25} = MB;
682 let Inst{26-30} = ME;
Chris Lattner14522e32005-04-19 05:21:30 +0000683 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000684}
685
Evan Cheng64d80e32007-07-19 01:14:50 +0000686class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000687 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000688 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000689}
690
Nate Begeman244e64e2004-08-13 02:19:26 +0000691// 1.7.14 MD-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000692class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000693 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000694 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000695 bits<5> RA;
Chris Lattnera606b702006-07-13 21:52:41 +0000696 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000697 bits<6> SH;
698 bits<6> MBE;
Nate Begeman244e64e2004-08-13 02:19:26 +0000699
Nate Begeman2d5aff72005-10-19 18:42:01 +0000700 let Pattern = pattern;
701
Chris Lattner14522e32005-04-19 05:21:30 +0000702 bit RC = 0; // set by isDOT
703
Nate Begeman244e64e2004-08-13 02:19:26 +0000704 let Inst{6-10} = RS;
705 let Inst{11-15} = RA;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000706 let Inst{16-20} = SH{4,3,2,1,0};
707 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman244e64e2004-08-13 02:19:26 +0000708 let Inst{27-29} = xo;
Chris Lattnerb2c06502006-07-12 22:08:13 +0000709 let Inst{30} = SH{5};
Chris Lattner14522e32005-04-19 05:21:30 +0000710 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000711}
712
Chris Lattnerd8242b42006-04-05 22:27:14 +0000713
714
Nate Begemane4f17a52005-11-23 05:29:52 +0000715// E-1 VA-Form
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000716
717// VAForm_1 - DACB ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000718class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000719 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000720 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000721 bits<5> VD;
722 bits<5> VA;
Nate Begemane4f17a52005-11-23 05:29:52 +0000723 bits<5> VC;
Chris Lattnereb8b09f2006-03-22 01:44:36 +0000724 bits<5> VB;
Nate Begeman01595c52005-11-26 22:39:34 +0000725
726 let Pattern = pattern;
Nate Begemane4f17a52005-11-23 05:29:52 +0000727
728 let Inst{6-10} = VD;
729 let Inst{11-15} = VA;
730 let Inst{16-20} = VB;
731 let Inst{21-25} = VC;
732 let Inst{26-31} = xo;
733}
734
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000735// VAForm_1a - DABC ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000736class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000737 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000738 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000739 bits<5> VD;
740 bits<5> VA;
741 bits<5> VB;
742 bits<5> VC;
743
744 let Pattern = pattern;
745
746 let Inst{6-10} = VD;
747 let Inst{11-15} = VA;
748 let Inst{16-20} = VB;
749 let Inst{21-25} = VC;
750 let Inst{26-31} = xo;
751}
752
Evan Cheng64d80e32007-07-19 01:14:50 +0000753class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere7d959c2006-03-26 00:41:48 +0000754 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000755 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnere7d959c2006-03-26 00:41:48 +0000756 bits<5> VD;
757 bits<5> VA;
758 bits<5> VB;
759 bits<4> SH;
760
761 let Pattern = pattern;
762
763 let Inst{6-10} = VD;
764 let Inst{11-15} = VA;
765 let Inst{16-20} = VB;
766 let Inst{21} = 0;
767 let Inst{22-25} = SH;
768 let Inst{26-31} = xo;
769}
770
Nate Begemane4f17a52005-11-23 05:29:52 +0000771// E-2 VX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000772class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000773 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000774 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000775 bits<5> VD;
776 bits<5> VA;
777 bits<5> VB;
778
Nate Begeman01595c52005-11-26 22:39:34 +0000779 let Pattern = pattern;
780
Nate Begemane4f17a52005-11-23 05:29:52 +0000781 let Inst{6-10} = VD;
782 let Inst{11-15} = VA;
783 let Inst{16-20} = VB;
784 let Inst{21-31} = xo;
785}
786
Evan Cheng64d80e32007-07-19 01:14:50 +0000787class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman3fb68772005-12-14 00:34:09 +0000788 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000789 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman3fb68772005-12-14 00:34:09 +0000790 let VA = VD;
791 let VB = VD;
792}
793
794
Evan Cheng64d80e32007-07-19 01:14:50 +0000795class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman9b14f662005-11-29 08:04:45 +0000796 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000797 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman9b14f662005-11-29 08:04:45 +0000798 bits<5> VD;
799 bits<5> VB;
800
801 let Pattern = pattern;
802
803 let Inst{6-10} = VD;
804 let Inst{11-15} = 0;
805 let Inst{16-20} = VB;
806 let Inst{21-31} = xo;
807}
808
Evan Cheng64d80e32007-07-19 01:14:50 +0000809class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000810 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000811 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000812 bits<5> VD;
813 bits<5> IMM;
814
815 let Pattern = pattern;
816
817 let Inst{6-10} = VD;
818 let Inst{11-15} = IMM;
819 let Inst{16-20} = 0;
820 let Inst{21-31} = xo;
821}
822
Chris Lattner4d9100d2006-04-05 00:03:57 +0000823/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000824class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000825 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000826 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000827 bits<5> VD;
828
829 let Pattern = pattern;
830
831 let Inst{6-10} = VD;
832 let Inst{11-15} = 0;
833 let Inst{16-20} = 0;
834 let Inst{21-31} = xo;
835}
836
837/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000838class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000839 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000840 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000841 bits<5> VB;
842
843 let Pattern = pattern;
844
845 let Inst{6-10} = 0;
846 let Inst{11-15} = 0;
847 let Inst{16-20} = VB;
848 let Inst{21-31} = xo;
849}
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000850
Nate Begemane4f17a52005-11-23 05:29:52 +0000851// E-4 VXR-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000852class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000853 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000854 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000855 bits<5> VD;
856 bits<5> VA;
857 bits<5> VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000858 bit RC = 0;
Nate Begemane4f17a52005-11-23 05:29:52 +0000859
Nate Begeman01595c52005-11-26 22:39:34 +0000860 let Pattern = pattern;
861
Nate Begemane4f17a52005-11-23 05:29:52 +0000862 let Inst{6-10} = VD;
863 let Inst{11-15} = VA;
864 let Inst{16-20} = VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000865 let Inst{21} = RC;
Nate Begemane4f17a52005-11-23 05:29:52 +0000866 let Inst{22-31} = xo;
867}
868
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000869//===----------------------------------------------------------------------===//
Evan Cheng64d80e32007-07-19 01:14:50 +0000870class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
871 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000872 let PPC64 = 0;
Chris Lattner3075a4e2005-10-25 20:58:43 +0000873 let Pattern = pattern;
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000874 let Inst{31-0} = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +0000875}