blob: 320bd7bae38adff101b7943b81d4b41b3bbb1e4f [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
13class Format<bits<5> val> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000014 bits<5> Value = val;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000015}
16
17def Pseudo: Format<0>;
18def Gpr : Format<1>;
19def Gpr0 : Format<2>;
20def Simm16 : Format<3>;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000021def PCRelimm24 : Format<5>;
22def Imm24 : Format<6>;
23def Imm5 : Format<7>;
24def PCRelimm14 : Format<8>;
25def Imm14 : Format<9>;
26def Imm2 : Format<10>;
27def Crf : Format<11>;
28def Imm3 : Format<12>;
29def Imm1 : Format<13>;
30def Fpr : Format<14>;
31def Imm4 : Format<15>;
32def Imm8 : Format<16>;
33def Disimm16 : Format<17>;
34def Disimm14 : Format<18>;
35def Spr : Format<19>;
36def Sgr : Format<20>;
37def Imm15 : Format<21>;
38def Vpr : Format<22>;
Nate Begeman765cb5f2004-08-13 02:19:26 +000039def Imm6 : Format<23>;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000040
Misha Brukman6b21bde2004-08-02 21:56:35 +000041//===----------------------------------------------------------------------===//
42//
43// PowerPC instruction formats
Misha Brukmancd4f51b2004-08-02 16:54:54 +000044
Chris Lattner5b78da42005-04-19 05:05:22 +000045class I<bits<6> opcode, dag OL, string asmstr> : Instruction {
Misha Brukman6b21bde2004-08-02 21:56:35 +000046 field bits<32> Inst;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000047
Chris Lattner5b78da42005-04-19 05:05:22 +000048 bit PPC64 = 0; // Default value, override with isPPC64
49 bit VMX = 0; // Default value, override with isVMX
Misha Brukmancd4f51b2004-08-02 16:54:54 +000050
Nate Begeman4bfceb12004-09-04 05:00:00 +000051 let Name = "";
Misha Brukmandad438b2004-08-10 22:47:03 +000052 let Namespace = "PPC";
Misha Brukman5295e1d2004-08-09 17:24:04 +000053 let Inst{0-5} = opcode;
Nate Begeman4bfceb12004-09-04 05:00:00 +000054 let OperandList = OL;
55 let AsmString = asmstr;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000056}
57
Misha Brukman5295e1d2004-08-09 17:24:04 +000058// 1.7.1 I-Form
Chris Lattner116a9e52005-04-19 05:00:59 +000059class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +000060 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000061 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000062
Misha Brukman5295e1d2004-08-09 17:24:04 +000063 let Inst{6-29} = LI;
64 let Inst{30} = aa;
65 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000066}
67
Misha Brukman5295e1d2004-08-09 17:24:04 +000068// 1.7.2 B-Form
Nate Begeman7b809f52005-08-26 04:11:42 +000069class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL,
70 string asmstr>
71 : I<opcode, OL, asmstr> {
72 bits<3> CR;
Misha Brukman189f3dc2004-10-14 05:55:37 +000073 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000074
Nate Begeman7b809f52005-08-26 04:11:42 +000075 let Inst{6-10} = bo;
76 let Inst{11-13} = CR;
77 let Inst{14-15} = bicode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000078 let Inst{16-29} = BD;
79 let Inst{30} = aa;
80 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000081}
82
Misha Brukman5295e1d2004-08-09 17:24:04 +000083// 1.7.4 D-Form
Chris Lattner2d8032b2005-09-08 17:33:10 +000084class DForm_base<bits<6> opcode, dag OL, string asmstr, list<dag> pattern>
85 : I<opcode, OL, asmstr> {
86 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000087 bits<5> A;
88 bits<5> B;
89 bits<16> C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000090
Misha Brukman6b21bde2004-08-02 21:56:35 +000091 let Inst{6-10} = A;
92 let Inst{11-15} = B;
93 let Inst{16-31} = C;
94}
95
Chris Lattner2d8032b2005-09-08 17:33:10 +000096class DForm_1<bits<6> opcode, dag OL, string asmstr>
97 : I<opcode, OL, asmstr> {
Misha Brukman15b0fb52004-10-23 06:08:38 +000098 bits<5> A;
99 bits<16> C;
100 bits<5> B;
101
Misha Brukman15b0fb52004-10-23 06:08:38 +0000102 let Inst{6-10} = A;
103 let Inst{11-15} = B;
104 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000105}
106
Chris Lattner2d8032b2005-09-08 17:33:10 +0000107class DForm_2<bits<6> opcode, dag OL, string asmstr, list<dag> pattern>
108 : DForm_base<opcode, OL, asmstr, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000109
Chris Lattner2d8032b2005-09-08 17:33:10 +0000110class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, list<dag> pattern>
Chris Lattner5b78da42005-04-19 05:05:22 +0000111 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000112 bits<5> A;
113 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +0000114
Chris Lattner2d8032b2005-09-08 17:33:10 +0000115 let Pattern = pattern;
116
Nate Begeman4bfceb12004-09-04 05:00:00 +0000117 let Inst{6-10} = A;
118 let Inst{11-15} = 0;
119 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000120}
121
122// Currently we make the use/def reg distinction in ISel, not tablegen
Chris Lattnerb2367e32005-04-19 04:59:28 +0000123class DForm_3<bits<6> opcode, dag OL, string asmstr>
124 : DForm_1<opcode, OL, asmstr>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000125
Chris Lattner76cb0062005-09-08 17:40:49 +0000126class DForm_4<bits<6> opcode, dag OL, string asmstr, list<dag> pattern>
127 : I<opcode, OL, asmstr> {
Chris Lattner022e2712004-11-24 02:15:41 +0000128 bits<5> B;
129 bits<5> A;
130 bits<16> C;
131
Chris Lattner76cb0062005-09-08 17:40:49 +0000132 let Pattern = pattern;
133
Chris Lattner022e2712004-11-24 02:15:41 +0000134 let Inst{6-10} = A;
135 let Inst{11-15} = B;
136 let Inst{16-31} = C;
137}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000138
Chris Lattnerb2367e32005-04-19 04:59:28 +0000139class DForm_4_zero<bits<6> opcode, dag OL, string asmstr>
140 : DForm_1<opcode, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000141 let A = 0;
142 let B = 0;
143 let C = 0;
144}
145
Chris Lattner5b78da42005-04-19 05:05:22 +0000146class DForm_5<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000147 bits<3> BF;
148 bits<1> L;
149 bits<5> RA;
150 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000151
Misha Brukman5295e1d2004-08-09 17:24:04 +0000152 let Inst{6-8} = BF;
153 let Inst{9} = 0;
154 let Inst{10} = L;
155 let Inst{11-15} = RA;
156 let Inst{16-31} = I;
157}
158
Chris Lattnerb2367e32005-04-19 04:59:28 +0000159class DForm_5_ext<bits<6> opcode, dag OL, string asmstr>
160 : DForm_5<opcode, OL, asmstr> {
161 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000162}
163
Chris Lattnerb2367e32005-04-19 04:59:28 +0000164class DForm_6<bits<6> opcode, dag OL, string asmstr>
165 : DForm_5<opcode, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000166
Chris Lattnerb2367e32005-04-19 04:59:28 +0000167class DForm_6_ext<bits<6> opcode, dag OL, string asmstr>
168 : DForm_6<opcode, OL, asmstr> {
169 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000170}
171
Chris Lattnerb2367e32005-04-19 04:59:28 +0000172class DForm_8<bits<6> opcode, dag OL, string asmstr>
173 : DForm_1<opcode, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000174}
175
Chris Lattnerb2367e32005-04-19 04:59:28 +0000176class DForm_9<bits<6> opcode, dag OL, string asmstr>
177 : DForm_1<opcode, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000178}
179
Misha Brukman28beda92004-08-11 15:54:36 +0000180// 1.7.5 DS-Form
Chris Lattnerb2367e32005-04-19 04:59:28 +0000181class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000182 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000183 bits<5> RST;
184 bits<14> DS;
185 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000186
Misha Brukman28beda92004-08-11 15:54:36 +0000187 let Inst{6-10} = RST;
188 let Inst{11-15} = RA;
189 let Inst{16-29} = DS;
190 let Inst{30-31} = xo;
191}
192
Chris Lattnerb2367e32005-04-19 04:59:28 +0000193class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr>
194 : DSForm_1<opcode, xo, OL, asmstr>;
Misha Brukman28beda92004-08-11 15:54:36 +0000195
Misha Brukman5295e1d2004-08-09 17:24:04 +0000196// 1.7.6 X-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000197class XForm_base_r3xo<bits<6> opcode, bits<10> xo,
Chris Lattner5b78da42005-04-19 05:05:22 +0000198 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000199 bits<5> RST;
200 bits<5> A;
201 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000202
Chris Lattnerf9172e12005-04-19 05:15:18 +0000203 bit RC = 0; // set by isDOT
204
Misha Brukman28beda92004-08-11 15:54:36 +0000205 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000206 let Inst{11-15} = A;
207 let Inst{16-20} = B;
208 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000209 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000210}
211
Chris Lattner130888ad2004-11-24 03:52:02 +0000212// This is the same as XForm_base_r3xo, but the first two operands are swapped
213// when code is emitted.
214class XForm_base_r3xo_swapped
Chris Lattnerf9172e12005-04-19 05:15:18 +0000215 <bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000216 : I<opcode, OL, asmstr> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000217 bits<5> A;
218 bits<5> RST;
219 bits<5> B;
220
Chris Lattnerf9172e12005-04-19 05:15:18 +0000221 bit RC = 0; // set by isDOT
222
Chris Lattner130888ad2004-11-24 03:52:02 +0000223 let Inst{6-10} = RST;
224 let Inst{11-15} = A;
225 let Inst{16-20} = B;
226 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000227 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000228}
229
Nate Begeman765cb5f2004-08-13 02:19:26 +0000230
Chris Lattner15709c22005-04-19 04:51:30 +0000231class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000232 : XForm_base_r3xo<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000233
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000234class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
235 list<dag> pattern>
236 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
237 let Pattern = pattern;
238}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000239
Chris Lattner15709c22005-04-19 04:51:30 +0000240class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000241 : XForm_base_r3xo<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000242
Chris Lattnerf9172e12005-04-19 05:15:18 +0000243class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
244 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000245}
246
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000247class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
248 list<dag> pattern>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000249 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000250 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000251 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000252}
253
Chris Lattner15709c22005-04-19 04:51:30 +0000254class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000255 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000256 bits<3> BF;
257 bits<1> L;
258 bits<5> RA;
259 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000260
Misha Brukman5295e1d2004-08-09 17:24:04 +0000261 let Inst{6-8} = BF;
262 let Inst{9} = 0;
263 let Inst{10} = L;
264 let Inst{11-15} = RA;
265 let Inst{16-20} = RB;
266 let Inst{21-30} = xo;
267 let Inst{31} = 0;
268}
269
Chris Lattner15709c22005-04-19 04:51:30 +0000270class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
271 : XForm_16<opcode, xo, OL, asmstr> {
272 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000273}
274
Chris Lattner15709c22005-04-19 04:51:30 +0000275class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000276 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000277 bits<3> BF;
278 bits<5> FRA;
279 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000280
Misha Brukman5295e1d2004-08-09 17:24:04 +0000281 let Inst{6-8} = BF;
282 let Inst{9-10} = 0;
283 let Inst{11-15} = FRA;
284 let Inst{16-20} = FRB;
285 let Inst{21-30} = xo;
286 let Inst{31} = 0;
287}
288
Chris Lattner15709c22005-04-19 04:51:30 +0000289class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000290 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000291}
292
Chris Lattnerf9172e12005-04-19 05:15:18 +0000293class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
294 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000295 let A = 0;
296}
297
Chris Lattner15709c22005-04-19 04:51:30 +0000298class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000299 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000300}
301
302// 1.7.7 XL-Form
Chris Lattner15709c22005-04-19 04:51:30 +0000303class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000304 : I<opcode, OL, asmstr> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000305 bits<3> CRD;
306 bits<2> CRDb;
307 bits<3> CRA;
308 bits<2> CRAb;
309 bits<3> CRB;
310 bits<2> CRBb;
311
312 let Inst{6-8} = CRD;
313 let Inst{9-10} = CRDb;
314 let Inst{11-13} = CRA;
315 let Inst{14-15} = CRAb;
316 let Inst{16-18} = CRB;
317 let Inst{19-20} = CRBb;
318 let Inst{21-30} = xo;
319 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000320}
321
Chris Lattner15709c22005-04-19 04:51:30 +0000322class XLForm_2<bits<6> opcode, bits<10> xo, bit lk,
Chris Lattner5b78da42005-04-19 05:05:22 +0000323 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000324 bits<5> BO;
325 bits<5> BI;
326 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000327
Misha Brukman5295e1d2004-08-09 17:24:04 +0000328 let Inst{6-10} = BO;
329 let Inst{11-15} = BI;
330 let Inst{16-18} = 0;
331 let Inst{19-20} = BH;
332 let Inst{21-30} = xo;
333 let Inst{31} = lk;
334}
335
Nate Begeman61738782004-09-02 08:13:00 +0000336class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,
Chris Lattner15709c22005-04-19 04:51:30 +0000337 bits<5> bi, bit lk, dag OL, string asmstr>
338 : XLForm_2<opcode, xo, lk, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000339 let BO = bo;
340 let BI = bi;
341 let BH = 0;
342}
343
Chris Lattner15709c22005-04-19 04:51:30 +0000344class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000345 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000346 bits<3> BF;
347 bits<3> BFA;
348
349 let Inst{6-8} = BF;
350 let Inst{9-10} = 0;
351 let Inst{11-13} = BFA;
352 let Inst{14-15} = 0;
353 let Inst{16-20} = 0;
354 let Inst{21-30} = xo;
355 let Inst{31} = 0;
356}
357
Misha Brukman5295e1d2004-08-09 17:24:04 +0000358// 1.7.8 XFX-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000359class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000360 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000361 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000362 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000363
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000364 let Inst{6-10} = RT;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000365 let Inst{11-20} = SPR;
366 let Inst{21-30} = xo;
367 let Inst{31} = 0;
368}
369
Chris Lattnerd790d222005-04-19 04:40:07 +0000370class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
371 dag OL, string asmstr>
372 : XFXForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000373 let SPR = spr;
374}
375
Chris Lattner5b78da42005-04-19 05:05:22 +0000376class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
377 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000378 bits<5> RT;
379
380 let Inst{6-10} = RT;
381 let Inst{11-20} = 0;
382 let Inst{21-30} = xo;
383 let Inst{31} = 0;
384}
385
Nate Begeman9a838672005-08-08 20:04:52 +0000386class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
387 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000388 bits<8> FXM;
389 bits<5> ST;
390
391 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000392 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000393 let Inst{12-19} = FXM;
394 let Inst{20} = 0;
395 let Inst{21-30} = xo;
396 let Inst{31} = 0;
397}
398
Nate Begeman9a838672005-08-08 20:04:52 +0000399class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
400 : I<opcode, OL, asmstr> {
401 bits<5> ST;
402 bits<8> FXM;
403
404 let Inst{6-10} = ST;
405 let Inst{11} = 1;
406 let Inst{12-19} = FXM;
407 let Inst{20} = 0;
408 let Inst{21-30} = xo;
409 let Inst{31} = 0;
410}
411
412
Chris Lattnerd790d222005-04-19 04:40:07 +0000413class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
414 : XFXForm_1<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000415
Nate Begeman143cf942004-08-30 02:28:06 +0000416class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Chris Lattnerd790d222005-04-19 04:40:07 +0000417 dag OL, string asmstr>
418 : XFXForm_7<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000419 let SPR = spr;
420}
421
Nate Begeman765cb5f2004-08-13 02:19:26 +0000422// 1.7.10 XS-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000423class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000424 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000425 bits<5> RS;
426 bits<5> A;
427 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000428
Chris Lattnerf9172e12005-04-19 05:15:18 +0000429 bit RC = 0; // set by isDOT
430
Nate Begeman765cb5f2004-08-13 02:19:26 +0000431 let Inst{6-10} = RS;
432 let Inst{11-15} = A;
433 let Inst{16-20} = SH{1-5};
434 let Inst{21-29} = xo;
435 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000436 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000437}
438
Misha Brukman5295e1d2004-08-09 17:24:04 +0000439// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000440class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
441 list<dag> pattern>
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000442 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000443 bits<5> RT;
444 bits<5> RA;
445 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000446
Chris Lattner3a1002d2005-09-02 21:18:00 +0000447 let Pattern = pattern;
448
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000449 bit RC = 0; // set by isDOT
450
Misha Brukman5295e1d2004-08-09 17:24:04 +0000451 let Inst{6-10} = RT;
452 let Inst{11-15} = RA;
453 let Inst{16-20} = RB;
454 let Inst{21} = oe;
455 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000456 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000457}
458
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000459class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Chris Lattnercf9b0e62005-09-08 17:01:54 +0000460 dag OL, string asmstr, list<dag> pattern>
461 : XOForm_1<opcode, xo, oe, OL, asmstr, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000462 let RB = 0;
463}
464
465// 1.7.12 A-Form
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000466class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000467 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000468 bits<5> FRT;
469 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000470 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000471 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000472
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} = FRT;
476 let Inst{11-15} = FRA;
477 let Inst{16-20} = FRB;
478 let Inst{21-25} = FRC;
479 let Inst{26-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 AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr>
484 : AForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000485 let FRC = 0;
486}
487
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000488class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr>
489 : AForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000490 let FRB = 0;
491}
492
Misha Brukman5295e1d2004-08-09 17:24:04 +0000493// 1.7.13 M-Form
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000494class MForm_1<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000495 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000496 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000497 bits<5> RB;
498 bits<5> MB;
499 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000500
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000501 bit RC = 0; // set by isDOT
502
Misha Brukman5295e1d2004-08-09 17:24:04 +0000503 let Inst{6-10} = RS;
504 let Inst{11-15} = RA;
505 let Inst{16-20} = RB;
506 let Inst{21-25} = MB;
507 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000508 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000509}
510
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000511class MForm_2<bits<6> opcode, dag OL, string asmstr>
512 : MForm_1<opcode, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000513}
514
Nate Begeman765cb5f2004-08-13 02:19:26 +0000515// 1.7.14 MD-Form
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000516class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr>
517 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000518 bits<5> RS;
519 bits<5> RA;
520 bits<6> SH;
521 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000522
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000523 bit RC = 0; // set by isDOT
524
Nate Begeman765cb5f2004-08-13 02:19:26 +0000525 let Inst{6-10} = RS;
526 let Inst{11-15} = RA;
527 let Inst{16-20} = SH{1-5};
528 let Inst{21-26} = MBE;
529 let Inst{27-29} = xo;
530 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000531 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000532}
533
Misha Brukman6b21bde2004-08-02 21:56:35 +0000534//===----------------------------------------------------------------------===//
535
Chris Lattner5b78da42005-04-19 05:05:22 +0000536class Pseudo<dag OL, string asmstr> : I<0, OL, asmstr> {
Nate Begeman61738782004-09-02 08:13:00 +0000537 let PPC64 = 0;
538 let VMX = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000539
Nate Begeman61738782004-09-02 08:13:00 +0000540 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000541}