blob: 0c7dca0d7b1a9c3758fd83eb2f51bd8586f7c966 [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,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000331 InstrItinClass itin, list<dag> pattern>
Jim Laskey74ab9962005-10-19 19:51:16 +0000332 : 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
Nate Begemanb11b8e42005-12-20 00:26:01 +0000337 let Pattern = pattern;
338
Misha Brukman5295e1d2004-08-09 17:24:04 +0000339 let Inst{6-10} = BO;
340 let Inst{11-15} = BI;
341 let Inst{16-18} = 0;
342 let Inst{19-20} = BH;
343 let Inst{21-30} = xo;
344 let Inst{31} = lk;
345}
346
Jim Laskey74ab9962005-10-19 19:51:16 +0000347class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000348 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
349 : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000350 let BO = bo;
351 let BI = bi;
352 let BH = 0;
353}
354
Jim Laskey74ab9962005-10-19 19:51:16 +0000355class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
356 InstrItinClass itin>
357 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000358 bits<3> BF;
359 bits<3> BFA;
360
361 let Inst{6-8} = BF;
362 let Inst{9-10} = 0;
363 let Inst{11-13} = BFA;
364 let Inst{14-15} = 0;
365 let Inst{16-20} = 0;
366 let Inst{21-30} = xo;
367 let Inst{31} = 0;
368}
369
Misha Brukman5295e1d2004-08-09 17:24:04 +0000370// 1.7.8 XFX-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000371class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
372 InstrItinClass itin>
373 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000374 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000375 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000376
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000377 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000378 let Inst{11} = SPR{4};
379 let Inst{12} = SPR{3};
380 let Inst{13} = SPR{2};
381 let Inst{14} = SPR{1};
382 let Inst{15} = SPR{0};
383 let Inst{16} = SPR{9};
384 let Inst{17} = SPR{8};
385 let Inst{18} = SPR{7};
386 let Inst{19} = SPR{6};
387 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000388 let Inst{21-30} = xo;
389 let Inst{31} = 0;
390}
391
Chris Lattnerd790d222005-04-19 04:40:07 +0000392class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000393 dag OL, string asmstr, InstrItinClass itin>
394 : XFXForm_1<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000395 let SPR = spr;
396}
397
Jim Laskey74ab9962005-10-19 19:51:16 +0000398class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
399 InstrItinClass itin>
400 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000401 bits<5> RT;
402
403 let Inst{6-10} = RT;
404 let Inst{11-20} = 0;
405 let Inst{21-30} = xo;
406 let Inst{31} = 0;
407}
408
Jim Laskey74ab9962005-10-19 19:51:16 +0000409class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
410 InstrItinClass itin>
411 : I<opcode, OL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000412 bits<8> FXM;
413 bits<5> ST;
414
415 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000416 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000417 let Inst{12-19} = FXM;
418 let Inst{20} = 0;
419 let Inst{21-30} = xo;
420 let Inst{31} = 0;
421}
422
Jim Laskey74ab9962005-10-19 19:51:16 +0000423class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
424 InstrItinClass itin>
425 : I<opcode, OL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000426 bits<5> ST;
427 bits<8> FXM;
428
429 let Inst{6-10} = ST;
430 let Inst{11} = 1;
431 let Inst{12-19} = FXM;
432 let Inst{20} = 0;
433 let Inst{21-30} = xo;
434 let Inst{31} = 0;
435}
436
Jim Laskey74ab9962005-10-19 19:51:16 +0000437class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
438 InstrItinClass itin>
439 : XFXForm_1<opcode, xo, OL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000440
Nate Begeman143cf942004-08-30 02:28:06 +0000441class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000442 dag OL, string asmstr, InstrItinClass itin>
443 : XFXForm_7<opcode, xo, OL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000444 let SPR = spr;
445}
446
Nate Begeman765cb5f2004-08-13 02:19:26 +0000447// 1.7.10 XS-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000448class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
449 InstrItinClass itin>
450 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000451 bits<5> RS;
452 bits<5> A;
453 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000454
Chris Lattnerf9172e12005-04-19 05:15:18 +0000455 bit RC = 0; // set by isDOT
456
Nate Begeman765cb5f2004-08-13 02:19:26 +0000457 let Inst{6-10} = RS;
458 let Inst{11-15} = A;
459 let Inst{16-20} = SH{1-5};
460 let Inst{21-29} = xo;
461 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000462 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000463}
464
Misha Brukman5295e1d2004-08-09 17:24:04 +0000465// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000466class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000467 InstrItinClass itin, list<dag> pattern>
468 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000469 bits<5> RT;
470 bits<5> RA;
471 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000472
Chris Lattner3a1002d2005-09-02 21:18:00 +0000473 let Pattern = pattern;
474
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000475 bit RC = 0; // set by isDOT
476
Misha Brukman5295e1d2004-08-09 17:24:04 +0000477 let Inst{6-10} = RT;
478 let Inst{11-15} = RA;
479 let Inst{16-20} = RB;
480 let Inst{21} = oe;
481 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000482 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000483}
484
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000485class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Jim Laskey74ab9962005-10-19 19:51:16 +0000486 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
487 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000488 let RB = 0;
489}
490
491// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000492class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000493 InstrItinClass itin, list<dag> pattern>
494 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000495 bits<5> FRT;
496 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000497 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000498 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000499
Chris Lattner027a2672005-09-29 23:34:24 +0000500 let Pattern = pattern;
501
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000502 bit RC = 0; // set by isDOT
503
Misha Brukman5295e1d2004-08-09 17:24:04 +0000504 let Inst{6-10} = FRT;
505 let Inst{11-15} = FRA;
506 let Inst{16-20} = FRB;
507 let Inst{21-25} = FRC;
508 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000509 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000510}
511
Jim Laskey74ab9962005-10-19 19:51:16 +0000512class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
513 InstrItinClass itin, list<dag> pattern>
514 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000515 let FRC = 0;
516}
517
Jim Laskey74ab9962005-10-19 19:51:16 +0000518class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
519 InstrItinClass itin, list<dag> pattern>
520 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000521 let FRB = 0;
522}
523
Misha Brukman5295e1d2004-08-09 17:24:04 +0000524// 1.7.13 M-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000525class MForm_1<bits<6> opcode, dag OL, string asmstr,
526 InstrItinClass itin, list<dag> pattern>
527 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000528 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000529 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000530 bits<5> RB;
531 bits<5> MB;
532 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000533
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000534 let Pattern = pattern;
535
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000536 bit RC = 0; // set by isDOT
537
Misha Brukman5295e1d2004-08-09 17:24:04 +0000538 let Inst{6-10} = RS;
539 let Inst{11-15} = RA;
540 let Inst{16-20} = RB;
541 let Inst{21-25} = MB;
542 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000543 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000544}
545
Jim Laskey74ab9962005-10-19 19:51:16 +0000546class MForm_2<bits<6> opcode, dag OL, string asmstr,
547 InstrItinClass itin, list<dag> pattern>
548 : MForm_1<opcode, OL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000549}
550
Nate Begeman765cb5f2004-08-13 02:19:26 +0000551// 1.7.14 MD-Form
Jim Laskey74ab9962005-10-19 19:51:16 +0000552class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
553 InstrItinClass itin, list<dag> pattern>
554 : I<opcode, OL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000555 bits<5> RS;
556 bits<5> RA;
557 bits<6> SH;
558 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000559
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000560 let Pattern = pattern;
561
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000562 bit RC = 0; // set by isDOT
563
Nate Begeman765cb5f2004-08-13 02:19:26 +0000564 let Inst{6-10} = RS;
565 let Inst{11-15} = RA;
566 let Inst{16-20} = SH{1-5};
567 let Inst{21-26} = MBE;
568 let Inst{27-29} = xo;
569 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000570 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000571}
572
Nate Begeman8492fd32005-11-23 05:29:52 +0000573// E-1 VA-Form
574class VAForm_1<bits<6> xo, dag OL, string asmstr,
575 InstrItinClass itin, list<dag> pattern>
576 : I<4, OL, asmstr, itin> {
577 bits<5> VD;
578 bits<5> VA;
579 bits<5> VB;
580 bits<5> VC;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000581
582 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000583
584 let Inst{6-10} = VD;
585 let Inst{11-15} = VA;
586 let Inst{16-20} = VB;
587 let Inst{21-25} = VC;
588 let Inst{26-31} = xo;
589}
590
591// E-2 VX-Form
592class VXForm_1<bits<11> xo, dag OL, string asmstr,
593 InstrItinClass itin, list<dag> pattern>
594 : I<4, OL, asmstr, itin> {
595 bits<5> VD;
596 bits<5> VA;
597 bits<5> VB;
598
Nate Begeman11fd6b22005-11-26 22:39:34 +0000599 let Pattern = pattern;
600
Nate Begeman8492fd32005-11-23 05:29:52 +0000601 let Inst{6-10} = VD;
602 let Inst{11-15} = VA;
603 let Inst{16-20} = VB;
604 let Inst{21-31} = xo;
605}
606
Nate Begeman40f081d2005-12-14 00:34:09 +0000607class VXForm_setzero<bits<11> xo, dag OL, string asmstr,
608 InstrItinClass itin, list<dag> pattern>
609 : VXForm_1<xo, OL, asmstr, itin, pattern> {
610 let VA = VD;
611 let VB = VD;
612}
613
614
Nate Begemanc1381182005-11-29 08:04:45 +0000615class VXForm_2<bits<11> xo, dag OL, string asmstr,
616 InstrItinClass itin, list<dag> pattern>
617 : I<4, OL, asmstr, itin> {
618 bits<5> VD;
619 bits<5> VB;
620
621 let Pattern = pattern;
622
623 let Inst{6-10} = VD;
624 let Inst{11-15} = 0;
625 let Inst{16-20} = VB;
626 let Inst{21-31} = xo;
627}
628
Nate Begeman8492fd32005-11-23 05:29:52 +0000629// E-4 VXR-Form
630class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
631 InstrItinClass itin, list<dag> pattern>
632 : I<4, OL, asmstr, itin> {
633 bits<5> VD;
634 bits<5> VA;
635 bits<5> VB;
636
Nate Begeman11fd6b22005-11-26 22:39:34 +0000637 let Pattern = pattern;
638
Nate Begeman8492fd32005-11-23 05:29:52 +0000639 let Inst{6-10} = VD;
640 let Inst{11-15} = VA;
641 let Inst{16-20} = VB;
642 let Inst{21} = rc;
643 let Inst{22-31} = xo;
644}
645
Misha Brukman6b21bde2004-08-02 21:56:35 +0000646//===----------------------------------------------------------------------===//
Chris Lattnerb439dad2005-10-25 20:58:43 +0000647class Pseudo<dag OL, string asmstr, list<dag> pattern>
Chris Lattner12405742006-01-27 01:46:15 +0000648 : I<0, OL, asmstr, NoItinerary> {
Nate Begeman61738782004-09-02 08:13:00 +0000649 let PPC64 = 0;
650 let VMX = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000651 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000652 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000653}