blob: 8b28e5f81454123d2cf171f398007012fe86491b [file] [log] [blame]
Misha Brukmancd4f51b2004-08-02 16:54:54 +00001//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//
11//===----------------------------------------------------------------------===//
12
Misha Brukman6b21bde2004-08-02 21:56:35 +000013//===----------------------------------------------------------------------===//
14//
15// PowerPC instruction formats
Misha Brukmancd4f51b2004-08-02 16:54:54 +000016
Jim Laskey74ab9962005-10-19 19:51:16 +000017class I<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
18 : Instruction {
Misha Brukman6b21bde2004-08-02 21:56:35 +000019 field bits<32> Inst;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000020
Chris Lattner5b78da42005-04-19 05:05:22 +000021 bit PPC64 = 0; // Default value, override with isPPC64
22 bit VMX = 0; // Default value, override with isVMX
Misha Brukmancd4f51b2004-08-02 16:54:54 +000023
Nate Begeman4bfceb12004-09-04 05:00:00 +000024 let Name = "";
Misha Brukmandad438b2004-08-10 22:47:03 +000025 let Namespace = "PPC";
Misha Brukman5295e1d2004-08-09 17:24:04 +000026 let Inst{0-5} = opcode;
Nate Begeman4bfceb12004-09-04 05:00:00 +000027 let OperandList = OL;
28 let AsmString = asmstr;
Jim Laskey74ab9962005-10-19 19:51:16 +000029 let Itinerary = itin;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000030}
31
Misha Brukman5295e1d2004-08-09 17:24:04 +000032// 1.7.1 I-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000033class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr,
Chris Lattnerd9d18af2005-12-04 18:42:54 +000034 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +000035 : I<opcode, OL, asmstr, itin> {
Chris Lattnerd9d18af2005-12-04 18:42:54 +000036 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000037 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000038
Misha Brukman5295e1d2004-08-09 17:24:04 +000039 let Inst{6-29} = LI;
40 let Inst{30} = aa;
41 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000042}
43
Misha Brukman5295e1d2004-08-09 17:24:04 +000044// 1.7.2 B-Form
Nate Begeman7b809f52005-08-26 04:11:42 +000045class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL,
Jim Laskey74ab9962005-10-19 19:51:16 +000046 string asmstr, InstrItinClass itin>
47 : I<opcode, OL, asmstr, itin> {
Nate Begeman7b809f52005-08-26 04:11:42 +000048 bits<3> CR;
Misha Brukman189f3dc2004-10-14 05:55:37 +000049 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000050
Nate Begeman7b809f52005-08-26 04:11:42 +000051 let Inst{6-10} = bo;
52 let Inst{11-13} = CR;
53 let Inst{14-15} = bicode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000054 let Inst{16-29} = BD;
55 let Inst{30} = aa;
56 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000057}
58
Misha Brukman5295e1d2004-08-09 17:24:04 +000059// 1.7.4 D-Form
Jim Laskey74ab9962005-10-19 19:51:16 +000060class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
Nate Begemanade6f9a2005-12-09 23:54:18 +000061 list<dag> pattern>
62 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000063 bits<5> A;
64 bits<5> B;
65 bits<16> C;
Nate Begemanade6f9a2005-12-09 23:54:18 +000066
67 let Pattern = pattern;
Misha Brukman6b21bde2004-08-02 21:56:35 +000068
Misha Brukman6b21bde2004-08-02 21:56:35 +000069 let Inst{6-10} = A;
70 let Inst{11-15} = B;
71 let Inst{16-31} = C;
72}
73
Nate Begemanade6f9a2005-12-09 23:54:18 +000074class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
75 list<dag> pattern>
76 : I<opcode, OL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +000077 bits<5> A;
78 bits<16> C;
79 bits<5> B;
Nate Begemanade6f9a2005-12-09 23:54:18 +000080
81 let Pattern = pattern;
Misha Brukman15b0fb52004-10-23 06:08:38 +000082
Misha Brukman15b0fb52004-10-23 06:08:38 +000083 let Inst{6-10} = A;
84 let Inst{11-15} = B;
85 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000086}
87
Jim Laskey74ab9962005-10-19 19:51:16 +000088class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
89 list<dag> pattern>
90 : DForm_base<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +000091
Jim Laskey74ab9962005-10-19 19:51:16 +000092class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
93 list<dag> pattern>
94 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000095 bits<5> A;
96 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +000097
Chris Lattner2d8032b2005-09-08 17:33:10 +000098 let Pattern = pattern;
99
Nate Begeman4bfceb12004-09-04 05:00:00 +0000100 let Inst{6-10} = A;
101 let Inst{11-15} = 0;
102 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000103}
104
105// Currently we make the use/def reg distinction in ISel, not tablegen
Nate Begemanade6f9a2005-12-09 23:54:18 +0000106class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
107 list<dag> pattern>
108 : DForm_1<opcode, OL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000109
Jim Laskey74ab9962005-10-19 19:51:16 +0000110class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
111 list<dag> pattern>
Nate Begemanade6f9a2005-12-09 23:54:18 +0000112 : I<opcode, OL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000113 bits<5> B;
114 bits<5> A;
115 bits<16> C;
116
Chris Lattner76cb0062005-09-08 17:40:49 +0000117 let Pattern = pattern;
118
Chris Lattner022e2712004-11-24 02:15:41 +0000119 let Inst{6-10} = A;
120 let Inst{11-15} = B;
121 let Inst{16-31} = C;
122}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000123
Nate Begemanade6f9a2005-12-09 23:54:18 +0000124class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
125 list<dag> pattern>
126 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000127 let A = 0;
128 let B = 0;
129 let C = 0;
130}
131
Jim Laskey74ab9962005-10-19 19:51:16 +0000132class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
133 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000134 bits<3> BF;
135 bits<1> L;
136 bits<5> RA;
137 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000138
Misha Brukman5295e1d2004-08-09 17:24:04 +0000139 let Inst{6-8} = BF;
140 let Inst{9} = 0;
141 let Inst{10} = L;
142 let Inst{11-15} = RA;
143 let Inst{16-31} = I;
144}
145
Jim Laskey74ab9962005-10-19 19:51:16 +0000146class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
147 : DForm_5<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000148 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000149}
150
Jim Laskey74ab9962005-10-19 19:51:16 +0000151class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
152 : DForm_5<opcode, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000153
Jim Laskey74ab9962005-10-19 19:51:16 +0000154class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
155 : DForm_6<opcode, OL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000156 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000157}
158
Nate Begemanade6f9a2005-12-09 23:54:18 +0000159class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
160 list<dag> pattern>
161 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000162}
163
Nate Begemanade6f9a2005-12-09 23:54:18 +0000164class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
165 list<dag> pattern>
166 : DForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000167}
168
Misha Brukman28beda92004-08-11 15:54:36 +0000169// 1.7.5 DS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000170class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000171 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000172 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000173 bits<5> RST;
174 bits<14> DS;
175 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000176
Nate Begemanade6f9a2005-12-09 23:54:18 +0000177 let Pattern = pattern;
178
Misha Brukman28beda92004-08-11 15:54:36 +0000179 let Inst{6-10} = RST;
180 let Inst{11-15} = RA;
181 let Inst{16-29} = DS;
182 let Inst{30-31} = xo;
183}
184
Jim Laskey74ab9962005-10-19 19:51:16 +0000185class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000186 InstrItinClass itin, list<dag> pattern>
187 : DSForm_1<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman28beda92004-08-11 15:54:36 +0000188
Misha Brukman5295e1d2004-08-09 17:24:04 +0000189// 1.7.6 X-Form
Nate Begemanade6f9a2005-12-09 23:54:18 +0000190class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
191 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000192 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000193 bits<5> RST;
194 bits<5> A;
195 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000196
Nate Begemanade6f9a2005-12-09 23:54:18 +0000197 let Pattern = pattern;
198
Chris Lattnerf9172e12005-04-19 05:15:18 +0000199 bit RC = 0; // set by isDOT
200
Misha Brukman28beda92004-08-11 15:54:36 +0000201 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000202 let Inst{11-15} = A;
203 let Inst{16-20} = B;
204 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000205 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000206}
207
Chris Lattner130888ad2004-11-24 03:52:02 +0000208// This is the same as XForm_base_r3xo, but the first two operands are swapped
209// when code is emitted.
210class XForm_base_r3xo_swapped
Jim Laskey74ab9962005-10-19 19:51:16 +0000211 <bits<6> opcode, bits<10> xo, dag OL, string asmstr,
212 InstrItinClass itin>
213 : I<opcode, OL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000214 bits<5> A;
215 bits<5> RST;
216 bits<5> B;
217
Chris Lattnerf9172e12005-04-19 05:15:18 +0000218 bit RC = 0; // set by isDOT
219
Chris Lattner130888ad2004-11-24 03:52:02 +0000220 let Inst{6-10} = RST;
221 let Inst{11-15} = A;
222 let Inst{16-20} = B;
223 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000224 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000225}
226
Nate Begeman765cb5f2004-08-13 02:19:26 +0000227
Jim Laskey74ab9962005-10-19 19:51:16 +0000228class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000229 InstrItinClass itin, list<dag> pattern>
230 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000231
Jim Laskey74ab9962005-10-19 19:51:16 +0000232class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
233 InstrItinClass itin, list<dag> pattern>
234 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000235 let Pattern = pattern;
236}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000237
Jim Laskey74ab9962005-10-19 19:51:16 +0000238class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000239 InstrItinClass itin, list<dag> pattern>
240 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000241
Jim Laskey74ab9962005-10-19 19:51:16 +0000242class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
243 InstrItinClass itin, list<dag> pattern>
244 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
245 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000246}
247
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000248class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000249 InstrItinClass itin, list<dag> pattern>
250 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000251 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000252 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000253}
254
Jim Laskey74ab9962005-10-19 19:51:16 +0000255class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
256 InstrItinClass itin>
257 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000258 bits<3> BF;
259 bits<1> L;
260 bits<5> RA;
261 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000262
Misha Brukman5295e1d2004-08-09 17:24:04 +0000263 let Inst{6-8} = BF;
264 let Inst{9} = 0;
265 let Inst{10} = L;
266 let Inst{11-15} = RA;
267 let Inst{16-20} = RB;
268 let Inst{21-30} = xo;
269 let Inst{31} = 0;
270}
271
Jim Laskey74ab9962005-10-19 19:51:16 +0000272class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
273 InstrItinClass itin>
274 : XForm_16<opcode, xo, OL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000275 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000276}
277
Jim Laskey74ab9962005-10-19 19:51:16 +0000278class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
279 InstrItinClass itin>
280 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000281 bits<3> BF;
282 bits<5> FRA;
283 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000284
Misha Brukman5295e1d2004-08-09 17:24:04 +0000285 let Inst{6-8} = BF;
286 let Inst{9-10} = 0;
287 let Inst{11-15} = FRA;
288 let Inst{16-20} = FRB;
289 let Inst{21-30} = xo;
290 let Inst{31} = 0;
291}
292
Jim Laskey74ab9962005-10-19 19:51:16 +0000293class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000294 InstrItinClass itin, list<dag> pattern>
295 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000296}
297
Jim Laskey74ab9962005-10-19 19:51:16 +0000298class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
299 InstrItinClass itin, list<dag> pattern>
Nate Begemanade6f9a2005-12-09 23:54:18 +0000300 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000301 let A = 0;
302}
303
Jim Laskey74ab9962005-10-19 19:51:16 +0000304class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000305 InstrItinClass itin, list<dag> pattern>
306 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000307}
308
309// 1.7.7 XL-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000310class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
311 InstrItinClass itin>
312 : I<opcode, OL, asmstr, itin> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000313 bits<3> CRD;
314 bits<2> CRDb;
315 bits<3> CRA;
316 bits<2> CRAb;
317 bits<3> CRB;
318 bits<2> CRBb;
319
320 let Inst{6-8} = CRD;
321 let Inst{9-10} = CRDb;
322 let Inst{11-13} = CRA;
323 let Inst{14-15} = CRAb;
324 let Inst{16-18} = CRB;
325 let Inst{19-20} = CRBb;
326 let Inst{21-30} = xo;
327 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000328}
329
Jim Laskey74ab9962005-10-19 19:51:16 +0000330class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr,
331 InstrItinClass itin>
332 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000333 bits<5> BO;
334 bits<5> BI;
335 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000336
Misha Brukman5295e1d2004-08-09 17:24:04 +0000337 let Inst{6-10} = BO;
338 let Inst{11-15} = BI;
339 let Inst{16-18} = 0;
340 let Inst{19-20} = BH;
341 let Inst{21-30} = xo;
342 let Inst{31} = lk;
343}
344
Jim Laskey74ab9962005-10-19 19:51:16 +0000345class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
346 dag OL, string asmstr, InstrItinClass itin>
347 : XLForm_2<opcode, xo, lk, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000348 let BO = bo;
349 let BI = bi;
350 let BH = 0;
351}
352
Jim Laskey74ab9962005-10-19 19:51:16 +0000353class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
354 InstrItinClass itin>
355 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000356 bits<3> BF;
357 bits<3> BFA;
358
359 let Inst{6-8} = BF;
360 let Inst{9-10} = 0;
361 let Inst{11-13} = BFA;
362 let Inst{14-15} = 0;
363 let Inst{16-20} = 0;
364 let Inst{21-30} = xo;
365 let Inst{31} = 0;
366}
367
Misha Brukman5295e1d2004-08-09 17:24:04 +0000368// 1.7.8 XFX-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000369class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
370 InstrItinClass itin>
371 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000372 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000373 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000374
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000375 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000376 let Inst{11} = SPR{4};
377 let Inst{12} = SPR{3};
378 let Inst{13} = SPR{2};
379 let Inst{14} = SPR{1};
380 let Inst{15} = SPR{0};
381 let Inst{16} = SPR{9};
382 let Inst{17} = SPR{8};
383 let Inst{18} = SPR{7};
384 let Inst{19} = SPR{6};
385 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000386 let Inst{21-30} = xo;
387 let Inst{31} = 0;
388}
389
Chris Lattnerd790d222005-04-19 04:40:07 +0000390class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000391 dag OL, string asmstr, InstrItinClass itin>
392 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000393 let SPR = spr;
394}
395
Jim Laskey74ab9962005-10-19 19:51:16 +0000396class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
397 InstrItinClass itin>
398 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000399 bits<5> RT;
400
401 let Inst{6-10} = RT;
402 let Inst{11-20} = 0;
403 let Inst{21-30} = xo;
404 let Inst{31} = 0;
405}
406
Jim Laskey74ab9962005-10-19 19:51:16 +0000407class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
408 InstrItinClass itin>
409 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000410 bits<8> FXM;
411 bits<5> ST;
412
413 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000414 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000415 let Inst{12-19} = FXM;
416 let Inst{20} = 0;
417 let Inst{21-30} = xo;
418 let Inst{31} = 0;
419}
420
Jim Laskey74ab9962005-10-19 19:51:16 +0000421class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
422 InstrItinClass itin>
423 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000424 bits<5> ST;
425 bits<8> FXM;
426
427 let Inst{6-10} = ST;
428 let Inst{11} = 1;
429 let Inst{12-19} = FXM;
430 let Inst{20} = 0;
431 let Inst{21-30} = xo;
432 let Inst{31} = 0;
433}
434
Jim Laskey74ab9962005-10-19 19:51:16 +0000435class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
436 InstrItinClass itin>
437 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000438
Nate Begeman143cf942004-08-30 02:28:06 +0000439class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000440 dag OL, string asmstr, InstrItinClass itin>
441 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000442 let SPR = spr;
443}
444
Nate Begeman765cb5f2004-08-13 02:19:26 +0000445// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000446class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
447 InstrItinClass itin>
448 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000449 bits<5> RS;
450 bits<5> A;
451 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000452
Chris Lattnerf9172e12005-04-19 05:15:18 +0000453 bit RC = 0; // set by isDOT
454
Nate Begeman765cb5f2004-08-13 02:19:26 +0000455 let Inst{6-10} = RS;
456 let Inst{11-15} = A;
457 let Inst{16-20} = SH{1-5};
458 let Inst{21-29} = xo;
459 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000460 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000461}
462
Misha Brukman5295e1d2004-08-09 17:24:04 +0000463// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000464class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000465 InstrItinClass itin, list<dag> pattern>
466 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000467 bits<5> RT;
468 bits<5> RA;
469 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000470
Chris Lattner3a1002d2005-09-02 21:18:00 +0000471 let Pattern = pattern;
472
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000473 bit RC = 0; // set by isDOT
474
Misha Brukman5295e1d2004-08-09 17:24:04 +0000475 let Inst{6-10} = RT;
476 let Inst{11-15} = RA;
477 let Inst{16-20} = RB;
478 let Inst{21} = oe;
479 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000480 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000481}
482
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000483class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000484 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
485 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000486 let RB = 0;
487}
488
489// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000490class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000491 InstrItinClass itin, list<dag> pattern>
492 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000493 bits<5> FRT;
494 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000495 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000496 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000497
Chris Lattner027a2672005-09-29 23:34:24 +0000498 let Pattern = pattern;
499
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000500 bit RC = 0; // set by isDOT
501
Misha Brukman5295e1d2004-08-09 17:24:04 +0000502 let Inst{6-10} = FRT;
503 let Inst{11-15} = FRA;
504 let Inst{16-20} = FRB;
505 let Inst{21-25} = FRC;
506 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000507 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000508}
509
Jim Laskey74ab9962005-10-19 19:51:16 +0000510class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
511 InstrItinClass itin, list<dag> pattern>
512 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000513 let FRC = 0;
514}
515
Jim Laskey74ab9962005-10-19 19:51:16 +0000516class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
517 InstrItinClass itin, list<dag> pattern>
518 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000519 let FRB = 0;
520}
521
Misha Brukman5295e1d2004-08-09 17:24:04 +0000522// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000523class MForm_1<bits<6> opcode, dag OL, string asmstr,
524 InstrItinClass itin, list<dag> pattern>
525 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000526 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000527 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000528 bits<5> RB;
529 bits<5> MB;
530 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000531
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000532 let Pattern = pattern;
533
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000534 bit RC = 0; // set by isDOT
535
Misha Brukman5295e1d2004-08-09 17:24:04 +0000536 let Inst{6-10} = RS;
537 let Inst{11-15} = RA;
538 let Inst{16-20} = RB;
539 let Inst{21-25} = MB;
540 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000541 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000542}
543
Jim Laskey74ab9962005-10-19 19:51:16 +0000544class MForm_2<bits<6> opcode, dag OL, string asmstr,
545 InstrItinClass itin, list<dag> pattern>
546 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000547}
548
Nate Begeman765cb5f2004-08-13 02:19:26 +0000549// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000550class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
551 InstrItinClass itin, list<dag> pattern>
552 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000553 bits<5> RS;
554 bits<5> RA;
555 bits<6> SH;
556 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000557
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000558 let Pattern = pattern;
559
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000560 bit RC = 0; // set by isDOT
561
Nate Begeman765cb5f2004-08-13 02:19:26 +0000562 let Inst{6-10} = RS;
563 let Inst{11-15} = RA;
564 let Inst{16-20} = SH{1-5};
565 let Inst{21-26} = MBE;
566 let Inst{27-29} = xo;
567 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000568 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000569}
570
Nate Begeman8492fd32005-11-23 05:29:52 +0000571// E-1 VA-Form
572class VAForm_1<bits<6> xo, dag OL, string asmstr,
573 InstrItinClass itin, list<dag> pattern>
574 : I<4, OL, asmstr, itin> {
575 bits<5> VD;
576 bits<5> VA;
577 bits<5> VB;
578 bits<5> VC;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000579
580 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000581
582 let Inst{6-10} = VD;
583 let Inst{11-15} = VA;
584 let Inst{16-20} = VB;
585 let Inst{21-25} = VC;
586 let Inst{26-31} = xo;
587}
588
589// E-2 VX-Form
590class VXForm_1<bits<11> xo, dag OL, string asmstr,
591 InstrItinClass itin, list<dag> pattern>
592 : I<4, OL, asmstr, itin> {
593 bits<5> VD;
594 bits<5> VA;
595 bits<5> VB;
596
Nate Begeman11fd6b22005-11-26 22:39:34 +0000597 let Pattern = pattern;
598
Nate Begeman8492fd32005-11-23 05:29:52 +0000599 let Inst{6-10} = VD;
600 let Inst{11-15} = VA;
601 let Inst{16-20} = VB;
602 let Inst{21-31} = xo;
603}
604
Nate Begeman40f081d2005-12-14 00:34:09 +0000605class VXForm_setzero<bits<11> xo, dag OL, string asmstr,
606 InstrItinClass itin, list<dag> pattern>
607 : VXForm_1<xo, OL, asmstr, itin, pattern> {
608 let VA = VD;
609 let VB = VD;
610}
611
612
Nate Begemanc1381182005-11-29 08:04:45 +0000613class VXForm_2<bits<11> xo, dag OL, string asmstr,
614 InstrItinClass itin, list<dag> pattern>
615 : I<4, OL, asmstr, itin> {
616 bits<5> VD;
617 bits<5> VB;
618
619 let Pattern = pattern;
620
621 let Inst{6-10} = VD;
622 let Inst{11-15} = 0;
623 let Inst{16-20} = VB;
624 let Inst{21-31} = xo;
625}
626
Nate Begeman8492fd32005-11-23 05:29:52 +0000627// E-4 VXR-Form
628class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
629 InstrItinClass itin, list<dag> pattern>
630 : I<4, OL, asmstr, itin> {
631 bits<5> VD;
632 bits<5> VA;
633 bits<5> VB;
634
Nate Begeman11fd6b22005-11-26 22:39:34 +0000635 let Pattern = pattern;
636
Nate Begeman8492fd32005-11-23 05:29:52 +0000637 let Inst{6-10} = VD;
638 let Inst{11-15} = VA;
639 let Inst{16-20} = VB;
640 let Inst{21} = rc;
641 let Inst{22-31} = xo;
642}
643
Misha Brukman6b21bde2004-08-02 21:56:35 +0000644//===----------------------------------------------------------------------===//
Jim Laskey74ab9962005-10-19 19:51:16 +0000645def NoItin : InstrItinClass;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000646class Pseudo<dag OL, string asmstr, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000647 : I<0, OL, asmstr, NoItin> {
Nate Begeman61738782004-09-02 08:13:00 +0000648 let PPC64 = 0;
649 let VMX = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000650 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000651 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000652}