blob: 72fa0eb13431ec60f0953287d36b6509c3bc636d [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 Lattner027a2672005-09-29 23:34:24 +0000243class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr, list<dag> pt>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000244 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
Chris Lattner027a2672005-09-29 23:34:24 +0000245 let Pattern = pt;
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,
249 list<dag> pattern>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000250 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
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
Chris Lattner15709c22005-04-19 04:51:30 +0000255class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000256 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000257 bits<3> BF;
258 bits<1> L;
259 bits<5> RA;
260 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000261
Misha Brukman5295e1d2004-08-09 17:24:04 +0000262 let Inst{6-8} = BF;
263 let Inst{9} = 0;
264 let Inst{10} = L;
265 let Inst{11-15} = RA;
266 let Inst{16-20} = RB;
267 let Inst{21-30} = xo;
268 let Inst{31} = 0;
269}
270
Chris Lattner15709c22005-04-19 04:51:30 +0000271class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
272 : XForm_16<opcode, xo, OL, asmstr> {
273 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000274}
275
Chris Lattner15709c22005-04-19 04:51:30 +0000276class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000277 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000278 bits<3> BF;
279 bits<5> FRA;
280 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000281
Misha Brukman5295e1d2004-08-09 17:24:04 +0000282 let Inst{6-8} = BF;
283 let Inst{9-10} = 0;
284 let Inst{11-15} = FRA;
285 let Inst{16-20} = FRB;
286 let Inst{21-30} = xo;
287 let Inst{31} = 0;
288}
289
Chris Lattner15709c22005-04-19 04:51:30 +0000290class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000291 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000292}
293
Chris Lattner027a2672005-09-29 23:34:24 +0000294class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr, list<dag> pt>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000295 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000296 let A = 0;
Chris Lattner027a2672005-09-29 23:34:24 +0000297 let Pattern = pt;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000298}
299
Chris Lattner15709c22005-04-19 04:51:30 +0000300class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000301 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000302}
303
304// 1.7.7 XL-Form
Chris Lattner15709c22005-04-19 04:51:30 +0000305class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000306 : I<opcode, OL, asmstr> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000307 bits<3> CRD;
308 bits<2> CRDb;
309 bits<3> CRA;
310 bits<2> CRAb;
311 bits<3> CRB;
312 bits<2> CRBb;
313
314 let Inst{6-8} = CRD;
315 let Inst{9-10} = CRDb;
316 let Inst{11-13} = CRA;
317 let Inst{14-15} = CRAb;
318 let Inst{16-18} = CRB;
319 let Inst{19-20} = CRBb;
320 let Inst{21-30} = xo;
321 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000322}
323
Chris Lattner15709c22005-04-19 04:51:30 +0000324class XLForm_2<bits<6> opcode, bits<10> xo, bit lk,
Chris Lattner5b78da42005-04-19 05:05:22 +0000325 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000326 bits<5> BO;
327 bits<5> BI;
328 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000329
Misha Brukman5295e1d2004-08-09 17:24:04 +0000330 let Inst{6-10} = BO;
331 let Inst{11-15} = BI;
332 let Inst{16-18} = 0;
333 let Inst{19-20} = BH;
334 let Inst{21-30} = xo;
335 let Inst{31} = lk;
336}
337
Nate Begeman61738782004-09-02 08:13:00 +0000338class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,
Chris Lattner15709c22005-04-19 04:51:30 +0000339 bits<5> bi, bit lk, dag OL, string asmstr>
340 : XLForm_2<opcode, xo, lk, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000341 let BO = bo;
342 let BI = bi;
343 let BH = 0;
344}
345
Chris Lattner15709c22005-04-19 04:51:30 +0000346class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000347 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000348 bits<3> BF;
349 bits<3> BFA;
350
351 let Inst{6-8} = BF;
352 let Inst{9-10} = 0;
353 let Inst{11-13} = BFA;
354 let Inst{14-15} = 0;
355 let Inst{16-20} = 0;
356 let Inst{21-30} = xo;
357 let Inst{31} = 0;
358}
359
Misha Brukman5295e1d2004-08-09 17:24:04 +0000360// 1.7.8 XFX-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000361class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000362 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000363 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000364 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000365
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000366 let Inst{6-10} = RT;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000367 let Inst{11-20} = SPR;
368 let Inst{21-30} = xo;
369 let Inst{31} = 0;
370}
371
Chris Lattnerd790d222005-04-19 04:40:07 +0000372class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
373 dag OL, string asmstr>
374 : XFXForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000375 let SPR = spr;
376}
377
Chris Lattner5b78da42005-04-19 05:05:22 +0000378class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
379 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000380 bits<5> RT;
381
382 let Inst{6-10} = RT;
383 let Inst{11-20} = 0;
384 let Inst{21-30} = xo;
385 let Inst{31} = 0;
386}
387
Nate Begeman9a838672005-08-08 20:04:52 +0000388class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
389 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000390 bits<8> FXM;
391 bits<5> ST;
392
393 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000394 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000395 let Inst{12-19} = FXM;
396 let Inst{20} = 0;
397 let Inst{21-30} = xo;
398 let Inst{31} = 0;
399}
400
Nate Begeman9a838672005-08-08 20:04:52 +0000401class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
402 : I<opcode, OL, asmstr> {
403 bits<5> ST;
404 bits<8> FXM;
405
406 let Inst{6-10} = ST;
407 let Inst{11} = 1;
408 let Inst{12-19} = FXM;
409 let Inst{20} = 0;
410 let Inst{21-30} = xo;
411 let Inst{31} = 0;
412}
413
414
Chris Lattnerd790d222005-04-19 04:40:07 +0000415class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
416 : XFXForm_1<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000417
Nate Begeman143cf942004-08-30 02:28:06 +0000418class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Chris Lattnerd790d222005-04-19 04:40:07 +0000419 dag OL, string asmstr>
420 : XFXForm_7<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000421 let SPR = spr;
422}
423
Nate Begeman765cb5f2004-08-13 02:19:26 +0000424// 1.7.10 XS-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000425class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000426 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000427 bits<5> RS;
428 bits<5> A;
429 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000430
Chris Lattnerf9172e12005-04-19 05:15:18 +0000431 bit RC = 0; // set by isDOT
432
Nate Begeman765cb5f2004-08-13 02:19:26 +0000433 let Inst{6-10} = RS;
434 let Inst{11-15} = A;
435 let Inst{16-20} = SH{1-5};
436 let Inst{21-29} = xo;
437 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000438 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000439}
440
Misha Brukman5295e1d2004-08-09 17:24:04 +0000441// 1.7.11 XO-Form
Chris Lattner3a1002d2005-09-02 21:18:00 +0000442class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
443 list<dag> pattern>
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000444 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000445 bits<5> RT;
446 bits<5> RA;
447 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000448
Chris Lattner3a1002d2005-09-02 21:18:00 +0000449 let Pattern = pattern;
450
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000451 bit RC = 0; // set by isDOT
452
Misha Brukman5295e1d2004-08-09 17:24:04 +0000453 let Inst{6-10} = RT;
454 let Inst{11-15} = RA;
455 let Inst{16-20} = RB;
456 let Inst{21} = oe;
457 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000458 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000459}
460
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000461class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Chris Lattnercf9b0e62005-09-08 17:01:54 +0000462 dag OL, string asmstr, list<dag> pattern>
463 : XOForm_1<opcode, xo, oe, OL, asmstr, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000464 let RB = 0;
465}
466
467// 1.7.12 A-Form
Chris Lattner027a2672005-09-29 23:34:24 +0000468class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
469 list<dag> pattern>
Chris Lattner5b78da42005-04-19 05:05:22 +0000470 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000471 bits<5> FRT;
472 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000473 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000474 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000475
Chris Lattner027a2672005-09-29 23:34:24 +0000476 let Pattern = pattern;
477
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000478 bit RC = 0; // set by isDOT
479
Misha Brukman5295e1d2004-08-09 17:24:04 +0000480 let Inst{6-10} = FRT;
481 let Inst{11-15} = FRA;
482 let Inst{16-20} = FRB;
483 let Inst{21-25} = FRC;
484 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000485 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000486}
487
Chris Lattner027a2672005-09-29 23:34:24 +0000488class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr, list<dag> pat>
489 : AForm_1<opcode, xo, OL, asmstr, pat> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000490 let FRC = 0;
491}
492
Chris Lattner027a2672005-09-29 23:34:24 +0000493class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr, list<dag> pat>
494 : AForm_1<opcode, xo, OL, asmstr, pat> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000495 let FRB = 0;
496}
497
Misha Brukman5295e1d2004-08-09 17:24:04 +0000498// 1.7.13 M-Form
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000499class MForm_1<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000500 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000501 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000502 bits<5> RB;
503 bits<5> MB;
504 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000505
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000506 bit RC = 0; // set by isDOT
507
Misha Brukman5295e1d2004-08-09 17:24:04 +0000508 let Inst{6-10} = RS;
509 let Inst{11-15} = RA;
510 let Inst{16-20} = RB;
511 let Inst{21-25} = MB;
512 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000513 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000514}
515
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000516class MForm_2<bits<6> opcode, dag OL, string asmstr>
517 : MForm_1<opcode, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000518}
519
Nate Begeman765cb5f2004-08-13 02:19:26 +0000520// 1.7.14 MD-Form
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000521class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr>
522 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000523 bits<5> RS;
524 bits<5> RA;
525 bits<6> SH;
526 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000527
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000528 bit RC = 0; // set by isDOT
529
Nate Begeman765cb5f2004-08-13 02:19:26 +0000530 let Inst{6-10} = RS;
531 let Inst{11-15} = RA;
532 let Inst{16-20} = SH{1-5};
533 let Inst{21-26} = MBE;
534 let Inst{27-29} = xo;
535 let Inst{30} = SH{0};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000536 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000537}
538
Misha Brukman6b21bde2004-08-02 21:56:35 +0000539//===----------------------------------------------------------------------===//
540
Chris Lattner5b78da42005-04-19 05:05:22 +0000541class Pseudo<dag OL, string asmstr> : I<0, OL, asmstr> {
Nate Begeman61738782004-09-02 08:13:00 +0000542 let PPC64 = 0;
543 let VMX = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000544
Nate Begeman61738782004-09-02 08:13:00 +0000545 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000546}