blob: d8e4b2bdf34a3b893d9ebfe7c6a6370a8695af2b [file] [log] [blame]
Misha Brukmancd4f51b2004-08-02 16:54:54 +00001//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
Jia Liub22310f2012-02-18 12:03:15 +00002//
Misha Brukmancd4f51b2004-08-02 16:54:54 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jia Liub22310f2012-02-18 12:03:15 +00007//
Misha Brukmancd4f51b2004-08-02 16:54:54 +00008//===----------------------------------------------------------------------===//
Misha Brukmancd4f51b2004-08-02 16:54:54 +00009
Misha Brukman6b21bde2004-08-02 21:56:35 +000010//===----------------------------------------------------------------------===//
11//
12// PowerPC instruction formats
Misha Brukmancd4f51b2004-08-02 16:54:54 +000013
Evan Cheng94b5a802007-07-19 01:14:50 +000014class I<bits<6> opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin>
Jim Laskey74ab9962005-10-19 19:51:16 +000015 : Instruction {
Misha Brukman6b21bde2004-08-02 21:56:35 +000016 field bits<32> Inst;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000017
Chris Lattner5b78da42005-04-19 05:05:22 +000018 bit PPC64 = 0; // Default value, override with isPPC64
Misha Brukmancd4f51b2004-08-02 16:54:54 +000019
Misha Brukmandad438b2004-08-10 22:47:03 +000020 let Namespace = "PPC";
Misha Brukman5295e1d2004-08-09 17:24:04 +000021 let Inst{0-5} = opcode;
Evan Cheng94b5a802007-07-19 01:14:50 +000022 let OutOperandList = OOL;
23 let InOperandList = IOL;
Nate Begeman4bfceb12004-09-04 05:00:00 +000024 let AsmString = asmstr;
Jim Laskey74ab9962005-10-19 19:51:16 +000025 let Itinerary = itin;
Jakob Stoklund Olesenb93331f2010-04-05 03:10:20 +000026
Chris Lattner51348c52006-03-12 09:13:49 +000027 bits<1> PPC970_First = 0;
28 bits<1> PPC970_Single = 0;
Chris Lattner7579cfb2006-03-13 05:15:10 +000029 bits<1> PPC970_Cracked = 0;
Chris Lattner51348c52006-03-12 09:13:49 +000030 bits<3> PPC970_Unit = 0;
Jakob Stoklund Olesenb93331f2010-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 Brukmancd4f51b2004-08-02 16:54:54 +000038}
39
Chris Lattner7579cfb2006-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 Lattner51348c52006-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
Hal Finkel51861b42012-03-31 14:45:15 +000054// Two joined instructions; used to emit two adjacent instructions as one.
55// The itinerary from the first instruction is used for scheduling and
56// classification.
57class I2<bits<6> opcode1, bits<6> opcode2, dag OOL, dag IOL, string asmstr,
58 InstrItinClass itin>
59 : Instruction {
60 field bits<64> Inst;
61
62 bit PPC64 = 0; // Default value, override with isPPC64
63
64 let Namespace = "PPC";
65 let Inst{0-5} = opcode1;
66 let Inst{32-37} = opcode2;
67 let OutOperandList = OOL;
68 let InOperandList = IOL;
69 let AsmString = asmstr;
70 let Itinerary = itin;
71
72 bits<1> PPC970_First = 0;
73 bits<1> PPC970_Single = 0;
74 bits<1> PPC970_Cracked = 0;
75 bits<3> PPC970_Unit = 0;
76
77 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to
78 /// these must be reflected there! See comments there for what these are.
79 let TSFlags{0} = PPC970_First;
80 let TSFlags{1} = PPC970_Single;
81 let TSFlags{2} = PPC970_Cracked;
82 let TSFlags{5-3} = PPC970_Unit;
83}
Chris Lattner51348c52006-03-12 09:13:49 +000084
Misha Brukman5295e1d2004-08-09 17:24:04 +000085// 1.7.1 I-Form
Evan Cheng94b5a802007-07-19 01:14:50 +000086class IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr,
Chris Lattnerd9d18af2005-12-04 18:42:54 +000087 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +000088 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerd9d18af2005-12-04 18:42:54 +000089 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000090 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000091
Misha Brukman5295e1d2004-08-09 17:24:04 +000092 let Inst{6-29} = LI;
93 let Inst{30} = aa;
94 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000095}
96
Misha Brukman5295e1d2004-08-09 17:24:04 +000097// 1.7.2 B-Form
Evan Cheng94b5a802007-07-19 01:14:50 +000098class BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr>
99 : I<opcode, OOL, IOL, asmstr, BrB> {
Chris Lattner33fc1d42006-11-17 23:53:28 +0000100 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
101 bits<3> CR;
102 bits<14> BD;
103
104 bits<5> BI;
105 let BI{0-1} = BIBO{5-6};
106 let BI{2-4} = CR{0-2};
107
108 let Inst{6-10} = BIBO{4-0};
109 let Inst{11-15} = BI;
110 let Inst{16-29} = BD;
111 let Inst{30} = aa;
112 let Inst{31} = lk;
113}
114
115
Misha Brukman5295e1d2004-08-09 17:24:04 +0000116// 1.7.4 D-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000117class DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr,
118 InstrItinClass itin, list<dag> pattern>
119 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000120 bits<5> A;
121 bits<5> B;
122 bits<16> C;
Nate Begemanade6f9a2005-12-09 23:54:18 +0000123
124 let Pattern = pattern;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000125
Misha Brukman6b21bde2004-08-02 21:56:35 +0000126 let Inst{6-10} = A;
127 let Inst{11-15} = B;
128 let Inst{16-31} = C;
129}
130
Evan Cheng94b5a802007-07-19 01:14:50 +0000131class DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
132 InstrItinClass itin, list<dag> pattern>
133 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +0000134 bits<5> A;
Chris Lattnerefacb9e2010-11-15 08:22:03 +0000135 bits<21> Addr;
136
137 let Pattern = pattern;
138
139 let Inst{6-10} = A;
140 let Inst{11-15} = Addr{20-16}; // Base Reg
141 let Inst{16-31} = Addr{15-0}; // Displacement
142}
143
144class DForm_1a<bits<6> opcode, dag OOL, dag IOL, string asmstr,
145 InstrItinClass itin, list<dag> pattern>
146 : I<opcode, OOL, IOL, asmstr, itin> {
147 bits<5> A;
Misha Brukman15b0fb52004-10-23 06:08:38 +0000148 bits<16> C;
149 bits<5> B;
Nate Begemanade6f9a2005-12-09 23:54:18 +0000150
151 let Pattern = pattern;
Misha Brukman15b0fb52004-10-23 06:08:38 +0000152
Misha Brukman15b0fb52004-10-23 06:08:38 +0000153 let Inst{6-10} = A;
154 let Inst{11-15} = B;
155 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000156}
157
Chris Lattnerefacb9e2010-11-15 08:22:03 +0000158
Evan Cheng94b5a802007-07-19 01:14:50 +0000159class DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
160 InstrItinClass itin, list<dag> pattern>
161 : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000162
Evan Cheng94b5a802007-07-19 01:14:50 +0000163class DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
164 InstrItinClass itin, list<dag> pattern>
165 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000166 bits<5> A;
167 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +0000168
Chris Lattner2d8032b2005-09-08 17:33:10 +0000169 let Pattern = pattern;
170
Nate Begeman4bfceb12004-09-04 05:00:00 +0000171 let Inst{6-10} = A;
172 let Inst{11-15} = 0;
173 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000174}
175
Evan Cheng94b5a802007-07-19 01:14:50 +0000176class DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
177 InstrItinClass itin, list<dag> pattern>
178 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000179 bits<5> B;
180 bits<5> A;
181 bits<16> C;
182
Chris Lattner76cb0062005-09-08 17:40:49 +0000183 let Pattern = pattern;
184
Chris Lattner022e2712004-11-24 02:15:41 +0000185 let Inst{6-10} = A;
186 let Inst{11-15} = B;
187 let Inst{16-31} = C;
188}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000189
Evan Cheng94b5a802007-07-19 01:14:50 +0000190class DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
191 InstrItinClass itin, list<dag> pattern>
192 : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000193 let A = 0;
Chris Lattnerefacb9e2010-11-15 08:22:03 +0000194 let Addr = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000195}
196
Hal Finkel51861b42012-03-31 14:45:15 +0000197class IForm_and_DForm_1<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2,
198 dag OOL, dag IOL, string asmstr,
199 InstrItinClass itin, list<dag> pattern>
200 : I2<opcode1, opcode2, OOL, IOL, asmstr, itin> {
201 bits<5> A;
202 bits<21> Addr;
203
204 let Pattern = pattern;
205 bits<24> LI;
206
207 let Inst{6-29} = LI;
208 let Inst{30} = aa;
209 let Inst{31} = lk;
210
211 let Inst{38-42} = A;
212 let Inst{43-47} = Addr{20-16}; // Base Reg
213 let Inst{48-63} = Addr{15-0}; // Displacement
214}
215
216// This is used to emit BL8+NOP.
217class IForm_and_DForm_4_zero<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2,
218 dag OOL, dag IOL, string asmstr,
219 InstrItinClass itin, list<dag> pattern>
220 : IForm_and_DForm_1<opcode1, aa, lk, opcode2,
221 OOL, IOL, asmstr, itin, pattern> {
222 let A = 0;
223 let Addr = 0;
224}
225
Evan Cheng94b5a802007-07-19 01:14:50 +0000226class DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
227 InstrItinClass itin>
228 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000229 bits<3> BF;
230 bits<1> L;
231 bits<5> RA;
232 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000233
Misha Brukman5295e1d2004-08-09 17:24:04 +0000234 let Inst{6-8} = BF;
235 let Inst{9} = 0;
236 let Inst{10} = L;
237 let Inst{11-15} = RA;
238 let Inst{16-31} = I;
239}
240
Evan Cheng94b5a802007-07-19 01:14:50 +0000241class DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
242 InstrItinClass itin>
243 : DForm_5<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000244 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000245}
246
Evan Cheng94b5a802007-07-19 01:14:50 +0000247class DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
248 InstrItinClass itin>
249 : DForm_5<opcode, OOL, IOL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000250
Evan Cheng94b5a802007-07-19 01:14:50 +0000251class DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
252 InstrItinClass itin>
253 : DForm_6<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000254 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000255}
256
Misha Brukman5295e1d2004-08-09 17:24:04 +0000257
Misha Brukman28beda92004-08-11 15:54:36 +0000258// 1.7.5 DS-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000259class DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000260 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000261 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000262 bits<5> RST;
Chris Lattner8f4444d2010-11-15 08:02:41 +0000263 bits<19> DS_RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000264
Nate Begemanade6f9a2005-12-09 23:54:18 +0000265 let Pattern = pattern;
266
Misha Brukman28beda92004-08-11 15:54:36 +0000267 let Inst{6-10} = RST;
Chris Lattner8f4444d2010-11-15 08:02:41 +0000268 let Inst{11-15} = DS_RA{18-14}; // Register #
269 let Inst{16-29} = DS_RA{13-0}; // Displacement.
Misha Brukman28beda92004-08-11 15:54:36 +0000270 let Inst{30-31} = xo;
271}
272
Chris Lattner8f4444d2010-11-15 08:02:41 +0000273class DSForm_1a<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
274 InstrItinClass itin, list<dag> pattern>
275 : I<opcode, OOL, IOL, asmstr, itin> {
276 bits<5> RST;
277 bits<14> DS;
278 bits<5> RA;
279
280 let Pattern = pattern;
281
282 let Inst{6-10} = RST;
283 let Inst{11-15} = RA;
284 let Inst{16-29} = DS;
285 let Inst{30-31} = xo;
286}
287
Misha Brukman5295e1d2004-08-09 17:24:04 +0000288// 1.7.6 X-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000289class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000290 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000291 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000292 bits<5> RST;
293 bits<5> A;
294 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000295
Nate Begemanade6f9a2005-12-09 23:54:18 +0000296 let Pattern = pattern;
297
Chris Lattnerf9172e12005-04-19 05:15:18 +0000298 bit RC = 0; // set by isDOT
299
Misha Brukman28beda92004-08-11 15:54:36 +0000300 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000301 let Inst{11-15} = A;
302 let Inst{16-20} = B;
303 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000304 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000305}
306
Chris Lattner130888ad2004-11-24 03:52:02 +0000307// This is the same as XForm_base_r3xo, but the first two operands are swapped
308// when code is emitted.
309class XForm_base_r3xo_swapped
Evan Cheng94b5a802007-07-19 01:14:50 +0000310 <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000311 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000312 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000313 bits<5> A;
314 bits<5> RST;
315 bits<5> B;
316
Chris Lattnerf9172e12005-04-19 05:15:18 +0000317 bit RC = 0; // set by isDOT
318
Chris Lattner130888ad2004-11-24 03:52:02 +0000319 let Inst{6-10} = RST;
320 let Inst{11-15} = A;
321 let Inst{16-20} = B;
322 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000323 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000324}
325
Nate Begeman765cb5f2004-08-13 02:19:26 +0000326
Evan Cheng94b5a802007-07-19 01:14:50 +0000327class XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000328 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000329 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000330
Evan Cheng94b5a802007-07-19 01:14:50 +0000331class XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000332 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000333 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000334 let Pattern = pattern;
335}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000336
Evan Cheng94b5a802007-07-19 01:14:50 +0000337class XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000338 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000339 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000340
Evan Cheng94b5a802007-07-19 01:14:50 +0000341class XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000342 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000343 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Jim Laskey74ab9962005-10-19 19:51:16 +0000344 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000345}
346
Evan Cheng94b5a802007-07-19 01:14:50 +0000347class XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000348 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000349 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000350 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000351 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000352}
353
Evan Cheng94b5a802007-07-19 01:14:50 +0000354class XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000355 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000356 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000357 bits<3> BF;
358 bits<1> L;
359 bits<5> RA;
360 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000361
Misha Brukman5295e1d2004-08-09 17:24:04 +0000362 let Inst{6-8} = BF;
363 let Inst{9} = 0;
364 let Inst{10} = L;
365 let Inst{11-15} = RA;
366 let Inst{16-20} = RB;
367 let Inst{21-30} = xo;
368 let Inst{31} = 0;
369}
370
Evan Cheng94b5a802007-07-19 01:14:50 +0000371class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000372 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000373 : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000374 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000375}
376
Evan Cheng94b5a802007-07-19 01:14:50 +0000377class XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000378 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000379 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000380 bits<3> BF;
381 bits<5> FRA;
382 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000383
Misha Brukman5295e1d2004-08-09 17:24:04 +0000384 let Inst{6-8} = BF;
385 let Inst{9-10} = 0;
386 let Inst{11-15} = FRA;
387 let Inst{16-20} = FRB;
388 let Inst{21-30} = xo;
389 let Inst{31} = 0;
390}
391
Nate Begemanf69d13b2008-08-11 17:36:31 +0000392class XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
393 InstrItinClass itin, list<dag> pattern>
394 : I<opcode, OOL, IOL, asmstr, itin> {
395 let Pattern = pattern;
396 let Inst{6-10} = 31;
397 let Inst{11-15} = 0;
398 let Inst{16-20} = 0;
399 let Inst{21-30} = xo;
400 let Inst{31} = 0;
401}
402
Dale Johannesened86f682008-08-22 17:20:54 +0000403class XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
404 string asmstr, InstrItinClass itin, list<dag> pattern>
405 : I<opcode, OOL, IOL, asmstr, itin> {
406 let Pattern = pattern;
407 let Inst{6-10} = 0;
408 let Inst{11-15} = 0;
409 let Inst{16-20} = 0;
410 let Inst{21-30} = xo;
411 let Inst{31} = 0;
412}
413
Evan Cheng94b5a802007-07-19 01:14:50 +0000414class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000415 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000416 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000417}
418
Evan Cheng94b5a802007-07-19 01:14:50 +0000419class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000420 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000421 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000422 let A = 0;
423}
424
Evan Cheng94b5a802007-07-19 01:14:50 +0000425class XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000426 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000427 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000428}
429
Dale Johannesen666323e2007-10-10 01:01:31 +0000430// This is used for MFFS, MTFSB0, MTFSB1. 42 is arbitrary; this series of
431// numbers presumably relates to some document, but I haven't found it.
432class XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
433 InstrItinClass itin, list<dag> pattern>
434 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
435 let Pattern = pattern;
436
437 bit RC = 0; // set by isDOT
438
439 let Inst{6-10} = RST;
440 let Inst{11-20} = 0;
441 let Inst{21-30} = xo;
442 let Inst{31} = RC;
443}
444class XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
445 InstrItinClass itin, list<dag> pattern>
446 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
447 let Pattern = pattern;
448 bits<5> FM;
449
450 bit RC = 0; // set by isDOT
451
452 let Inst{6-10} = FM;
453 let Inst{11-20} = 0;
454 let Inst{21-30} = xo;
455 let Inst{31} = RC;
456}
457
Chris Lattnerc8587d42006-06-06 21:29:23 +0000458// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng94b5a802007-07-19 01:14:50 +0000459class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattnerc8587d42006-06-06 21:29:23 +0000460 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000461 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerc8587d42006-06-06 21:29:23 +0000462 bits<5> A;
463 bits<5> B;
464
465 let Pattern = pattern;
466
467 let Inst{6-10} = immfield;
468 let Inst{11-15} = A;
469 let Inst{16-20} = B;
470 let Inst{21-30} = xo;
471 let Inst{31} = 0;
472}
473
474
Chris Lattnerc94d9322006-04-05 22:27:14 +0000475// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng94b5a802007-07-19 01:14:50 +0000476class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerc94d9322006-04-05 22:27:14 +0000477 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000478 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerc94d9322006-04-05 22:27:14 +0000479 bits<1> T;
480 bits<2> STRM;
481 bits<5> A;
482 bits<5> B;
483
484 let Pattern = pattern;
485
486 let Inst{6} = T;
487 let Inst{7-8} = 0;
488 let Inst{9-10} = STRM;
489 let Inst{11-15} = A;
490 let Inst{16-20} = B;
491 let Inst{21-30} = xo;
492 let Inst{31} = 0;
493}
494
Misha Brukman5295e1d2004-08-09 17:24:04 +0000495// 1.7.7 XL-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000496class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000497 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000498 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000499 bits<5> CRD;
500 bits<5> CRA;
501 bits<5> CRB;
Nate Begeman65a82c52005-04-14 03:20:38 +0000502
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000503 let Pattern = pattern;
504
505 let Inst{6-10} = CRD;
506 let Inst{11-15} = CRA;
507 let Inst{16-20} = CRB;
508 let Inst{21-30} = xo;
509 let Inst{31} = 0;
510}
511
Evan Cheng94b5a802007-07-19 01:14:50 +0000512class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000513 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000514 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000515 bits<5> CRD;
516
517 let Pattern = pattern;
518
519 let Inst{6-10} = CRD;
520 let Inst{11-15} = CRD;
521 let Inst{16-20} = CRD;
Nate Begeman65a82c52005-04-14 03:20:38 +0000522 let Inst{21-30} = xo;
523 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000524}
525
Evan Cheng94b5a802007-07-19 01:14:50 +0000526class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000527 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000528 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000529 bits<5> BO;
530 bits<5> BI;
531 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000532
Nate Begemanb11b8e42005-12-20 00:26:01 +0000533 let Pattern = pattern;
534
Misha Brukman5295e1d2004-08-09 17:24:04 +0000535 let Inst{6-10} = BO;
536 let Inst{11-15} = BI;
537 let Inst{16-18} = 0;
538 let Inst{19-20} = BH;
539 let Inst{21-30} = xo;
540 let Inst{31} = lk;
541}
542
Chris Lattner29597892006-11-04 05:42:48 +0000543class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng94b5a802007-07-19 01:14:50 +0000544 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
545 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner29597892006-11-04 05:42:48 +0000546 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
547 bits<3> CR;
548
Chris Lattnerd94477f2006-11-07 01:51:50 +0000549 let BO = BIBO{2-6};
550 let BI{0-1} = BIBO{0-1};
Chris Lattner29597892006-11-04 05:42:48 +0000551 let BI{2-4} = CR;
552 let BH = 0;
553}
554
555
Jim Laskey74ab9962005-10-19 19:51:16 +0000556class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng94b5a802007-07-19 01:14:50 +0000557 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
558 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000559 let BO = bo;
560 let BI = bi;
561 let BH = 0;
562}
563
Evan Cheng94b5a802007-07-19 01:14:50 +0000564class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000565 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000566 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000567 bits<3> BF;
568 bits<3> BFA;
569
570 let Inst{6-8} = BF;
571 let Inst{9-10} = 0;
572 let Inst{11-13} = BFA;
573 let Inst{14-15} = 0;
574 let Inst{16-20} = 0;
575 let Inst{21-30} = xo;
576 let Inst{31} = 0;
577}
578
Misha Brukman5295e1d2004-08-09 17:24:04 +0000579// 1.7.8 XFX-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000580class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000581 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000582 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000583 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000584 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000585
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000586 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000587 let Inst{11} = SPR{4};
588 let Inst{12} = SPR{3};
589 let Inst{13} = SPR{2};
590 let Inst{14} = SPR{1};
591 let Inst{15} = SPR{0};
592 let Inst{16} = SPR{9};
593 let Inst{17} = SPR{8};
594 let Inst{18} = SPR{7};
595 let Inst{19} = SPR{6};
596 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000597 let Inst{21-30} = xo;
598 let Inst{31} = 0;
599}
600
Chris Lattnerd790d222005-04-19 04:40:07 +0000601class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng94b5a802007-07-19 01:14:50 +0000602 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
603 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000604 let SPR = spr;
605}
606
Evan Cheng94b5a802007-07-19 01:14:50 +0000607class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000608 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000609 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000610 bits<5> RT;
611
612 let Inst{6-10} = RT;
613 let Inst{11-20} = 0;
614 let Inst{21-30} = xo;
615 let Inst{31} = 0;
616}
617
Evan Cheng94b5a802007-07-19 01:14:50 +0000618class XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000619 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000620 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000621 bits<8> FXM;
622 bits<5> ST;
623
624 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000625 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000626 let Inst{12-19} = FXM;
627 let Inst{20} = 0;
628 let Inst{21-30} = xo;
629 let Inst{31} = 0;
630}
631
Evan Cheng94b5a802007-07-19 01:14:50 +0000632class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000633 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000634 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000635 bits<5> ST;
636 bits<8> FXM;
637
638 let Inst{6-10} = ST;
639 let Inst{11} = 1;
640 let Inst{12-19} = FXM;
641 let Inst{20} = 0;
642 let Inst{21-30} = xo;
643 let Inst{31} = 0;
644}
645
Evan Cheng94b5a802007-07-19 01:14:50 +0000646class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000647 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000648 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000649
Nate Begeman143cf942004-08-30 02:28:06 +0000650class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng94b5a802007-07-19 01:14:50 +0000651 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
652 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000653 let SPR = spr;
654}
655
Dale Johannesen666323e2007-10-10 01:01:31 +0000656// XFL-Form - MTFSF
657// This is probably 1.7.9, but I don't have the reference that uses this
658// numbering scheme...
659class XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
660 string cstr, InstrItinClass itin, list<dag>pattern>
661 : I<opcode, OOL, IOL, asmstr, itin> {
662 bits<8> FM;
663 bits<5> RT;
664
665 bit RC = 0; // set by isDOT
666 let Pattern = pattern;
667 let Constraints = cstr;
668
669 let Inst{6} = 0;
670 let Inst{7-14} = FM;
671 let Inst{15} = 0;
672 let Inst{16-20} = RT;
673 let Inst{21-30} = xo;
674 let Inst{31} = RC;
675}
676
Chris Lattneraeadac82006-12-06 20:02:54 +0000677// 1.7.10 XS-Form - SRADI.
Evan Cheng94b5a802007-07-19 01:14:50 +0000678class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnera2af3f42006-06-27 20:07:26 +0000679 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000680 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000681 bits<5> A;
Chris Lattner9472eb82006-12-06 21:35:10 +0000682 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000683 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000684
Chris Lattnerf9172e12005-04-19 05:15:18 +0000685 bit RC = 0; // set by isDOT
Chris Lattnera2af3f42006-06-27 20:07:26 +0000686 let Pattern = pattern;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000687
Nate Begeman765cb5f2004-08-13 02:19:26 +0000688 let Inst{6-10} = RS;
689 let Inst{11-15} = A;
Chris Lattneraeadac82006-12-06 20:02:54 +0000690 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman765cb5f2004-08-13 02:19:26 +0000691 let Inst{21-29} = xo;
Chris Lattneraeadac82006-12-06 20:02:54 +0000692 let Inst{30} = SH{5};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000693 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000694}
695
Misha Brukman5295e1d2004-08-09 17:24:04 +0000696// 1.7.11 XO-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000697class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000698 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000699 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000700 bits<5> RT;
701 bits<5> RA;
702 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000703
Chris Lattner3a1002d2005-09-02 21:18:00 +0000704 let Pattern = pattern;
705
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000706 bit RC = 0; // set by isDOT
707
Misha Brukman5295e1d2004-08-09 17:24:04 +0000708 let Inst{6-10} = RT;
709 let Inst{11-15} = RA;
710 let Inst{16-20} = RB;
711 let Inst{21} = oe;
712 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000713 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000714}
715
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000716class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng94b5a802007-07-19 01:14:50 +0000717 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
718 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000719 let RB = 0;
720}
721
722// 1.7.12 A-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000723class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000724 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000725 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000726 bits<5> FRT;
727 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000728 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000729 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000730
Chris Lattner027a2672005-09-29 23:34:24 +0000731 let Pattern = pattern;
732
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000733 bit RC = 0; // set by isDOT
734
Misha Brukman5295e1d2004-08-09 17:24:04 +0000735 let Inst{6-10} = FRT;
736 let Inst{11-15} = FRA;
737 let Inst{16-20} = FRB;
738 let Inst{21-25} = FRC;
739 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000740 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000741}
742
Evan Cheng94b5a802007-07-19 01:14:50 +0000743class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000744 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000745 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000746 let FRC = 0;
747}
748
Evan Cheng94b5a802007-07-19 01:14:50 +0000749class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000750 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000751 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000752 let FRB = 0;
753}
754
Misha Brukman5295e1d2004-08-09 17:24:04 +0000755// 1.7.13 M-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000756class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000757 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000758 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000759 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000760 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000761 bits<5> RB;
762 bits<5> MB;
763 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000764
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000765 let Pattern = pattern;
766
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000767 bit RC = 0; // set by isDOT
768
Misha Brukman5295e1d2004-08-09 17:24:04 +0000769 let Inst{6-10} = RS;
770 let Inst{11-15} = RA;
771 let Inst{16-20} = RB;
772 let Inst{21-25} = MB;
773 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000774 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000775}
776
Evan Cheng94b5a802007-07-19 01:14:50 +0000777class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000778 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000779 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000780}
781
Nate Begeman765cb5f2004-08-13 02:19:26 +0000782// 1.7.14 MD-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000783class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000784 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000785 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000786 bits<5> RA;
Chris Lattner077b86a2006-07-13 21:52:41 +0000787 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000788 bits<6> SH;
789 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000790
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000791 let Pattern = pattern;
792
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000793 bit RC = 0; // set by isDOT
794
Nate Begeman765cb5f2004-08-13 02:19:26 +0000795 let Inst{6-10} = RS;
796 let Inst{11-15} = RA;
Chris Lattneraeadac82006-12-06 20:02:54 +0000797 let Inst{16-20} = SH{4,3,2,1,0};
798 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman765cb5f2004-08-13 02:19:26 +0000799 let Inst{27-29} = xo;
Chris Lattnerdd57ac42006-07-12 22:08:13 +0000800 let Inst{30} = SH{5};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000801 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000802}
803
Chris Lattnerc94d9322006-04-05 22:27:14 +0000804
805
Nate Begeman8492fd32005-11-23 05:29:52 +0000806// E-1 VA-Form
Chris Lattner1738c292006-03-27 03:34:17 +0000807
808// VAForm_1 - DACB ordering.
Evan Cheng94b5a802007-07-19 01:14:50 +0000809class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000810 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000811 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000812 bits<5> VD;
813 bits<5> VA;
Nate Begeman8492fd32005-11-23 05:29:52 +0000814 bits<5> VC;
Chris Lattner4e737172006-03-22 01:44:36 +0000815 bits<5> VB;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000816
817 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000818
819 let Inst{6-10} = VD;
820 let Inst{11-15} = VA;
821 let Inst{16-20} = VB;
822 let Inst{21-25} = VC;
823 let Inst{26-31} = xo;
824}
825
Chris Lattner1738c292006-03-27 03:34:17 +0000826// VAForm_1a - DABC ordering.
Evan Cheng94b5a802007-07-19 01:14:50 +0000827class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner1738c292006-03-27 03:34:17 +0000828 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000829 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner1738c292006-03-27 03:34:17 +0000830 bits<5> VD;
831 bits<5> VA;
832 bits<5> VB;
833 bits<5> VC;
834
835 let Pattern = pattern;
836
837 let Inst{6-10} = VD;
838 let Inst{11-15} = VA;
839 let Inst{16-20} = VB;
840 let Inst{21-25} = VC;
841 let Inst{26-31} = xo;
842}
843
Evan Cheng94b5a802007-07-19 01:14:50 +0000844class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner53e07de2006-03-26 00:41:48 +0000845 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000846 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner53e07de2006-03-26 00:41:48 +0000847 bits<5> VD;
848 bits<5> VA;
849 bits<5> VB;
850 bits<4> SH;
851
852 let Pattern = pattern;
853
854 let Inst{6-10} = VD;
855 let Inst{11-15} = VA;
856 let Inst{16-20} = VB;
857 let Inst{21} = 0;
858 let Inst{22-25} = SH;
859 let Inst{26-31} = xo;
860}
861
Nate Begeman8492fd32005-11-23 05:29:52 +0000862// E-2 VX-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000863class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000864 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000865 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000866 bits<5> VD;
867 bits<5> VA;
868 bits<5> VB;
869
Nate Begeman11fd6b22005-11-26 22:39:34 +0000870 let Pattern = pattern;
871
Nate Begeman8492fd32005-11-23 05:29:52 +0000872 let Inst{6-10} = VD;
873 let Inst{11-15} = VA;
874 let Inst{16-20} = VB;
875 let Inst{21-31} = xo;
876}
877
Evan Cheng94b5a802007-07-19 01:14:50 +0000878class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman40f081d2005-12-14 00:34:09 +0000879 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000880 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman40f081d2005-12-14 00:34:09 +0000881 let VA = VD;
882 let VB = VD;
883}
884
885
Evan Cheng94b5a802007-07-19 01:14:50 +0000886class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanc1381182005-11-29 08:04:45 +0000887 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000888 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemanc1381182005-11-29 08:04:45 +0000889 bits<5> VD;
890 bits<5> VB;
891
892 let Pattern = pattern;
893
894 let Inst{6-10} = VD;
895 let Inst{11-15} = 0;
896 let Inst{16-20} = VB;
897 let Inst{21-31} = xo;
898}
899
Evan Cheng94b5a802007-07-19 01:14:50 +0000900class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerdf59d532006-03-27 03:28:57 +0000901 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000902 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerdf59d532006-03-27 03:28:57 +0000903 bits<5> VD;
904 bits<5> IMM;
905
906 let Pattern = pattern;
907
908 let Inst{6-10} = VD;
909 let Inst{11-15} = IMM;
910 let Inst{16-20} = 0;
911 let Inst{21-31} = xo;
912}
913
Chris Lattner5a528e52006-04-05 00:03:57 +0000914/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng94b5a802007-07-19 01:14:50 +0000915class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner5a528e52006-04-05 00:03:57 +0000916 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000917 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner5a528e52006-04-05 00:03:57 +0000918 bits<5> VD;
919
920 let Pattern = pattern;
921
922 let Inst{6-10} = VD;
923 let Inst{11-15} = 0;
924 let Inst{16-20} = 0;
925 let Inst{21-31} = xo;
926}
927
928/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng94b5a802007-07-19 01:14:50 +0000929class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner5a528e52006-04-05 00:03:57 +0000930 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000931 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner5a528e52006-04-05 00:03:57 +0000932 bits<5> VB;
933
934 let Pattern = pattern;
935
936 let Inst{6-10} = 0;
937 let Inst{11-15} = 0;
938 let Inst{16-20} = VB;
939 let Inst{21-31} = xo;
940}
Chris Lattnerdf59d532006-03-27 03:28:57 +0000941
Nate Begeman8492fd32005-11-23 05:29:52 +0000942// E-4 VXR-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000943class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000944 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000945 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000946 bits<5> VD;
947 bits<5> VA;
948 bits<5> VB;
Chris Lattner793cbcb2006-03-26 04:57:17 +0000949 bit RC = 0;
Nate Begeman8492fd32005-11-23 05:29:52 +0000950
Nate Begeman11fd6b22005-11-26 22:39:34 +0000951 let Pattern = pattern;
952
Nate Begeman8492fd32005-11-23 05:29:52 +0000953 let Inst{6-10} = VD;
954 let Inst{11-15} = VA;
955 let Inst{16-20} = VB;
Chris Lattner793cbcb2006-03-26 04:57:17 +0000956 let Inst{21} = RC;
Nate Begeman8492fd32005-11-23 05:29:52 +0000957 let Inst{22-31} = xo;
958}
959
Misha Brukman6b21bde2004-08-02 21:56:35 +0000960//===----------------------------------------------------------------------===//
Evan Cheng94b5a802007-07-19 01:14:50 +0000961class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
962 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begeman61738782004-09-02 08:13:00 +0000963 let PPC64 = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000964 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000965 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000966}