blob: 0355d950ded7d64d1c1c3e2ca1d5273282df5642 [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
Evan Cheng64d80e32007-07-19 01:14:50 +0000301class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000302 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000303 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000304}
305
Evan Cheng64d80e32007-07-19 01:14:50 +0000306class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000307 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000308 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000309 let A = 0;
310}
311
Evan Cheng64d80e32007-07-19 01:14:50 +0000312class XForm_28<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
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000317// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
318// numbers presumably relates to some document, but I haven't found it.
319class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
320 InstrItinClass itin, list<dag> pattern>
321 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
322 let Pattern = pattern;
323
324 bit RC = 0; // set by isDOT
325
326 let Inst{6-10} = RST;
327 let Inst{11-20} = 0;
328 let Inst{21-30} = xo;
329 let Inst{31} = RC;
330}
331class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
332 InstrItinClass itin, list<dag> pattern>
333 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
334 let Pattern = pattern;
335 bits<5> FM;
336
337 bit RC = 0; // set by isDOT
338
339 let Inst{6-10} = FM;
340 let Inst{11-20} = 0;
341 let Inst{21-30} = xo;
342 let Inst{31} = RC;
343}
344
Chris Lattner001db452006-06-06 21:29:23 +0000345// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000346class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattner001db452006-06-06 21:29:23 +0000347 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000348 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattner001db452006-06-06 21:29:23 +0000349 bits<5> A;
350 bits<5> B;
351
352 let Pattern = pattern;
353
354 let Inst{6-10} = immfield;
355 let Inst{11-15} = A;
356 let Inst{16-20} = B;
357 let Inst{21-30} = xo;
358 let Inst{31} = 0;
359}
360
361
Chris Lattnerd8242b42006-04-05 22:27:14 +0000362// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000363class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerd8242b42006-04-05 22:27:14 +0000364 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000365 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerd8242b42006-04-05 22:27:14 +0000366 bits<1> T;
367 bits<2> STRM;
368 bits<5> A;
369 bits<5> B;
370
371 let Pattern = pattern;
372
373 let Inst{6} = T;
374 let Inst{7-8} = 0;
375 let Inst{9-10} = STRM;
376 let Inst{11-15} = A;
377 let Inst{16-20} = B;
378 let Inst{21-30} = xo;
379 let Inst{31} = 0;
380}
381
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000382// 1.7.7 XL-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000383class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000384 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000385 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000386 bits<5> CRD;
387 bits<5> CRA;
388 bits<5> CRB;
Nate Begemanef7288c2005-04-14 03:20:38 +0000389
Chris Lattnereb95d412007-02-25 05:07:49 +0000390 let Pattern = pattern;
391
392 let Inst{6-10} = CRD;
393 let Inst{11-15} = CRA;
394 let Inst{16-20} = CRB;
395 let Inst{21-30} = xo;
396 let Inst{31} = 0;
397}
398
Evan Cheng64d80e32007-07-19 01:14:50 +0000399class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000400 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000401 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000402 bits<5> CRD;
403
404 let Pattern = pattern;
405
406 let Inst{6-10} = CRD;
407 let Inst{11-15} = CRD;
408 let Inst{16-20} = CRD;
Nate Begemanef7288c2005-04-14 03:20:38 +0000409 let Inst{21-30} = xo;
410 let Inst{31} = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000411}
412
Evan Cheng64d80e32007-07-19 01:14:50 +0000413class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000414 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000415 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000416 bits<5> BO;
417 bits<5> BI;
418 bits<2> BH;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000419
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000420 let Pattern = pattern;
421
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000422 let Inst{6-10} = BO;
423 let Inst{11-15} = BI;
424 let Inst{16-18} = 0;
425 let Inst{19-20} = BH;
426 let Inst{21-30} = xo;
427 let Inst{31} = lk;
428}
429
Chris Lattner6fc40072006-11-04 05:42:48 +0000430class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000431 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
432 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner6fc40072006-11-04 05:42:48 +0000433 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
434 bits<3> CR;
435
Chris Lattner09213652006-11-07 01:51:50 +0000436 let BO = BIBO{2-6};
437 let BI{0-1} = BIBO{0-1};
Chris Lattner6fc40072006-11-04 05:42:48 +0000438 let BI{2-4} = CR;
439 let BH = 0;
440}
441
442
Jim Laskey53842142005-10-19 19:51:16 +0000443class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000444 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
445 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000446 let BO = bo;
447 let BI = bi;
448 let BH = 0;
449}
450
Evan Cheng64d80e32007-07-19 01:14:50 +0000451class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000452 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000453 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000454 bits<3> BF;
455 bits<3> BFA;
456
457 let Inst{6-8} = BF;
458 let Inst{9-10} = 0;
459 let Inst{11-13} = BFA;
460 let Inst{14-15} = 0;
461 let Inst{16-20} = 0;
462 let Inst{21-30} = xo;
463 let Inst{31} = 0;
464}
465
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000466// 1.7.8 XFX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000467class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000468 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000469 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000470 bits<5> RT;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000471 bits<10> SPR;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000472
Nate Begeman7af02482005-04-12 07:04:16 +0000473 let Inst{6-10} = RT;
Nate Begeman7ac8e6b2005-11-29 22:42:50 +0000474 let Inst{11} = SPR{4};
475 let Inst{12} = SPR{3};
476 let Inst{13} = SPR{2};
477 let Inst{14} = SPR{1};
478 let Inst{15} = SPR{0};
479 let Inst{16} = SPR{9};
480 let Inst{17} = SPR{8};
481 let Inst{18} = SPR{7};
482 let Inst{19} = SPR{6};
483 let Inst{20} = SPR{5};
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000484 let Inst{21-30} = xo;
485 let Inst{31} = 0;
486}
487
Chris Lattner5035cef2005-04-19 04:40:07 +0000488class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000489 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
490 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000491 let SPR = spr;
492}
493
Evan Cheng64d80e32007-07-19 01:14:50 +0000494class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000495 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000496 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000497 bits<5> RT;
498
499 let Inst{6-10} = RT;
500 let Inst{11-20} = 0;
501 let Inst{21-30} = xo;
502 let Inst{31} = 0;
503}
504
Evan Cheng64d80e32007-07-19 01:14:50 +0000505class XFXForm_5<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<8> FXM;
509 bits<5> ST;
510
511 let Inst{6-10} = ST;
Nate Begeman394cd132005-08-08 20:04:52 +0000512 let Inst{11} = 0;
Nate Begeman7af02482005-04-12 07:04:16 +0000513 let Inst{12-19} = FXM;
514 let Inst{20} = 0;
515 let Inst{21-30} = xo;
516 let Inst{31} = 0;
517}
518
Evan Cheng64d80e32007-07-19 01:14:50 +0000519class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000520 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000521 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman394cd132005-08-08 20:04:52 +0000522 bits<5> ST;
523 bits<8> FXM;
524
525 let Inst{6-10} = ST;
526 let Inst{11} = 1;
527 let Inst{12-19} = FXM;
528 let Inst{20} = 0;
529 let Inst{21-30} = xo;
530 let Inst{31} = 0;
531}
532
Evan Cheng64d80e32007-07-19 01:14:50 +0000533class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000534 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000535 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000536
Nate Begeman07aada82004-08-30 02:28:06 +0000537class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000538 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
539 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000540 let SPR = spr;
541}
542
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000543// XFL-Form - MTFSF
544// This is probably 1.7.9, but I don't have the reference that uses this
545// numbering scheme...
546class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
547 string cstr, InstrItinClass itin, list<dag>pattern>
548 : I<opcode, OOL, IOL, asmstr, itin> {
549 bits<8> FM;
550 bits<5> RT;
551
552 bit RC = 0; // set by isDOT
553 let Pattern = pattern;
554 let Constraints = cstr;
555
556 let Inst{6} = 0;
557 let Inst{7-14} = FM;
558 let Inst{15} = 0;
559 let Inst{16-20} = RT;
560 let Inst{21-30} = xo;
561 let Inst{31} = RC;
562}
563
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000564// 1.7.10 XS-Form - SRADI.
Evan Cheng64d80e32007-07-19 01:14:50 +0000565class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere4172be2006-06-27 20:07:26 +0000566 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000567 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000568 bits<5> A;
Chris Lattnerc5d24592006-12-06 21:35:10 +0000569 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000570 bits<6> SH;
Nate Begeman244e64e2004-08-13 02:19:26 +0000571
Chris Lattner883059f2005-04-19 05:15:18 +0000572 bit RC = 0; // set by isDOT
Chris Lattnere4172be2006-06-27 20:07:26 +0000573 let Pattern = pattern;
Chris Lattner883059f2005-04-19 05:15:18 +0000574
Nate Begeman244e64e2004-08-13 02:19:26 +0000575 let Inst{6-10} = RS;
576 let Inst{11-15} = A;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000577 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman244e64e2004-08-13 02:19:26 +0000578 let Inst{21-29} = xo;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000579 let Inst{30} = SH{5};
Chris Lattner883059f2005-04-19 05:15:18 +0000580 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000581}
582
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000583// 1.7.11 XO-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000584class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000585 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000586 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000587 bits<5> RT;
588 bits<5> RA;
589 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000590
Chris Lattner218a15d2005-09-02 21:18:00 +0000591 let Pattern = pattern;
592
Chris Lattner14522e32005-04-19 05:21:30 +0000593 bit RC = 0; // set by isDOT
594
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000595 let Inst{6-10} = RT;
596 let Inst{11-15} = RA;
597 let Inst{16-20} = RB;
598 let Inst{21} = oe;
599 let Inst{22-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000600 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000601}
602
Chris Lattner14522e32005-04-19 05:21:30 +0000603class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng64d80e32007-07-19 01:14:50 +0000604 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
605 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000606 let RB = 0;
607}
608
609// 1.7.12 A-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000610class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000611 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000612 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000613 bits<5> FRT;
614 bits<5> FRA;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000615 bits<5> FRC;
Chris Lattner5cbf3bc2004-11-25 04:11:07 +0000616 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000617
Chris Lattner67ab1182005-09-29 23:34:24 +0000618 let Pattern = pattern;
619
Chris Lattner14522e32005-04-19 05:21:30 +0000620 bit RC = 0; // set by isDOT
621
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000622 let Inst{6-10} = FRT;
623 let Inst{11-15} = FRA;
624 let Inst{16-20} = FRB;
625 let Inst{21-25} = FRC;
626 let Inst{26-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000627 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000628}
629
Evan Cheng64d80e32007-07-19 01:14:50 +0000630class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000631 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000632 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000633 let FRC = 0;
634}
635
Evan Cheng64d80e32007-07-19 01:14:50 +0000636class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000637 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000638 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000639 let FRB = 0;
640}
641
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000642// 1.7.13 M-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000643class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000644 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000645 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000646 bits<5> RA;
Chris Lattner89d60de2004-11-23 19:23:32 +0000647 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000648 bits<5> RB;
649 bits<5> MB;
650 bits<5> ME;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000651
Nate Begeman2d5aff72005-10-19 18:42:01 +0000652 let Pattern = pattern;
653
Chris Lattner14522e32005-04-19 05:21:30 +0000654 bit RC = 0; // set by isDOT
655
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000656 let Inst{6-10} = RS;
657 let Inst{11-15} = RA;
658 let Inst{16-20} = RB;
659 let Inst{21-25} = MB;
660 let Inst{26-30} = ME;
Chris Lattner14522e32005-04-19 05:21:30 +0000661 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000662}
663
Evan Cheng64d80e32007-07-19 01:14:50 +0000664class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000665 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000666 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000667}
668
Nate Begeman244e64e2004-08-13 02:19:26 +0000669// 1.7.14 MD-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000670class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000671 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000672 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000673 bits<5> RA;
Chris Lattnera606b702006-07-13 21:52:41 +0000674 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000675 bits<6> SH;
676 bits<6> MBE;
Nate Begeman244e64e2004-08-13 02:19:26 +0000677
Nate Begeman2d5aff72005-10-19 18:42:01 +0000678 let Pattern = pattern;
679
Chris Lattner14522e32005-04-19 05:21:30 +0000680 bit RC = 0; // set by isDOT
681
Nate Begeman244e64e2004-08-13 02:19:26 +0000682 let Inst{6-10} = RS;
683 let Inst{11-15} = RA;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000684 let Inst{16-20} = SH{4,3,2,1,0};
685 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman244e64e2004-08-13 02:19:26 +0000686 let Inst{27-29} = xo;
Chris Lattnerb2c06502006-07-12 22:08:13 +0000687 let Inst{30} = SH{5};
Chris Lattner14522e32005-04-19 05:21:30 +0000688 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000689}
690
Chris Lattnerd8242b42006-04-05 22:27:14 +0000691
692
Nate Begemane4f17a52005-11-23 05:29:52 +0000693// E-1 VA-Form
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000694
695// VAForm_1 - DACB ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000696class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000697 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000698 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000699 bits<5> VD;
700 bits<5> VA;
Nate Begemane4f17a52005-11-23 05:29:52 +0000701 bits<5> VC;
Chris Lattnereb8b09f2006-03-22 01:44:36 +0000702 bits<5> VB;
Nate Begeman01595c52005-11-26 22:39:34 +0000703
704 let Pattern = pattern;
Nate Begemane4f17a52005-11-23 05:29:52 +0000705
706 let Inst{6-10} = VD;
707 let Inst{11-15} = VA;
708 let Inst{16-20} = VB;
709 let Inst{21-25} = VC;
710 let Inst{26-31} = xo;
711}
712
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000713// VAForm_1a - DABC ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000714class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000715 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000716 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000717 bits<5> VD;
718 bits<5> VA;
719 bits<5> VB;
720 bits<5> VC;
721
722 let Pattern = pattern;
723
724 let Inst{6-10} = VD;
725 let Inst{11-15} = VA;
726 let Inst{16-20} = VB;
727 let Inst{21-25} = VC;
728 let Inst{26-31} = xo;
729}
730
Evan Cheng64d80e32007-07-19 01:14:50 +0000731class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere7d959c2006-03-26 00:41:48 +0000732 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000733 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnere7d959c2006-03-26 00:41:48 +0000734 bits<5> VD;
735 bits<5> VA;
736 bits<5> VB;
737 bits<4> SH;
738
739 let Pattern = pattern;
740
741 let Inst{6-10} = VD;
742 let Inst{11-15} = VA;
743 let Inst{16-20} = VB;
744 let Inst{21} = 0;
745 let Inst{22-25} = SH;
746 let Inst{26-31} = xo;
747}
748
Nate Begemane4f17a52005-11-23 05:29:52 +0000749// E-2 VX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000750class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000751 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000752 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000753 bits<5> VD;
754 bits<5> VA;
755 bits<5> VB;
756
Nate Begeman01595c52005-11-26 22:39:34 +0000757 let Pattern = pattern;
758
Nate Begemane4f17a52005-11-23 05:29:52 +0000759 let Inst{6-10} = VD;
760 let Inst{11-15} = VA;
761 let Inst{16-20} = VB;
762 let Inst{21-31} = xo;
763}
764
Evan Cheng64d80e32007-07-19 01:14:50 +0000765class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman3fb68772005-12-14 00:34:09 +0000766 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000767 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman3fb68772005-12-14 00:34:09 +0000768 let VA = VD;
769 let VB = VD;
770}
771
772
Evan Cheng64d80e32007-07-19 01:14:50 +0000773class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman9b14f662005-11-29 08:04:45 +0000774 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000775 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman9b14f662005-11-29 08:04:45 +0000776 bits<5> VD;
777 bits<5> VB;
778
779 let Pattern = pattern;
780
781 let Inst{6-10} = VD;
782 let Inst{11-15} = 0;
783 let Inst{16-20} = VB;
784 let Inst{21-31} = xo;
785}
786
Evan Cheng64d80e32007-07-19 01:14:50 +0000787class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000788 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000789 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000790 bits<5> VD;
791 bits<5> IMM;
792
793 let Pattern = pattern;
794
795 let Inst{6-10} = VD;
796 let Inst{11-15} = IMM;
797 let Inst{16-20} = 0;
798 let Inst{21-31} = xo;
799}
800
Chris Lattner4d9100d2006-04-05 00:03:57 +0000801/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000802class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000803 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000804 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000805 bits<5> VD;
806
807 let Pattern = pattern;
808
809 let Inst{6-10} = VD;
810 let Inst{11-15} = 0;
811 let Inst{16-20} = 0;
812 let Inst{21-31} = xo;
813}
814
815/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000816class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000817 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000818 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000819 bits<5> VB;
820
821 let Pattern = pattern;
822
823 let Inst{6-10} = 0;
824 let Inst{11-15} = 0;
825 let Inst{16-20} = VB;
826 let Inst{21-31} = xo;
827}
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000828
Nate Begemane4f17a52005-11-23 05:29:52 +0000829// E-4 VXR-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000830class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000831 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000832 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000833 bits<5> VD;
834 bits<5> VA;
835 bits<5> VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000836 bit RC = 0;
Nate Begemane4f17a52005-11-23 05:29:52 +0000837
Nate Begeman01595c52005-11-26 22:39:34 +0000838 let Pattern = pattern;
839
Nate Begemane4f17a52005-11-23 05:29:52 +0000840 let Inst{6-10} = VD;
841 let Inst{11-15} = VA;
842 let Inst{16-20} = VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000843 let Inst{21} = RC;
Nate Begemane4f17a52005-11-23 05:29:52 +0000844 let Inst{22-31} = xo;
845}
846
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000847//===----------------------------------------------------------------------===//
Evan Cheng64d80e32007-07-19 01:14:50 +0000848class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
849 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000850 let PPC64 = 0;
Chris Lattner3075a4e2005-10-25 20:58:43 +0000851 let Pattern = pattern;
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000852 let Inst{31-0} = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +0000853}