blob: 3949bd3d21c39f67c63068c762e818bc15ed5bbd [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;
Jakob Stoklund Olesenfddb7662010-04-05 03:10:20 +000026
Chris Lattner88d211f2006-03-12 09:13:49 +000027 bits<1> PPC970_First = 0;
28 bits<1> PPC970_Single = 0;
Chris Lattnerfd977342006-03-13 05:15:10 +000029 bits<1> PPC970_Cracked = 0;
Chris Lattner88d211f2006-03-12 09:13:49 +000030 bits<3> PPC970_Unit = 0;
Jakob Stoklund Olesenfddb7662010-04-05 03:10:20 +000031
32 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to
33 /// these must be reflected there! See comments there for what these are.
34 let TSFlags{0} = PPC970_First;
35 let TSFlags{1} = PPC970_Single;
36 let TSFlags{2} = PPC970_Cracked;
37 let TSFlags{5-3} = PPC970_Unit;
Misha Brukman28791dd2004-08-02 16:54:54 +000038}
39
Chris Lattnerfd977342006-03-13 05:15:10 +000040class PPC970_DGroup_First { bits<1> PPC970_First = 1; }
41class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; }
42class PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; }
Chris Lattner88d211f2006-03-12 09:13:49 +000043class PPC970_MicroCode;
44
45class PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; }
46class PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; }
47class PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; }
48class PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; }
49class PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; }
50class PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; }
51class PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; }
52class PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; }
53
54
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000055// 1.7.1 I-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000056class IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr,
Chris Lattner1e484782005-12-04 18:42:54 +000057 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +000058 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner1e484782005-12-04 18:42:54 +000059 let Pattern = pattern;
Misha Brukmana671f3b2004-10-14 05:55:37 +000060 bits<24> LI;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000061
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000062 let Inst{6-29} = LI;
63 let Inst{30} = aa;
64 let Inst{31} = lk;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000065}
66
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000067// 1.7.2 B-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000068class BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr>
69 : I<opcode, OOL, IOL, asmstr, BrB> {
Chris Lattnerd5275152006-11-17 23:53:28 +000070 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
71 bits<3> CR;
72 bits<14> BD;
73
74 bits<5> BI;
75 let BI{0-1} = BIBO{5-6};
76 let BI{2-4} = CR{0-2};
77
78 let Inst{6-10} = BIBO{4-0};
79 let Inst{11-15} = BI;
80 let Inst{16-29} = BD;
81 let Inst{30} = aa;
82 let Inst{31} = lk;
83}
84
85
Misha Brukman4ad7d1b2004-08-09 17:24:04 +000086// 1.7.4 D-Form
Evan Cheng64d80e32007-07-19 01:14:50 +000087class DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr,
88 InstrItinClass itin, list<dag> pattern>
89 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +000090 bits<5> A;
91 bits<5> B;
92 bits<16> C;
Nate Begeman09761222005-12-09 23:54:18 +000093
94 let Pattern = pattern;
Misha Brukmanc681a4e2004-08-02 21:56:35 +000095
Misha Brukmanc681a4e2004-08-02 21:56:35 +000096 let Inst{6-10} = A;
97 let Inst{11-15} = B;
98 let Inst{16-31} = C;
99}
100
Evan Cheng64d80e32007-07-19 01:14:50 +0000101class DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
102 InstrItinClass itin, list<dag> pattern>
103 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000104 bits<5> A;
105 bits<16> C;
106 bits<5> B;
Nate Begeman09761222005-12-09 23:54:18 +0000107
108 let Pattern = pattern;
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000109
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000110 let Inst{6-10} = A;
111 let Inst{11-15} = B;
112 let Inst{16-31} = C;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000113}
114
Evan Cheng64d80e32007-07-19 01:14:50 +0000115class DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
116 InstrItinClass itin, list<dag> pattern>
117 : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern>;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000118
Evan Cheng64d80e32007-07-19 01:14:50 +0000119class DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
120 InstrItinClass itin, list<dag> pattern>
121 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000122 bits<5> A;
123 bits<16> B;
Nate Begemaned428532004-09-04 05:00:00 +0000124
Chris Lattner3e63ead2005-09-08 17:33:10 +0000125 let Pattern = pattern;
126
Nate Begemaned428532004-09-04 05:00:00 +0000127 let Inst{6-10} = A;
128 let Inst{11-15} = 0;
129 let Inst{16-31} = B;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000130}
131
Evan Cheng64d80e32007-07-19 01:14:50 +0000132class DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
133 InstrItinClass itin, list<dag> pattern>
134 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner2f5091a2004-11-24 02:15:41 +0000135 bits<5> B;
136 bits<5> A;
137 bits<16> C;
138
Chris Lattnerbfde0802005-09-08 17:40:49 +0000139 let Pattern = pattern;
140
Chris Lattner2f5091a2004-11-24 02:15:41 +0000141 let Inst{6-10} = A;
142 let Inst{11-15} = B;
143 let Inst{16-31} = C;
144}
Nate Begemaned428532004-09-04 05:00:00 +0000145
Evan Cheng64d80e32007-07-19 01:14:50 +0000146class DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
147 InstrItinClass itin, list<dag> pattern>
148 : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000149 let A = 0;
150 let B = 0;
151 let C = 0;
152}
153
Evan Cheng64d80e32007-07-19 01:14:50 +0000154class DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
155 InstrItinClass itin>
156 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000157 bits<3> BF;
158 bits<1> L;
159 bits<5> RA;
160 bits<16> I;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000161
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000162 let Inst{6-8} = BF;
163 let Inst{9} = 0;
164 let Inst{10} = L;
165 let Inst{11-15} = RA;
166 let Inst{16-31} = I;
167}
168
Evan Cheng64d80e32007-07-19 01:14:50 +0000169class DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
170 InstrItinClass itin>
171 : DForm_5<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000172 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000173}
174
Evan Cheng64d80e32007-07-19 01:14:50 +0000175class DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
176 InstrItinClass itin>
177 : DForm_5<opcode, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000178
Evan Cheng64d80e32007-07-19 01:14:50 +0000179class DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
180 InstrItinClass itin>
181 : DForm_6<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000182 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000183}
184
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000185
Misha Brukman96b61102004-08-11 15:54:36 +0000186// 1.7.5 DS-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000187class DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000188 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000189 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000190 bits<5> RST;
Chris Lattner17e2c182010-11-15 08:02:41 +0000191 bits<19> DS_RA;
Misha Brukman96b61102004-08-11 15:54:36 +0000192
Nate Begeman09761222005-12-09 23:54:18 +0000193 let Pattern = pattern;
194
Misha Brukman96b61102004-08-11 15:54:36 +0000195 let Inst{6-10} = RST;
Chris Lattner17e2c182010-11-15 08:02:41 +0000196 let Inst{11-15} = DS_RA{18-14}; // Register #
197 let Inst{16-29} = DS_RA{13-0}; // Displacement.
Misha Brukman96b61102004-08-11 15:54:36 +0000198 let Inst{30-31} = xo;
199}
200
Chris Lattner17e2c182010-11-15 08:02:41 +0000201class DSForm_1a<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
202 InstrItinClass itin, list<dag> pattern>
203 : I<opcode, OOL, IOL, asmstr, itin> {
204 bits<5> RST;
205 bits<14> DS;
206 bits<5> RA;
207
208 let Pattern = pattern;
209
210 let Inst{6-10} = RST;
211 let Inst{11-15} = RA;
212 let Inst{16-29} = DS;
213 let Inst{30-31} = xo;
214}
215
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000216// 1.7.6 X-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000217class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000218 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000219 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000220 bits<5> RST;
221 bits<5> A;
222 bits<5> B;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000223
Nate Begeman09761222005-12-09 23:54:18 +0000224 let Pattern = pattern;
225
Chris Lattner883059f2005-04-19 05:15:18 +0000226 bit RC = 0; // set by isDOT
227
Misha Brukman96b61102004-08-11 15:54:36 +0000228 let Inst{6-10} = RST;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000229 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;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000233}
234
Chris Lattner69efbdd2004-11-24 03:52:02 +0000235// This is the same as XForm_base_r3xo, but the first two operands are swapped
236// when code is emitted.
237class XForm_base_r3xo_swapped
Evan Cheng64d80e32007-07-19 01:14:50 +0000238 <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000239 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000240 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner69efbdd2004-11-24 03:52:02 +0000241 bits<5> A;
242 bits<5> RST;
243 bits<5> B;
244
Chris Lattner883059f2005-04-19 05:15:18 +0000245 bit RC = 0; // set by isDOT
246
Chris Lattner69efbdd2004-11-24 03:52:02 +0000247 let Inst{6-10} = RST;
248 let Inst{11-15} = A;
249 let Inst{16-20} = B;
250 let Inst{21-30} = xo;
Chris Lattner883059f2005-04-19 05:15:18 +0000251 let Inst{31} = RC;
Chris Lattner69efbdd2004-11-24 03:52:02 +0000252}
253
Nate Begeman244e64e2004-08-13 02:19:26 +0000254
Evan Cheng64d80e32007-07-19 01:14:50 +0000255class XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000256 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000257 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000258
Evan Cheng64d80e32007-07-19 01:14:50 +0000259class XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000260 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000261 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattner6159fb22005-09-02 22:35:53 +0000262 let Pattern = pattern;
263}
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000264
Evan Cheng64d80e32007-07-19 01:14:50 +0000265class XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000266 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000267 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000268
Evan Cheng64d80e32007-07-19 01:14:50 +0000269class XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000270 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000271 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Jim Laskey53842142005-10-19 19:51:16 +0000272 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000273}
274
Evan Cheng64d80e32007-07-19 01:14:50 +0000275class XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000276 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000277 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000278 let B = 0;
Chris Lattner6159fb22005-09-02 22:35:53 +0000279 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000280}
281
Evan Cheng64d80e32007-07-19 01:14:50 +0000282class XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000283 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000284 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000285 bits<3> BF;
286 bits<1> L;
287 bits<5> RA;
288 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000289
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000290 let Inst{6-8} = BF;
291 let Inst{9} = 0;
292 let Inst{10} = L;
293 let Inst{11-15} = RA;
294 let Inst{16-20} = RB;
295 let Inst{21-30} = xo;
296 let Inst{31} = 0;
297}
298
Evan Cheng64d80e32007-07-19 01:14:50 +0000299class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000300 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000301 : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattnere19d0b12005-04-19 04:51:30 +0000302 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000303}
304
Evan Cheng64d80e32007-07-19 01:14:50 +0000305class XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000306 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000307 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000308 bits<3> BF;
309 bits<5> FRA;
310 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000311
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000312 let Inst{6-8} = BF;
313 let Inst{9-10} = 0;
314 let Inst{11-15} = FRA;
315 let Inst{16-20} = FRB;
316 let Inst{21-30} = xo;
317 let Inst{31} = 0;
318}
319
Nate Begeman1db3c922008-08-11 17:36:31 +0000320class XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
321 InstrItinClass itin, list<dag> pattern>
322 : I<opcode, OOL, IOL, asmstr, itin> {
323 let Pattern = pattern;
324 let Inst{6-10} = 31;
325 let Inst{11-15} = 0;
326 let Inst{16-20} = 0;
327 let Inst{21-30} = xo;
328 let Inst{31} = 0;
329}
330
Dale Johannesenf87d6c02008-08-22 17:20:54 +0000331class XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
332 string asmstr, InstrItinClass itin, list<dag> pattern>
333 : I<opcode, OOL, IOL, asmstr, itin> {
334 let Pattern = pattern;
335 let Inst{6-10} = 0;
336 let Inst{11-15} = 0;
337 let Inst{16-20} = 0;
338 let Inst{21-30} = xo;
339 let Inst{31} = 0;
340}
341
Evan Cheng64d80e32007-07-19 01:14:50 +0000342class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000343 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000344 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000345}
346
Evan Cheng64d80e32007-07-19 01:14:50 +0000347class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000348 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000349 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000350 let A = 0;
351}
352
Evan Cheng64d80e32007-07-19 01:14:50 +0000353class XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000354 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000355 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000356}
357
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000358// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
359// numbers presumably relates to some document, but I haven't found it.
360class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
361 InstrItinClass itin, list<dag> pattern>
362 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
363 let Pattern = pattern;
364
365 bit RC = 0; // set by isDOT
366
367 let Inst{6-10} = RST;
368 let Inst{11-20} = 0;
369 let Inst{21-30} = xo;
370 let Inst{31} = RC;
371}
372class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
373 InstrItinClass itin, list<dag> pattern>
374 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
375 let Pattern = pattern;
376 bits<5> FM;
377
378 bit RC = 0; // set by isDOT
379
380 let Inst{6-10} = FM;
381 let Inst{11-20} = 0;
382 let Inst{21-30} = xo;
383 let Inst{31} = RC;
384}
385
Chris Lattner001db452006-06-06 21:29:23 +0000386// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000387class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattner001db452006-06-06 21:29:23 +0000388 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000389 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattner001db452006-06-06 21:29:23 +0000390 bits<5> A;
391 bits<5> B;
392
393 let Pattern = pattern;
394
395 let Inst{6-10} = immfield;
396 let Inst{11-15} = A;
397 let Inst{16-20} = B;
398 let Inst{21-30} = xo;
399 let Inst{31} = 0;
400}
401
402
Chris Lattnerd8242b42006-04-05 22:27:14 +0000403// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000404class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerd8242b42006-04-05 22:27:14 +0000405 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000406 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerd8242b42006-04-05 22:27:14 +0000407 bits<1> T;
408 bits<2> STRM;
409 bits<5> A;
410 bits<5> B;
411
412 let Pattern = pattern;
413
414 let Inst{6} = T;
415 let Inst{7-8} = 0;
416 let Inst{9-10} = STRM;
417 let Inst{11-15} = A;
418 let Inst{16-20} = B;
419 let Inst{21-30} = xo;
420 let Inst{31} = 0;
421}
422
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000423// 1.7.7 XL-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000424class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000425 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000426 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000427 bits<5> CRD;
428 bits<5> CRA;
429 bits<5> CRB;
Nate Begemanef7288c2005-04-14 03:20:38 +0000430
Chris Lattnereb95d412007-02-25 05:07:49 +0000431 let Pattern = pattern;
432
433 let Inst{6-10} = CRD;
434 let Inst{11-15} = CRA;
435 let Inst{16-20} = CRB;
436 let Inst{21-30} = xo;
437 let Inst{31} = 0;
438}
439
Evan Cheng64d80e32007-07-19 01:14:50 +0000440class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000441 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000442 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000443 bits<5> CRD;
444
445 let Pattern = pattern;
446
447 let Inst{6-10} = CRD;
448 let Inst{11-15} = CRD;
449 let Inst{16-20} = CRD;
Nate Begemanef7288c2005-04-14 03:20:38 +0000450 let Inst{21-30} = xo;
451 let Inst{31} = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000452}
453
Evan Cheng64d80e32007-07-19 01:14:50 +0000454class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000455 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000456 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000457 bits<5> BO;
458 bits<5> BI;
459 bits<2> BH;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000460
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000461 let Pattern = pattern;
462
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000463 let Inst{6-10} = BO;
464 let Inst{11-15} = BI;
465 let Inst{16-18} = 0;
466 let Inst{19-20} = BH;
467 let Inst{21-30} = xo;
468 let Inst{31} = lk;
469}
470
Chris Lattner6fc40072006-11-04 05:42:48 +0000471class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000472 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
473 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner6fc40072006-11-04 05:42:48 +0000474 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
475 bits<3> CR;
476
Chris Lattner09213652006-11-07 01:51:50 +0000477 let BO = BIBO{2-6};
478 let BI{0-1} = BIBO{0-1};
Chris Lattner6fc40072006-11-04 05:42:48 +0000479 let BI{2-4} = CR;
480 let BH = 0;
481}
482
483
Jim Laskey53842142005-10-19 19:51:16 +0000484class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000485 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
486 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000487 let BO = bo;
488 let BI = bi;
489 let BH = 0;
490}
491
Evan Cheng64d80e32007-07-19 01:14:50 +0000492class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000493 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000494 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000495 bits<3> BF;
496 bits<3> BFA;
497
498 let Inst{6-8} = BF;
499 let Inst{9-10} = 0;
500 let Inst{11-13} = BFA;
501 let Inst{14-15} = 0;
502 let Inst{16-20} = 0;
503 let Inst{21-30} = xo;
504 let Inst{31} = 0;
505}
506
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000507// 1.7.8 XFX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000508class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000509 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000510 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000511 bits<5> RT;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000512 bits<10> SPR;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000513
Nate Begeman7af02482005-04-12 07:04:16 +0000514 let Inst{6-10} = RT;
Nate Begeman7ac8e6b2005-11-29 22:42:50 +0000515 let Inst{11} = SPR{4};
516 let Inst{12} = SPR{3};
517 let Inst{13} = SPR{2};
518 let Inst{14} = SPR{1};
519 let Inst{15} = SPR{0};
520 let Inst{16} = SPR{9};
521 let Inst{17} = SPR{8};
522 let Inst{18} = SPR{7};
523 let Inst{19} = SPR{6};
524 let Inst{20} = SPR{5};
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000525 let Inst{21-30} = xo;
526 let Inst{31} = 0;
527}
528
Chris Lattner5035cef2005-04-19 04:40:07 +0000529class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000530 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
531 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000532 let SPR = spr;
533}
534
Evan Cheng64d80e32007-07-19 01:14:50 +0000535class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000536 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000537 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000538 bits<5> RT;
539
540 let Inst{6-10} = RT;
541 let Inst{11-20} = 0;
542 let Inst{21-30} = xo;
543 let Inst{31} = 0;
544}
545
Evan Cheng64d80e32007-07-19 01:14:50 +0000546class XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000547 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000548 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000549 bits<8> FXM;
550 bits<5> ST;
551
552 let Inst{6-10} = ST;
Nate Begeman394cd132005-08-08 20:04:52 +0000553 let Inst{11} = 0;
Nate Begeman7af02482005-04-12 07:04:16 +0000554 let Inst{12-19} = FXM;
555 let Inst{20} = 0;
556 let Inst{21-30} = xo;
557 let Inst{31} = 0;
558}
559
Evan Cheng64d80e32007-07-19 01:14:50 +0000560class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000561 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000562 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman394cd132005-08-08 20:04:52 +0000563 bits<5> ST;
564 bits<8> FXM;
565
566 let Inst{6-10} = ST;
567 let Inst{11} = 1;
568 let Inst{12-19} = FXM;
569 let Inst{20} = 0;
570 let Inst{21-30} = xo;
571 let Inst{31} = 0;
572}
573
Evan Cheng64d80e32007-07-19 01:14:50 +0000574class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000575 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000576 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000577
Nate Begeman07aada82004-08-30 02:28:06 +0000578class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000579 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
580 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000581 let SPR = spr;
582}
583
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000584// XFL-Form - MTFSF
585// This is probably 1.7.9, but I don't have the reference that uses this
586// numbering scheme...
587class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
588 string cstr, InstrItinClass itin, list<dag>pattern>
589 : I<opcode, OOL, IOL, asmstr, itin> {
590 bits<8> FM;
591 bits<5> RT;
592
593 bit RC = 0; // set by isDOT
594 let Pattern = pattern;
595 let Constraints = cstr;
596
597 let Inst{6} = 0;
598 let Inst{7-14} = FM;
599 let Inst{15} = 0;
600 let Inst{16-20} = RT;
601 let Inst{21-30} = xo;
602 let Inst{31} = RC;
603}
604
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000605// 1.7.10 XS-Form - SRADI.
Evan Cheng64d80e32007-07-19 01:14:50 +0000606class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere4172be2006-06-27 20:07:26 +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> A;
Chris Lattnerc5d24592006-12-06 21:35:10 +0000610 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000611 bits<6> SH;
Nate Begeman244e64e2004-08-13 02:19:26 +0000612
Chris Lattner883059f2005-04-19 05:15:18 +0000613 bit RC = 0; // set by isDOT
Chris Lattnere4172be2006-06-27 20:07:26 +0000614 let Pattern = pattern;
Chris Lattner883059f2005-04-19 05:15:18 +0000615
Nate Begeman244e64e2004-08-13 02:19:26 +0000616 let Inst{6-10} = RS;
617 let Inst{11-15} = A;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000618 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman244e64e2004-08-13 02:19:26 +0000619 let Inst{21-29} = xo;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000620 let Inst{30} = SH{5};
Chris Lattner883059f2005-04-19 05:15:18 +0000621 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000622}
623
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000624// 1.7.11 XO-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000625class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000626 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000627 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000628 bits<5> RT;
629 bits<5> RA;
630 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000631
Chris Lattner218a15d2005-09-02 21:18:00 +0000632 let Pattern = pattern;
633
Chris Lattner14522e32005-04-19 05:21:30 +0000634 bit RC = 0; // set by isDOT
635
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000636 let Inst{6-10} = RT;
637 let Inst{11-15} = RA;
638 let Inst{16-20} = RB;
639 let Inst{21} = oe;
640 let Inst{22-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000641 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000642}
643
Chris Lattner14522e32005-04-19 05:21:30 +0000644class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng64d80e32007-07-19 01:14:50 +0000645 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
646 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000647 let RB = 0;
648}
649
650// 1.7.12 A-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000651class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000652 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000653 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000654 bits<5> FRT;
655 bits<5> FRA;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000656 bits<5> FRC;
Chris Lattner5cbf3bc2004-11-25 04:11:07 +0000657 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000658
Chris Lattner67ab1182005-09-29 23:34:24 +0000659 let Pattern = pattern;
660
Chris Lattner14522e32005-04-19 05:21:30 +0000661 bit RC = 0; // set by isDOT
662
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000663 let Inst{6-10} = FRT;
664 let Inst{11-15} = FRA;
665 let Inst{16-20} = FRB;
666 let Inst{21-25} = FRC;
667 let Inst{26-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000668 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000669}
670
Evan Cheng64d80e32007-07-19 01:14:50 +0000671class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000672 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000673 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000674 let FRC = 0;
675}
676
Evan Cheng64d80e32007-07-19 01:14:50 +0000677class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000678 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000679 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000680 let FRB = 0;
681}
682
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000683// 1.7.13 M-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000684class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000685 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000686 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000687 bits<5> RA;
Chris Lattner89d60de2004-11-23 19:23:32 +0000688 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000689 bits<5> RB;
690 bits<5> MB;
691 bits<5> ME;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000692
Nate Begeman2d5aff72005-10-19 18:42:01 +0000693 let Pattern = pattern;
694
Chris Lattner14522e32005-04-19 05:21:30 +0000695 bit RC = 0; // set by isDOT
696
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000697 let Inst{6-10} = RS;
698 let Inst{11-15} = RA;
699 let Inst{16-20} = RB;
700 let Inst{21-25} = MB;
701 let Inst{26-30} = ME;
Chris Lattner14522e32005-04-19 05:21:30 +0000702 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000703}
704
Evan Cheng64d80e32007-07-19 01:14:50 +0000705class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000706 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000707 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000708}
709
Nate Begeman244e64e2004-08-13 02:19:26 +0000710// 1.7.14 MD-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000711class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000712 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000713 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000714 bits<5> RA;
Chris Lattnera606b702006-07-13 21:52:41 +0000715 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000716 bits<6> SH;
717 bits<6> MBE;
Nate Begeman244e64e2004-08-13 02:19:26 +0000718
Nate Begeman2d5aff72005-10-19 18:42:01 +0000719 let Pattern = pattern;
720
Chris Lattner14522e32005-04-19 05:21:30 +0000721 bit RC = 0; // set by isDOT
722
Nate Begeman244e64e2004-08-13 02:19:26 +0000723 let Inst{6-10} = RS;
724 let Inst{11-15} = RA;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000725 let Inst{16-20} = SH{4,3,2,1,0};
726 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman244e64e2004-08-13 02:19:26 +0000727 let Inst{27-29} = xo;
Chris Lattnerb2c06502006-07-12 22:08:13 +0000728 let Inst{30} = SH{5};
Chris Lattner14522e32005-04-19 05:21:30 +0000729 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000730}
731
Chris Lattnerd8242b42006-04-05 22:27:14 +0000732
733
Nate Begemane4f17a52005-11-23 05:29:52 +0000734// E-1 VA-Form
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000735
736// VAForm_1 - DACB ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000737class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000738 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000739 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000740 bits<5> VD;
741 bits<5> VA;
Nate Begemane4f17a52005-11-23 05:29:52 +0000742 bits<5> VC;
Chris Lattnereb8b09f2006-03-22 01:44:36 +0000743 bits<5> VB;
Nate Begeman01595c52005-11-26 22:39:34 +0000744
745 let Pattern = pattern;
Nate Begemane4f17a52005-11-23 05:29:52 +0000746
747 let Inst{6-10} = VD;
748 let Inst{11-15} = VA;
749 let Inst{16-20} = VB;
750 let Inst{21-25} = VC;
751 let Inst{26-31} = xo;
752}
753
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000754// VAForm_1a - DABC ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000755class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000756 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000757 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000758 bits<5> VD;
759 bits<5> VA;
760 bits<5> VB;
761 bits<5> VC;
762
763 let Pattern = pattern;
764
765 let Inst{6-10} = VD;
766 let Inst{11-15} = VA;
767 let Inst{16-20} = VB;
768 let Inst{21-25} = VC;
769 let Inst{26-31} = xo;
770}
771
Evan Cheng64d80e32007-07-19 01:14:50 +0000772class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere7d959c2006-03-26 00:41:48 +0000773 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000774 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnere7d959c2006-03-26 00:41:48 +0000775 bits<5> VD;
776 bits<5> VA;
777 bits<5> VB;
778 bits<4> SH;
779
780 let Pattern = pattern;
781
782 let Inst{6-10} = VD;
783 let Inst{11-15} = VA;
784 let Inst{16-20} = VB;
785 let Inst{21} = 0;
786 let Inst{22-25} = SH;
787 let Inst{26-31} = xo;
788}
789
Nate Begemane4f17a52005-11-23 05:29:52 +0000790// E-2 VX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000791class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000792 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000793 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000794 bits<5> VD;
795 bits<5> VA;
796 bits<5> VB;
797
Nate Begeman01595c52005-11-26 22:39:34 +0000798 let Pattern = pattern;
799
Nate Begemane4f17a52005-11-23 05:29:52 +0000800 let Inst{6-10} = VD;
801 let Inst{11-15} = VA;
802 let Inst{16-20} = VB;
803 let Inst{21-31} = xo;
804}
805
Evan Cheng64d80e32007-07-19 01:14:50 +0000806class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman3fb68772005-12-14 00:34:09 +0000807 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000808 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman3fb68772005-12-14 00:34:09 +0000809 let VA = VD;
810 let VB = VD;
811}
812
813
Evan Cheng64d80e32007-07-19 01:14:50 +0000814class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman9b14f662005-11-29 08:04:45 +0000815 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000816 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman9b14f662005-11-29 08:04:45 +0000817 bits<5> VD;
818 bits<5> VB;
819
820 let Pattern = pattern;
821
822 let Inst{6-10} = VD;
823 let Inst{11-15} = 0;
824 let Inst{16-20} = VB;
825 let Inst{21-31} = xo;
826}
827
Evan Cheng64d80e32007-07-19 01:14:50 +0000828class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000829 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000830 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000831 bits<5> VD;
832 bits<5> IMM;
833
834 let Pattern = pattern;
835
836 let Inst{6-10} = VD;
837 let Inst{11-15} = IMM;
838 let Inst{16-20} = 0;
839 let Inst{21-31} = xo;
840}
841
Chris Lattner4d9100d2006-04-05 00:03:57 +0000842/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000843class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000844 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000845 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000846 bits<5> VD;
847
848 let Pattern = pattern;
849
850 let Inst{6-10} = VD;
851 let Inst{11-15} = 0;
852 let Inst{16-20} = 0;
853 let Inst{21-31} = xo;
854}
855
856/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000857class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000858 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000859 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000860 bits<5> VB;
861
862 let Pattern = pattern;
863
864 let Inst{6-10} = 0;
865 let Inst{11-15} = 0;
866 let Inst{16-20} = VB;
867 let Inst{21-31} = xo;
868}
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000869
Nate Begemane4f17a52005-11-23 05:29:52 +0000870// E-4 VXR-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000871class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000872 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000873 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000874 bits<5> VD;
875 bits<5> VA;
876 bits<5> VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000877 bit RC = 0;
Nate Begemane4f17a52005-11-23 05:29:52 +0000878
Nate Begeman01595c52005-11-26 22:39:34 +0000879 let Pattern = pattern;
880
Nate Begemane4f17a52005-11-23 05:29:52 +0000881 let Inst{6-10} = VD;
882 let Inst{11-15} = VA;
883 let Inst{16-20} = VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000884 let Inst{21} = RC;
Nate Begemane4f17a52005-11-23 05:29:52 +0000885 let Inst{22-31} = xo;
886}
887
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000888//===----------------------------------------------------------------------===//
Evan Cheng64d80e32007-07-19 01:14:50 +0000889class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
890 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000891 let PPC64 = 0;
Chris Lattner3075a4e2005-10-25 20:58:43 +0000892 let Pattern = pattern;
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000893 let Inst{31-0} = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +0000894}