blob: b08f18618f3c9593c385dbc0f25c28bd38159676 [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
Evan Cheng64d80e32007-07-19 01:14:50 +0000312class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000313 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000314 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000315}
316
Evan Cheng64d80e32007-07-19 01:14:50 +0000317class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000318 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000319 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000320 let A = 0;
321}
322
Evan Cheng64d80e32007-07-19 01:14:50 +0000323class XForm_28<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
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000328// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
329// numbers presumably relates to some document, but I haven't found it.
330class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
331 InstrItinClass itin, list<dag> pattern>
332 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
333 let Pattern = pattern;
334
335 bit RC = 0; // set by isDOT
336
337 let Inst{6-10} = RST;
338 let Inst{11-20} = 0;
339 let Inst{21-30} = xo;
340 let Inst{31} = RC;
341}
342class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
343 InstrItinClass itin, list<dag> pattern>
344 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
345 let Pattern = pattern;
346 bits<5> FM;
347
348 bit RC = 0; // set by isDOT
349
350 let Inst{6-10} = FM;
351 let Inst{11-20} = 0;
352 let Inst{21-30} = xo;
353 let Inst{31} = RC;
354}
355
Chris Lattner001db452006-06-06 21:29:23 +0000356// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000357class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattner001db452006-06-06 21:29:23 +0000358 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000359 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattner001db452006-06-06 21:29:23 +0000360 bits<5> A;
361 bits<5> B;
362
363 let Pattern = pattern;
364
365 let Inst{6-10} = immfield;
366 let Inst{11-15} = A;
367 let Inst{16-20} = B;
368 let Inst{21-30} = xo;
369 let Inst{31} = 0;
370}
371
372
Chris Lattnerd8242b42006-04-05 22:27:14 +0000373// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000374class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerd8242b42006-04-05 22:27:14 +0000375 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000376 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerd8242b42006-04-05 22:27:14 +0000377 bits<1> T;
378 bits<2> STRM;
379 bits<5> A;
380 bits<5> B;
381
382 let Pattern = pattern;
383
384 let Inst{6} = T;
385 let Inst{7-8} = 0;
386 let Inst{9-10} = STRM;
387 let Inst{11-15} = A;
388 let Inst{16-20} = B;
389 let Inst{21-30} = xo;
390 let Inst{31} = 0;
391}
392
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000393// 1.7.7 XL-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000394class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000395 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000396 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000397 bits<5> CRD;
398 bits<5> CRA;
399 bits<5> CRB;
Nate Begemanef7288c2005-04-14 03:20:38 +0000400
Chris Lattnereb95d412007-02-25 05:07:49 +0000401 let Pattern = pattern;
402
403 let Inst{6-10} = CRD;
404 let Inst{11-15} = CRA;
405 let Inst{16-20} = CRB;
406 let Inst{21-30} = xo;
407 let Inst{31} = 0;
408}
409
Evan Cheng64d80e32007-07-19 01:14:50 +0000410class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000411 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000412 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000413 bits<5> CRD;
414
415 let Pattern = pattern;
416
417 let Inst{6-10} = CRD;
418 let Inst{11-15} = CRD;
419 let Inst{16-20} = CRD;
Nate Begemanef7288c2005-04-14 03:20:38 +0000420 let Inst{21-30} = xo;
421 let Inst{31} = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000422}
423
Evan Cheng64d80e32007-07-19 01:14:50 +0000424class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000425 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000426 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000427 bits<5> BO;
428 bits<5> BI;
429 bits<2> BH;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000430
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000431 let Pattern = pattern;
432
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000433 let Inst{6-10} = BO;
434 let Inst{11-15} = BI;
435 let Inst{16-18} = 0;
436 let Inst{19-20} = BH;
437 let Inst{21-30} = xo;
438 let Inst{31} = lk;
439}
440
Chris Lattner6fc40072006-11-04 05:42:48 +0000441class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000442 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
443 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner6fc40072006-11-04 05:42:48 +0000444 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
445 bits<3> CR;
446
Chris Lattner09213652006-11-07 01:51:50 +0000447 let BO = BIBO{2-6};
448 let BI{0-1} = BIBO{0-1};
Chris Lattner6fc40072006-11-04 05:42:48 +0000449 let BI{2-4} = CR;
450 let BH = 0;
451}
452
453
Jim Laskey53842142005-10-19 19:51:16 +0000454class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000455 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
456 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000457 let BO = bo;
458 let BI = bi;
459 let BH = 0;
460}
461
Evan Cheng64d80e32007-07-19 01:14:50 +0000462class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000463 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000464 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000465 bits<3> BF;
466 bits<3> BFA;
467
468 let Inst{6-8} = BF;
469 let Inst{9-10} = 0;
470 let Inst{11-13} = BFA;
471 let Inst{14-15} = 0;
472 let Inst{16-20} = 0;
473 let Inst{21-30} = xo;
474 let Inst{31} = 0;
475}
476
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000477// 1.7.8 XFX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000478class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000479 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000480 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000481 bits<5> RT;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000482 bits<10> SPR;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000483
Nate Begeman7af02482005-04-12 07:04:16 +0000484 let Inst{6-10} = RT;
Nate Begeman7ac8e6b2005-11-29 22:42:50 +0000485 let Inst{11} = SPR{4};
486 let Inst{12} = SPR{3};
487 let Inst{13} = SPR{2};
488 let Inst{14} = SPR{1};
489 let Inst{15} = SPR{0};
490 let Inst{16} = SPR{9};
491 let Inst{17} = SPR{8};
492 let Inst{18} = SPR{7};
493 let Inst{19} = SPR{6};
494 let Inst{20} = SPR{5};
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000495 let Inst{21-30} = xo;
496 let Inst{31} = 0;
497}
498
Chris Lattner5035cef2005-04-19 04:40:07 +0000499class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000500 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
501 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000502 let SPR = spr;
503}
504
Evan Cheng64d80e32007-07-19 01:14:50 +0000505class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000506 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000507 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000508 bits<5> RT;
509
510 let Inst{6-10} = RT;
511 let Inst{11-20} = 0;
512 let Inst{21-30} = xo;
513 let Inst{31} = 0;
514}
515
Evan Cheng64d80e32007-07-19 01:14:50 +0000516class XFXForm_5<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<8> FXM;
520 bits<5> ST;
521
522 let Inst{6-10} = ST;
Nate Begeman394cd132005-08-08 20:04:52 +0000523 let Inst{11} = 0;
Nate Begeman7af02482005-04-12 07:04:16 +0000524 let Inst{12-19} = FXM;
525 let Inst{20} = 0;
526 let Inst{21-30} = xo;
527 let Inst{31} = 0;
528}
529
Evan Cheng64d80e32007-07-19 01:14:50 +0000530class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000531 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000532 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman394cd132005-08-08 20:04:52 +0000533 bits<5> ST;
534 bits<8> FXM;
535
536 let Inst{6-10} = ST;
537 let Inst{11} = 1;
538 let Inst{12-19} = FXM;
539 let Inst{20} = 0;
540 let Inst{21-30} = xo;
541 let Inst{31} = 0;
542}
543
Evan Cheng64d80e32007-07-19 01:14:50 +0000544class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000545 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000546 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000547
Nate Begeman07aada82004-08-30 02:28:06 +0000548class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000549 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
550 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000551 let SPR = spr;
552}
553
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000554// XFL-Form - MTFSF
555// This is probably 1.7.9, but I don't have the reference that uses this
556// numbering scheme...
557class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
558 string cstr, InstrItinClass itin, list<dag>pattern>
559 : I<opcode, OOL, IOL, asmstr, itin> {
560 bits<8> FM;
561 bits<5> RT;
562
563 bit RC = 0; // set by isDOT
564 let Pattern = pattern;
565 let Constraints = cstr;
566
567 let Inst{6} = 0;
568 let Inst{7-14} = FM;
569 let Inst{15} = 0;
570 let Inst{16-20} = RT;
571 let Inst{21-30} = xo;
572 let Inst{31} = RC;
573}
574
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000575// 1.7.10 XS-Form - SRADI.
Evan Cheng64d80e32007-07-19 01:14:50 +0000576class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere4172be2006-06-27 20:07:26 +0000577 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000578 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000579 bits<5> A;
Chris Lattnerc5d24592006-12-06 21:35:10 +0000580 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000581 bits<6> SH;
Nate Begeman244e64e2004-08-13 02:19:26 +0000582
Chris Lattner883059f2005-04-19 05:15:18 +0000583 bit RC = 0; // set by isDOT
Chris Lattnere4172be2006-06-27 20:07:26 +0000584 let Pattern = pattern;
Chris Lattner883059f2005-04-19 05:15:18 +0000585
Nate Begeman244e64e2004-08-13 02:19:26 +0000586 let Inst{6-10} = RS;
587 let Inst{11-15} = A;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000588 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman244e64e2004-08-13 02:19:26 +0000589 let Inst{21-29} = xo;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000590 let Inst{30} = SH{5};
Chris Lattner883059f2005-04-19 05:15:18 +0000591 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000592}
593
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000594// 1.7.11 XO-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000595class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000596 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000597 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000598 bits<5> RT;
599 bits<5> RA;
600 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000601
Chris Lattner218a15d2005-09-02 21:18:00 +0000602 let Pattern = pattern;
603
Chris Lattner14522e32005-04-19 05:21:30 +0000604 bit RC = 0; // set by isDOT
605
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000606 let Inst{6-10} = RT;
607 let Inst{11-15} = RA;
608 let Inst{16-20} = RB;
609 let Inst{21} = oe;
610 let Inst{22-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000611 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000612}
613
Chris Lattner14522e32005-04-19 05:21:30 +0000614class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng64d80e32007-07-19 01:14:50 +0000615 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
616 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000617 let RB = 0;
618}
619
620// 1.7.12 A-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000621class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000622 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000623 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000624 bits<5> FRT;
625 bits<5> FRA;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000626 bits<5> FRC;
Chris Lattner5cbf3bc2004-11-25 04:11:07 +0000627 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000628
Chris Lattner67ab1182005-09-29 23:34:24 +0000629 let Pattern = pattern;
630
Chris Lattner14522e32005-04-19 05:21:30 +0000631 bit RC = 0; // set by isDOT
632
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000633 let Inst{6-10} = FRT;
634 let Inst{11-15} = FRA;
635 let Inst{16-20} = FRB;
636 let Inst{21-25} = FRC;
637 let Inst{26-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000638 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000639}
640
Evan Cheng64d80e32007-07-19 01:14:50 +0000641class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000642 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000643 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000644 let FRC = 0;
645}
646
Evan Cheng64d80e32007-07-19 01:14:50 +0000647class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000648 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000649 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000650 let FRB = 0;
651}
652
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000653// 1.7.13 M-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000654class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000655 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000656 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000657 bits<5> RA;
Chris Lattner89d60de2004-11-23 19:23:32 +0000658 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000659 bits<5> RB;
660 bits<5> MB;
661 bits<5> ME;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000662
Nate Begeman2d5aff72005-10-19 18:42:01 +0000663 let Pattern = pattern;
664
Chris Lattner14522e32005-04-19 05:21:30 +0000665 bit RC = 0; // set by isDOT
666
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000667 let Inst{6-10} = RS;
668 let Inst{11-15} = RA;
669 let Inst{16-20} = RB;
670 let Inst{21-25} = MB;
671 let Inst{26-30} = ME;
Chris Lattner14522e32005-04-19 05:21:30 +0000672 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000673}
674
Evan Cheng64d80e32007-07-19 01:14:50 +0000675class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000676 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000677 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000678}
679
Nate Begeman244e64e2004-08-13 02:19:26 +0000680// 1.7.14 MD-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000681class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000682 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000683 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000684 bits<5> RA;
Chris Lattnera606b702006-07-13 21:52:41 +0000685 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000686 bits<6> SH;
687 bits<6> MBE;
Nate Begeman244e64e2004-08-13 02:19:26 +0000688
Nate Begeman2d5aff72005-10-19 18:42:01 +0000689 let Pattern = pattern;
690
Chris Lattner14522e32005-04-19 05:21:30 +0000691 bit RC = 0; // set by isDOT
692
Nate Begeman244e64e2004-08-13 02:19:26 +0000693 let Inst{6-10} = RS;
694 let Inst{11-15} = RA;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000695 let Inst{16-20} = SH{4,3,2,1,0};
696 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman244e64e2004-08-13 02:19:26 +0000697 let Inst{27-29} = xo;
Chris Lattnerb2c06502006-07-12 22:08:13 +0000698 let Inst{30} = SH{5};
Chris Lattner14522e32005-04-19 05:21:30 +0000699 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000700}
701
Chris Lattnerd8242b42006-04-05 22:27:14 +0000702
703
Nate Begemane4f17a52005-11-23 05:29:52 +0000704// E-1 VA-Form
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000705
706// VAForm_1 - DACB ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000707class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000708 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000709 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000710 bits<5> VD;
711 bits<5> VA;
Nate Begemane4f17a52005-11-23 05:29:52 +0000712 bits<5> VC;
Chris Lattnereb8b09f2006-03-22 01:44:36 +0000713 bits<5> VB;
Nate Begeman01595c52005-11-26 22:39:34 +0000714
715 let Pattern = pattern;
Nate Begemane4f17a52005-11-23 05:29:52 +0000716
717 let Inst{6-10} = VD;
718 let Inst{11-15} = VA;
719 let Inst{16-20} = VB;
720 let Inst{21-25} = VC;
721 let Inst{26-31} = xo;
722}
723
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000724// VAForm_1a - DABC ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000725class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000726 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000727 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000728 bits<5> VD;
729 bits<5> VA;
730 bits<5> VB;
731 bits<5> VC;
732
733 let Pattern = pattern;
734
735 let Inst{6-10} = VD;
736 let Inst{11-15} = VA;
737 let Inst{16-20} = VB;
738 let Inst{21-25} = VC;
739 let Inst{26-31} = xo;
740}
741
Evan Cheng64d80e32007-07-19 01:14:50 +0000742class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere7d959c2006-03-26 00:41:48 +0000743 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000744 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnere7d959c2006-03-26 00:41:48 +0000745 bits<5> VD;
746 bits<5> VA;
747 bits<5> VB;
748 bits<4> SH;
749
750 let Pattern = pattern;
751
752 let Inst{6-10} = VD;
753 let Inst{11-15} = VA;
754 let Inst{16-20} = VB;
755 let Inst{21} = 0;
756 let Inst{22-25} = SH;
757 let Inst{26-31} = xo;
758}
759
Nate Begemane4f17a52005-11-23 05:29:52 +0000760// E-2 VX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000761class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000762 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000763 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000764 bits<5> VD;
765 bits<5> VA;
766 bits<5> VB;
767
Nate Begeman01595c52005-11-26 22:39:34 +0000768 let Pattern = pattern;
769
Nate Begemane4f17a52005-11-23 05:29:52 +0000770 let Inst{6-10} = VD;
771 let Inst{11-15} = VA;
772 let Inst{16-20} = VB;
773 let Inst{21-31} = xo;
774}
775
Evan Cheng64d80e32007-07-19 01:14:50 +0000776class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman3fb68772005-12-14 00:34:09 +0000777 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000778 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman3fb68772005-12-14 00:34:09 +0000779 let VA = VD;
780 let VB = VD;
781}
782
783
Evan Cheng64d80e32007-07-19 01:14:50 +0000784class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman9b14f662005-11-29 08:04:45 +0000785 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000786 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman9b14f662005-11-29 08:04:45 +0000787 bits<5> VD;
788 bits<5> VB;
789
790 let Pattern = pattern;
791
792 let Inst{6-10} = VD;
793 let Inst{11-15} = 0;
794 let Inst{16-20} = VB;
795 let Inst{21-31} = xo;
796}
797
Evan Cheng64d80e32007-07-19 01:14:50 +0000798class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000799 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000800 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000801 bits<5> VD;
802 bits<5> IMM;
803
804 let Pattern = pattern;
805
806 let Inst{6-10} = VD;
807 let Inst{11-15} = IMM;
808 let Inst{16-20} = 0;
809 let Inst{21-31} = xo;
810}
811
Chris Lattner4d9100d2006-04-05 00:03:57 +0000812/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000813class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000814 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000815 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000816 bits<5> VD;
817
818 let Pattern = pattern;
819
820 let Inst{6-10} = VD;
821 let Inst{11-15} = 0;
822 let Inst{16-20} = 0;
823 let Inst{21-31} = xo;
824}
825
826/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000827class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000828 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000829 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000830 bits<5> VB;
831
832 let Pattern = pattern;
833
834 let Inst{6-10} = 0;
835 let Inst{11-15} = 0;
836 let Inst{16-20} = VB;
837 let Inst{21-31} = xo;
838}
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000839
Nate Begemane4f17a52005-11-23 05:29:52 +0000840// E-4 VXR-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000841class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000842 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000843 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000844 bits<5> VD;
845 bits<5> VA;
846 bits<5> VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000847 bit RC = 0;
Nate Begemane4f17a52005-11-23 05:29:52 +0000848
Nate Begeman01595c52005-11-26 22:39:34 +0000849 let Pattern = pattern;
850
Nate Begemane4f17a52005-11-23 05:29:52 +0000851 let Inst{6-10} = VD;
852 let Inst{11-15} = VA;
853 let Inst{16-20} = VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000854 let Inst{21} = RC;
Nate Begemane4f17a52005-11-23 05:29:52 +0000855 let Inst{22-31} = xo;
856}
857
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000858//===----------------------------------------------------------------------===//
Evan Cheng64d80e32007-07-19 01:14:50 +0000859class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
860 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000861 let PPC64 = 0;
Chris Lattner3075a4e2005-10-25 20:58:43 +0000862 let Pattern = pattern;
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000863 let Inst{31-0} = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +0000864}