blob: 84a15b1ca94256e5817acbfe5800c8dac517e26a [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;
Chris Lattnerb7035d02010-11-15 08:22:03 +0000105 bits<21> Addr;
106
107 let Pattern = pattern;
108
109 let Inst{6-10} = A;
110 let Inst{11-15} = Addr{20-16}; // Base Reg
111 let Inst{16-31} = Addr{15-0}; // Displacement
112}
113
114class DForm_1a<bits<6> opcode, dag OOL, dag IOL, string asmstr,
115 InstrItinClass itin, list<dag> pattern>
116 : I<opcode, OOL, IOL, asmstr, itin> {
117 bits<5> A;
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000118 bits<16> C;
119 bits<5> B;
Nate Begeman09761222005-12-09 23:54:18 +0000120
121 let Pattern = pattern;
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000122
Misha Brukmanbd7780b2004-10-23 06:08:38 +0000123 let Inst{6-10} = A;
124 let Inst{11-15} = B;
125 let Inst{16-31} = C;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000126}
127
Chris Lattnerb7035d02010-11-15 08:22:03 +0000128
Evan Cheng64d80e32007-07-19 01:14:50 +0000129class DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
130 InstrItinClass itin, list<dag> pattern>
131 : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern>;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000132
Evan Cheng64d80e32007-07-19 01:14:50 +0000133class DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
134 InstrItinClass itin, list<dag> pattern>
135 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000136 bits<5> A;
137 bits<16> B;
Nate Begemaned428532004-09-04 05:00:00 +0000138
Chris Lattner3e63ead2005-09-08 17:33:10 +0000139 let Pattern = pattern;
140
Nate Begemaned428532004-09-04 05:00:00 +0000141 let Inst{6-10} = A;
142 let Inst{11-15} = 0;
143 let Inst{16-31} = B;
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000144}
145
Evan Cheng64d80e32007-07-19 01:14:50 +0000146class DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
147 InstrItinClass itin, list<dag> pattern>
148 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner2f5091a2004-11-24 02:15:41 +0000149 bits<5> B;
150 bits<5> A;
151 bits<16> C;
152
Chris Lattnerbfde0802005-09-08 17:40:49 +0000153 let Pattern = pattern;
154
Chris Lattner2f5091a2004-11-24 02:15:41 +0000155 let Inst{6-10} = A;
156 let Inst{11-15} = B;
157 let Inst{16-31} = C;
158}
Nate Begemaned428532004-09-04 05:00:00 +0000159
Evan Cheng64d80e32007-07-19 01:14:50 +0000160class DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
161 InstrItinClass itin, list<dag> pattern>
162 : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000163 let A = 0;
Chris Lattnerb7035d02010-11-15 08:22:03 +0000164 let Addr = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000165}
166
Evan Cheng64d80e32007-07-19 01:14:50 +0000167class DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
168 InstrItinClass itin>
169 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000170 bits<3> BF;
171 bits<1> L;
172 bits<5> RA;
173 bits<16> I;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000174
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000175 let Inst{6-8} = BF;
176 let Inst{9} = 0;
177 let Inst{10} = L;
178 let Inst{11-15} = RA;
179 let Inst{16-31} = I;
180}
181
Evan Cheng64d80e32007-07-19 01:14:50 +0000182class DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
183 InstrItinClass itin>
184 : DForm_5<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000185 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000186}
187
Evan Cheng64d80e32007-07-19 01:14:50 +0000188class DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
189 InstrItinClass itin>
190 : DForm_5<opcode, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000191
Evan Cheng64d80e32007-07-19 01:14:50 +0000192class DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
193 InstrItinClass itin>
194 : DForm_6<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner57226fb2005-04-19 04:59:28 +0000195 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000196}
197
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000198
Misha Brukman96b61102004-08-11 15:54:36 +0000199// 1.7.5 DS-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000200class DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000201 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000202 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000203 bits<5> RST;
Chris Lattner17e2c182010-11-15 08:02:41 +0000204 bits<19> DS_RA;
Misha Brukman96b61102004-08-11 15:54:36 +0000205
Nate Begeman09761222005-12-09 23:54:18 +0000206 let Pattern = pattern;
207
Misha Brukman96b61102004-08-11 15:54:36 +0000208 let Inst{6-10} = RST;
Chris Lattner17e2c182010-11-15 08:02:41 +0000209 let Inst{11-15} = DS_RA{18-14}; // Register #
210 let Inst{16-29} = DS_RA{13-0}; // Displacement.
Misha Brukman96b61102004-08-11 15:54:36 +0000211 let Inst{30-31} = xo;
212}
213
Chris Lattner17e2c182010-11-15 08:02:41 +0000214class DSForm_1a<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
215 InstrItinClass itin, list<dag> pattern>
216 : I<opcode, OOL, IOL, asmstr, itin> {
217 bits<5> RST;
218 bits<14> DS;
219 bits<5> RA;
220
221 let Pattern = pattern;
222
223 let Inst{6-10} = RST;
224 let Inst{11-15} = RA;
225 let Inst{16-29} = DS;
226 let Inst{30-31} = xo;
227}
228
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000229// 1.7.6 X-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000230class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000231 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000232 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000233 bits<5> RST;
234 bits<5> A;
235 bits<5> B;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000236
Nate Begeman09761222005-12-09 23:54:18 +0000237 let Pattern = pattern;
238
Chris Lattner883059f2005-04-19 05:15:18 +0000239 bit RC = 0; // set by isDOT
240
Misha Brukman96b61102004-08-11 15:54:36 +0000241 let Inst{6-10} = RST;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000242 let Inst{11-15} = A;
243 let Inst{16-20} = B;
244 let Inst{21-30} = xo;
Chris Lattner883059f2005-04-19 05:15:18 +0000245 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000246}
247
Chris Lattner69efbdd2004-11-24 03:52:02 +0000248// This is the same as XForm_base_r3xo, but the first two operands are swapped
249// when code is emitted.
250class XForm_base_r3xo_swapped
Evan Cheng64d80e32007-07-19 01:14:50 +0000251 <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000252 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000253 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner69efbdd2004-11-24 03:52:02 +0000254 bits<5> A;
255 bits<5> RST;
256 bits<5> B;
257
Chris Lattner883059f2005-04-19 05:15:18 +0000258 bit RC = 0; // set by isDOT
259
Chris Lattner69efbdd2004-11-24 03:52:02 +0000260 let Inst{6-10} = RST;
261 let Inst{11-15} = A;
262 let Inst{16-20} = B;
263 let Inst{21-30} = xo;
Chris Lattner883059f2005-04-19 05:15:18 +0000264 let Inst{31} = RC;
Chris Lattner69efbdd2004-11-24 03:52:02 +0000265}
266
Nate Begeman244e64e2004-08-13 02:19:26 +0000267
Evan Cheng64d80e32007-07-19 01:14:50 +0000268class XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000269 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000270 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000271
Evan Cheng64d80e32007-07-19 01:14:50 +0000272class XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000273 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000274 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattner6159fb22005-09-02 22:35:53 +0000275 let Pattern = pattern;
276}
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000277
Evan Cheng64d80e32007-07-19 01:14:50 +0000278class XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000279 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000280 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000281
Evan Cheng64d80e32007-07-19 01:14:50 +0000282class XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000283 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000284 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Jim Laskey53842142005-10-19 19:51:16 +0000285 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000286}
287
Evan Cheng64d80e32007-07-19 01:14:50 +0000288class XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000289 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000290 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000291 let B = 0;
Chris Lattner6159fb22005-09-02 22:35:53 +0000292 let Pattern = pattern;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000293}
294
Evan Cheng64d80e32007-07-19 01:14:50 +0000295class XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000296 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000297 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000298 bits<3> BF;
299 bits<1> L;
300 bits<5> RA;
301 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000302
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000303 let Inst{6-8} = BF;
304 let Inst{9} = 0;
305 let Inst{10} = L;
306 let Inst{11-15} = RA;
307 let Inst{16-20} = RB;
308 let Inst{21-30} = xo;
309 let Inst{31} = 0;
310}
311
Evan Cheng64d80e32007-07-19 01:14:50 +0000312class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000313 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000314 : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattnere19d0b12005-04-19 04:51:30 +0000315 let L = PPC64;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000316}
317
Evan Cheng64d80e32007-07-19 01:14:50 +0000318class XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000319 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000320 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000321 bits<3> BF;
322 bits<5> FRA;
323 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000324
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000325 let Inst{6-8} = BF;
326 let Inst{9-10} = 0;
327 let Inst{11-15} = FRA;
328 let Inst{16-20} = FRB;
329 let Inst{21-30} = xo;
330 let Inst{31} = 0;
331}
332
Nate Begeman1db3c922008-08-11 17:36:31 +0000333class XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
334 InstrItinClass itin, list<dag> pattern>
335 : I<opcode, OOL, IOL, asmstr, itin> {
336 let Pattern = pattern;
337 let Inst{6-10} = 31;
338 let Inst{11-15} = 0;
339 let Inst{16-20} = 0;
340 let Inst{21-30} = xo;
341 let Inst{31} = 0;
342}
343
Dale Johannesenf87d6c02008-08-22 17:20:54 +0000344class XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
345 string asmstr, InstrItinClass itin, list<dag> pattern>
346 : I<opcode, OOL, IOL, asmstr, itin> {
347 let Pattern = pattern;
348 let Inst{6-10} = 0;
349 let Inst{11-15} = 0;
350 let Inst{16-20} = 0;
351 let Inst{21-30} = xo;
352 let Inst{31} = 0;
353}
354
Evan Cheng64d80e32007-07-19 01:14:50 +0000355class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000356 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000357 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000358}
359
Evan Cheng64d80e32007-07-19 01:14:50 +0000360class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000361 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000362 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000363 let A = 0;
364}
365
Evan Cheng64d80e32007-07-19 01:14:50 +0000366class XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman09761222005-12-09 23:54:18 +0000367 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000368 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000369}
370
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000371// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
372// numbers presumably relates to some document, but I haven't found it.
373class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
374 InstrItinClass itin, list<dag> pattern>
375 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
376 let Pattern = pattern;
377
378 bit RC = 0; // set by isDOT
379
380 let Inst{6-10} = RST;
381 let Inst{11-20} = 0;
382 let Inst{21-30} = xo;
383 let Inst{31} = RC;
384}
385class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
386 InstrItinClass itin, list<dag> pattern>
387 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
388 let Pattern = pattern;
389 bits<5> FM;
390
391 bit RC = 0; // set by isDOT
392
393 let Inst{6-10} = FM;
394 let Inst{11-20} = 0;
395 let Inst{21-30} = xo;
396 let Inst{31} = RC;
397}
398
Chris Lattner001db452006-06-06 21:29:23 +0000399// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000400class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattner001db452006-06-06 21:29:23 +0000401 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000402 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattner001db452006-06-06 21:29:23 +0000403 bits<5> A;
404 bits<5> B;
405
406 let Pattern = pattern;
407
408 let Inst{6-10} = immfield;
409 let Inst{11-15} = A;
410 let Inst{16-20} = B;
411 let Inst{21-30} = xo;
412 let Inst{31} = 0;
413}
414
415
Chris Lattnerd8242b42006-04-05 22:27:14 +0000416// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng64d80e32007-07-19 01:14:50 +0000417class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerd8242b42006-04-05 22:27:14 +0000418 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000419 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerd8242b42006-04-05 22:27:14 +0000420 bits<1> T;
421 bits<2> STRM;
422 bits<5> A;
423 bits<5> B;
424
425 let Pattern = pattern;
426
427 let Inst{6} = T;
428 let Inst{7-8} = 0;
429 let Inst{9-10} = STRM;
430 let Inst{11-15} = A;
431 let Inst{16-20} = B;
432 let Inst{21-30} = xo;
433 let Inst{31} = 0;
434}
435
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000436// 1.7.7 XL-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000437class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000438 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000439 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000440 bits<5> CRD;
441 bits<5> CRA;
442 bits<5> CRB;
Nate Begemanef7288c2005-04-14 03:20:38 +0000443
Chris Lattnereb95d412007-02-25 05:07:49 +0000444 let Pattern = pattern;
445
446 let Inst{6-10} = CRD;
447 let Inst{11-15} = CRA;
448 let Inst{16-20} = CRB;
449 let Inst{21-30} = xo;
450 let Inst{31} = 0;
451}
452
Evan Cheng64d80e32007-07-19 01:14:50 +0000453class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereb95d412007-02-25 05:07:49 +0000454 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000455 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnereb95d412007-02-25 05:07:49 +0000456 bits<5> CRD;
457
458 let Pattern = pattern;
459
460 let Inst{6-10} = CRD;
461 let Inst{11-15} = CRD;
462 let Inst{16-20} = CRD;
Nate Begemanef7288c2005-04-14 03:20:38 +0000463 let Inst{21-30} = xo;
464 let Inst{31} = 0;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000465}
466
Evan Cheng64d80e32007-07-19 01:14:50 +0000467class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000468 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000469 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000470 bits<5> BO;
471 bits<5> BI;
472 bits<2> BH;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000473
Nate Begeman9e4dd9d2005-12-20 00:26:01 +0000474 let Pattern = pattern;
475
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000476 let Inst{6-10} = BO;
477 let Inst{11-15} = BI;
478 let Inst{16-18} = 0;
479 let Inst{19-20} = BH;
480 let Inst{21-30} = xo;
481 let Inst{31} = lk;
482}
483
Chris Lattner6fc40072006-11-04 05:42:48 +0000484class XLForm_2_br<bits<6> opcode, bits<10> xo, 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> {
Chris Lattner6fc40072006-11-04 05:42:48 +0000487 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
488 bits<3> CR;
489
Chris Lattner09213652006-11-07 01:51:50 +0000490 let BO = BIBO{2-6};
491 let BI{0-1} = BIBO{0-1};
Chris Lattner6fc40072006-11-04 05:42:48 +0000492 let BI{2-4} = CR;
493 let BH = 0;
494}
495
496
Jim Laskey53842142005-10-19 19:51:16 +0000497class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng64d80e32007-07-19 01:14:50 +0000498 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
499 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000500 let BO = bo;
501 let BI = bi;
502 let BH = 0;
503}
504
Evan Cheng64d80e32007-07-19 01:14:50 +0000505class XLForm_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<3> BF;
509 bits<3> BFA;
510
511 let Inst{6-8} = BF;
512 let Inst{9-10} = 0;
513 let Inst{11-13} = BFA;
514 let Inst{14-15} = 0;
515 let Inst{16-20} = 0;
516 let Inst{21-30} = xo;
517 let Inst{31} = 0;
518}
519
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000520// 1.7.8 XFX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000521class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000522 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000523 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000524 bits<5> RT;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000525 bits<10> SPR;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000526
Nate Begeman7af02482005-04-12 07:04:16 +0000527 let Inst{6-10} = RT;
Nate Begeman7ac8e6b2005-11-29 22:42:50 +0000528 let Inst{11} = SPR{4};
529 let Inst{12} = SPR{3};
530 let Inst{13} = SPR{2};
531 let Inst{14} = SPR{1};
532 let Inst{15} = SPR{0};
533 let Inst{16} = SPR{9};
534 let Inst{17} = SPR{8};
535 let Inst{18} = SPR{7};
536 let Inst{19} = SPR{6};
537 let Inst{20} = SPR{5};
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000538 let Inst{21-30} = xo;
539 let Inst{31} = 0;
540}
541
Chris Lattner5035cef2005-04-19 04:40:07 +0000542class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000543 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
544 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000545 let SPR = spr;
546}
547
Evan Cheng64d80e32007-07-19 01:14:50 +0000548class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000549 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000550 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000551 bits<5> RT;
552
553 let Inst{6-10} = RT;
554 let Inst{11-20} = 0;
555 let Inst{21-30} = xo;
556 let Inst{31} = 0;
557}
558
Evan Cheng64d80e32007-07-19 01:14:50 +0000559class XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000560 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000561 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman7af02482005-04-12 07:04:16 +0000562 bits<8> FXM;
563 bits<5> ST;
564
565 let Inst{6-10} = ST;
Nate Begeman394cd132005-08-08 20:04:52 +0000566 let Inst{11} = 0;
Nate Begeman7af02482005-04-12 07:04:16 +0000567 let Inst{12-19} = FXM;
568 let Inst{20} = 0;
569 let Inst{21-30} = xo;
570 let Inst{31} = 0;
571}
572
Evan Cheng64d80e32007-07-19 01:14:50 +0000573class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000574 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000575 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman394cd132005-08-08 20:04:52 +0000576 bits<5> ST;
577 bits<8> FXM;
578
579 let Inst{6-10} = ST;
580 let Inst{11} = 1;
581 let Inst{12-19} = FXM;
582 let Inst{20} = 0;
583 let Inst{21-30} = xo;
584 let Inst{31} = 0;
585}
586
Evan Cheng64d80e32007-07-19 01:14:50 +0000587class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000588 InstrItinClass itin>
Evan Cheng64d80e32007-07-19 01:14:50 +0000589 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000590
Nate Begeman07aada82004-08-30 02:28:06 +0000591class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng64d80e32007-07-19 01:14:50 +0000592 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
593 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000594 let SPR = spr;
595}
596
Dale Johannesen6eaeff22007-10-10 01:01:31 +0000597// XFL-Form - MTFSF
598// This is probably 1.7.9, but I don't have the reference that uses this
599// numbering scheme...
600class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
601 string cstr, InstrItinClass itin, list<dag>pattern>
602 : I<opcode, OOL, IOL, asmstr, itin> {
603 bits<8> FM;
604 bits<5> RT;
605
606 bit RC = 0; // set by isDOT
607 let Pattern = pattern;
608 let Constraints = cstr;
609
610 let Inst{6} = 0;
611 let Inst{7-14} = FM;
612 let Inst{15} = 0;
613 let Inst{16-20} = RT;
614 let Inst{21-30} = xo;
615 let Inst{31} = RC;
616}
617
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000618// 1.7.10 XS-Form - SRADI.
Evan Cheng64d80e32007-07-19 01:14:50 +0000619class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere4172be2006-06-27 20:07:26 +0000620 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000621 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000622 bits<5> A;
Chris Lattnerc5d24592006-12-06 21:35:10 +0000623 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000624 bits<6> SH;
Nate Begeman244e64e2004-08-13 02:19:26 +0000625
Chris Lattner883059f2005-04-19 05:15:18 +0000626 bit RC = 0; // set by isDOT
Chris Lattnere4172be2006-06-27 20:07:26 +0000627 let Pattern = pattern;
Chris Lattner883059f2005-04-19 05:15:18 +0000628
Nate Begeman244e64e2004-08-13 02:19:26 +0000629 let Inst{6-10} = RS;
630 let Inst{11-15} = A;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000631 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman244e64e2004-08-13 02:19:26 +0000632 let Inst{21-29} = xo;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000633 let Inst{30} = SH{5};
Chris Lattner883059f2005-04-19 05:15:18 +0000634 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000635}
636
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000637// 1.7.11 XO-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000638class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000639 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000640 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000641 bits<5> RT;
642 bits<5> RA;
643 bits<5> RB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000644
Chris Lattner218a15d2005-09-02 21:18:00 +0000645 let Pattern = pattern;
646
Chris Lattner14522e32005-04-19 05:21:30 +0000647 bit RC = 0; // set by isDOT
648
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000649 let Inst{6-10} = RT;
650 let Inst{11-15} = RA;
651 let Inst{16-20} = RB;
652 let Inst{21} = oe;
653 let Inst{22-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000654 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000655}
656
Chris Lattner14522e32005-04-19 05:21:30 +0000657class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng64d80e32007-07-19 01:14:50 +0000658 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
659 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000660 let RB = 0;
661}
662
663// 1.7.12 A-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000664class AForm_1<bits<6> opcode, bits<5> xo, 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 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000667 bits<5> FRT;
668 bits<5> FRA;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000669 bits<5> FRC;
Chris Lattner5cbf3bc2004-11-25 04:11:07 +0000670 bits<5> FRB;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000671
Chris Lattner67ab1182005-09-29 23:34:24 +0000672 let Pattern = pattern;
673
Chris Lattner14522e32005-04-19 05:21:30 +0000674 bit RC = 0; // set by isDOT
675
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000676 let Inst{6-10} = FRT;
677 let Inst{11-15} = FRA;
678 let Inst{16-20} = FRB;
679 let Inst{21-25} = FRC;
680 let Inst{26-30} = xo;
Chris Lattner14522e32005-04-19 05:21:30 +0000681 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000682}
683
Evan Cheng64d80e32007-07-19 01:14:50 +0000684class AForm_2<bits<6> opcode, bits<5> xo, 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 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000687 let FRC = 0;
688}
689
Evan Cheng64d80e32007-07-19 01:14:50 +0000690class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000691 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000692 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000693 let FRB = 0;
694}
695
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000696// 1.7.13 M-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000697class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000698 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000699 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000700 bits<5> RA;
Chris Lattner89d60de2004-11-23 19:23:32 +0000701 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000702 bits<5> RB;
703 bits<5> MB;
704 bits<5> ME;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000705
Nate Begeman2d5aff72005-10-19 18:42:01 +0000706 let Pattern = pattern;
707
Chris Lattner14522e32005-04-19 05:21:30 +0000708 bit RC = 0; // set by isDOT
709
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000710 let Inst{6-10} = RS;
711 let Inst{11-15} = RA;
712 let Inst{16-20} = RB;
713 let Inst{21-25} = MB;
714 let Inst{26-30} = ME;
Chris Lattner14522e32005-04-19 05:21:30 +0000715 let Inst{31} = RC;
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000716}
717
Evan Cheng64d80e32007-07-19 01:14:50 +0000718class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000719 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000720 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman4ad7d1b2004-08-09 17:24:04 +0000721}
722
Nate Begeman244e64e2004-08-13 02:19:26 +0000723// 1.7.14 MD-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000724class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey53842142005-10-19 19:51:16 +0000725 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000726 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukmana671f3b2004-10-14 05:55:37 +0000727 bits<5> RA;
Chris Lattnera606b702006-07-13 21:52:41 +0000728 bits<5> RS;
Misha Brukmana671f3b2004-10-14 05:55:37 +0000729 bits<6> SH;
730 bits<6> MBE;
Nate Begeman244e64e2004-08-13 02:19:26 +0000731
Nate Begeman2d5aff72005-10-19 18:42:01 +0000732 let Pattern = pattern;
733
Chris Lattner14522e32005-04-19 05:21:30 +0000734 bit RC = 0; // set by isDOT
735
Nate Begeman244e64e2004-08-13 02:19:26 +0000736 let Inst{6-10} = RS;
737 let Inst{11-15} = RA;
Chris Lattnerc5e241b2006-12-06 20:02:54 +0000738 let Inst{16-20} = SH{4,3,2,1,0};
739 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman244e64e2004-08-13 02:19:26 +0000740 let Inst{27-29} = xo;
Chris Lattnerb2c06502006-07-12 22:08:13 +0000741 let Inst{30} = SH{5};
Chris Lattner14522e32005-04-19 05:21:30 +0000742 let Inst{31} = RC;
Nate Begeman244e64e2004-08-13 02:19:26 +0000743}
744
Chris Lattnerd8242b42006-04-05 22:27:14 +0000745
746
Nate Begemane4f17a52005-11-23 05:29:52 +0000747// E-1 VA-Form
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000748
749// VAForm_1 - DACB ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000750class VAForm_1<bits<6> 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;
Nate Begemane4f17a52005-11-23 05:29:52 +0000755 bits<5> VC;
Chris Lattnereb8b09f2006-03-22 01:44:36 +0000756 bits<5> VB;
Nate Begeman01595c52005-11-26 22:39:34 +0000757
758 let Pattern = pattern;
Nate Begemane4f17a52005-11-23 05:29:52 +0000759
760 let Inst{6-10} = VD;
761 let Inst{11-15} = VA;
762 let Inst{16-20} = VB;
763 let Inst{21-25} = VC;
764 let Inst{26-31} = xo;
765}
766
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000767// VAForm_1a - DABC ordering.
Evan Cheng64d80e32007-07-19 01:14:50 +0000768class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000769 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000770 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerfb143ce2006-03-27 03:34:17 +0000771 bits<5> VD;
772 bits<5> VA;
773 bits<5> VB;
774 bits<5> VC;
775
776 let Pattern = pattern;
777
778 let Inst{6-10} = VD;
779 let Inst{11-15} = VA;
780 let Inst{16-20} = VB;
781 let Inst{21-25} = VC;
782 let Inst{26-31} = xo;
783}
784
Evan Cheng64d80e32007-07-19 01:14:50 +0000785class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnere7d959c2006-03-26 00:41:48 +0000786 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000787 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnere7d959c2006-03-26 00:41:48 +0000788 bits<5> VD;
789 bits<5> VA;
790 bits<5> VB;
791 bits<4> SH;
792
793 let Pattern = pattern;
794
795 let Inst{6-10} = VD;
796 let Inst{11-15} = VA;
797 let Inst{16-20} = VB;
798 let Inst{21} = 0;
799 let Inst{22-25} = SH;
800 let Inst{26-31} = xo;
801}
802
Nate Begemane4f17a52005-11-23 05:29:52 +0000803// E-2 VX-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000804class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000805 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000806 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000807 bits<5> VD;
808 bits<5> VA;
809 bits<5> VB;
810
Nate Begeman01595c52005-11-26 22:39:34 +0000811 let Pattern = pattern;
812
Nate Begemane4f17a52005-11-23 05:29:52 +0000813 let Inst{6-10} = VD;
814 let Inst{11-15} = VA;
815 let Inst{16-20} = VB;
816 let Inst{21-31} = xo;
817}
818
Evan Cheng64d80e32007-07-19 01:14:50 +0000819class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman3fb68772005-12-14 00:34:09 +0000820 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000821 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman3fb68772005-12-14 00:34:09 +0000822 let VA = VD;
823 let VB = VD;
824}
825
826
Evan Cheng64d80e32007-07-19 01:14:50 +0000827class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman9b14f662005-11-29 08:04:45 +0000828 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000829 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman9b14f662005-11-29 08:04:45 +0000830 bits<5> VD;
831 bits<5> VB;
832
833 let Pattern = pattern;
834
835 let Inst{6-10} = VD;
836 let Inst{11-15} = 0;
837 let Inst{16-20} = VB;
838 let Inst{21-31} = xo;
839}
840
Evan Cheng64d80e32007-07-19 01:14:50 +0000841class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000842 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000843 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000844 bits<5> VD;
845 bits<5> IMM;
846
847 let Pattern = pattern;
848
849 let Inst{6-10} = VD;
850 let Inst{11-15} = IMM;
851 let Inst{16-20} = 0;
852 let Inst{21-31} = xo;
853}
854
Chris Lattner4d9100d2006-04-05 00:03:57 +0000855/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000856class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000857 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000858 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000859 bits<5> VD;
860
861 let Pattern = pattern;
862
863 let Inst{6-10} = VD;
864 let Inst{11-15} = 0;
865 let Inst{16-20} = 0;
866 let Inst{21-31} = xo;
867}
868
869/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng64d80e32007-07-19 01:14:50 +0000870class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner4d9100d2006-04-05 00:03:57 +0000871 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000872 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner4d9100d2006-04-05 00:03:57 +0000873 bits<5> VB;
874
875 let Pattern = pattern;
876
877 let Inst{6-10} = 0;
878 let Inst{11-15} = 0;
879 let Inst{16-20} = VB;
880 let Inst{21-31} = xo;
881}
Chris Lattnereeaf72a2006-03-27 03:28:57 +0000882
Nate Begemane4f17a52005-11-23 05:29:52 +0000883// E-4 VXR-Form
Evan Cheng64d80e32007-07-19 01:14:50 +0000884class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemane4f17a52005-11-23 05:29:52 +0000885 InstrItinClass itin, list<dag> pattern>
Evan Cheng64d80e32007-07-19 01:14:50 +0000886 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemane4f17a52005-11-23 05:29:52 +0000887 bits<5> VD;
888 bits<5> VA;
889 bits<5> VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000890 bit RC = 0;
Nate Begemane4f17a52005-11-23 05:29:52 +0000891
Nate Begeman01595c52005-11-26 22:39:34 +0000892 let Pattern = pattern;
893
Nate Begemane4f17a52005-11-23 05:29:52 +0000894 let Inst{6-10} = VD;
895 let Inst{11-15} = VA;
896 let Inst{16-20} = VB;
Chris Lattnerb8a45c22006-03-26 04:57:17 +0000897 let Inst{21} = RC;
Nate Begemane4f17a52005-11-23 05:29:52 +0000898 let Inst{22-31} = xo;
899}
900
Misha Brukmanc681a4e2004-08-02 21:56:35 +0000901//===----------------------------------------------------------------------===//
Evan Cheng64d80e32007-07-19 01:14:50 +0000902class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
903 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000904 let PPC64 = 0;
Chris Lattner3075a4e2005-10-25 20:58:43 +0000905 let Pattern = pattern;
Nate Begemanb7a8f2c2004-09-02 08:13:00 +0000906 let Inst{31-0} = 0;
Misha Brukman28791dd2004-08-02 16:54:54 +0000907}