blob: 0a68dd44eab5dc9974d5921e6dc2e88360cc24fd [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
Chris Lattner5b78da42005-04-19 05:05:22 +000069class BForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr>
70 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000071 bits<5> BO;
Chris Lattnerb55f7482004-11-24 01:15:19 +000072 bits<3> CRNum;
73 bits<2> BICode;
Misha Brukman189f3dc2004-10-14 05:55:37 +000074 bits<14> BD;
Misha Brukman5295e1d2004-08-09 17:24:04 +000075
Misha Brukman5295e1d2004-08-09 17:24:04 +000076 let Inst{6-10} = BO;
Chris Lattnerb55f7482004-11-24 01:15:19 +000077 let Inst{11-13} = CRNum;
78 let Inst{14-15} = BICode;
Misha Brukman5295e1d2004-08-09 17:24:04 +000079 let Inst{16-29} = BD;
80 let Inst{30} = aa;
81 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000082}
83
Chris Lattnerb55f7482004-11-24 01:15:19 +000084class BForm_ext<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode,
Chris Lattner116a9e52005-04-19 05:00:59 +000085 dag OL, string asmstr>
86 : BForm<opcode, aa, lk, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +000087 let BO = bo;
Chris Lattnerb55f7482004-11-24 01:15:19 +000088 let BICode = bicode;
Misha Brukman6b21bde2004-08-02 21:56:35 +000089}
90
Misha Brukman5295e1d2004-08-09 17:24:04 +000091// 1.7.4 D-Form
Chris Lattner5b78da42005-04-19 05:05:22 +000092class DForm_base<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr>{
Misha Brukman189f3dc2004-10-14 05:55:37 +000093 bits<5> A;
94 bits<5> B;
95 bits<16> C;
Misha Brukman6b21bde2004-08-02 21:56:35 +000096
Misha Brukman6b21bde2004-08-02 21:56:35 +000097 let Inst{6-10} = A;
98 let Inst{11-15} = B;
99 let Inst{16-31} = C;
100}
101
Chris Lattner5b78da42005-04-19 05:05:22 +0000102class DForm_1<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman15b0fb52004-10-23 06:08:38 +0000103 bits<5> A;
104 bits<16> C;
105 bits<5> B;
106
Misha Brukman15b0fb52004-10-23 06:08:38 +0000107 let Inst{6-10} = A;
108 let Inst{11-15} = B;
109 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000110}
111
Chris Lattnerb2367e32005-04-19 04:59:28 +0000112class DForm_2<bits<6> opcode, dag OL, string asmstr>
113 : DForm_base<opcode, OL, asmstr>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000114
Chris Lattnerb2367e32005-04-19 04:59:28 +0000115class DForm_2_r0<bits<6> opcode, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000116 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000117 bits<5> A;
118 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +0000119
Nate Begeman4bfceb12004-09-04 05:00:00 +0000120 let Inst{6-10} = A;
121 let Inst{11-15} = 0;
122 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000123}
124
125// Currently we make the use/def reg distinction in ISel, not tablegen
Chris Lattnerb2367e32005-04-19 04:59:28 +0000126class DForm_3<bits<6> opcode, dag OL, string asmstr>
127 : DForm_1<opcode, OL, asmstr>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000128
Chris Lattner5b78da42005-04-19 05:05:22 +0000129class DForm_4<bits<6> opcode, dag OL, string asmstr> : I<opcode, OL, asmstr> {
Chris Lattner022e2712004-11-24 02:15:41 +0000130 bits<5> B;
131 bits<5> A;
132 bits<16> C;
133
134 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 Lattnerf9172e12005-04-19 05:15:18 +0000234class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
235 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000236
Chris Lattner15709c22005-04-19 04:51:30 +0000237class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000238 : XForm_base_r3xo<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000239
Chris Lattnerf9172e12005-04-19 05:15:18 +0000240class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
241 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000242}
243
Chris Lattnerf9172e12005-04-19 05:15:18 +0000244class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
245 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000246 let B = 0;
247}
248
Chris Lattner15709c22005-04-19 04:51:30 +0000249class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000250 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000251 bits<3> BF;
252 bits<1> L;
253 bits<5> RA;
254 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000255
Misha Brukman5295e1d2004-08-09 17:24:04 +0000256 let Inst{6-8} = BF;
257 let Inst{9} = 0;
258 let Inst{10} = L;
259 let Inst{11-15} = RA;
260 let Inst{16-20} = RB;
261 let Inst{21-30} = xo;
262 let Inst{31} = 0;
263}
264
Chris Lattner15709c22005-04-19 04:51:30 +0000265class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
266 : XForm_16<opcode, xo, OL, asmstr> {
267 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000268}
269
Chris Lattner15709c22005-04-19 04:51:30 +0000270class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000271 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000272 bits<3> BF;
273 bits<5> FRA;
274 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000275
Misha Brukman5295e1d2004-08-09 17:24:04 +0000276 let Inst{6-8} = BF;
277 let Inst{9-10} = 0;
278 let Inst{11-15} = FRA;
279 let Inst{16-20} = FRB;
280 let Inst{21-30} = xo;
281 let Inst{31} = 0;
282}
283
Chris Lattner15709c22005-04-19 04:51:30 +0000284class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000285 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000286}
287
Chris Lattnerf9172e12005-04-19 05:15:18 +0000288class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
289 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000290 let A = 0;
291}
292
Chris Lattner15709c22005-04-19 04:51:30 +0000293class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattnerf9172e12005-04-19 05:15:18 +0000294 : XForm_base_r3xo<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000295}
296
297// 1.7.7 XL-Form
Chris Lattner15709c22005-04-19 04:51:30 +0000298class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000299 : I<opcode, OL, asmstr> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000300 bits<3> CRD;
301 bits<2> CRDb;
302 bits<3> CRA;
303 bits<2> CRAb;
304 bits<3> CRB;
305 bits<2> CRBb;
306
307 let Inst{6-8} = CRD;
308 let Inst{9-10} = CRDb;
309 let Inst{11-13} = CRA;
310 let Inst{14-15} = CRAb;
311 let Inst{16-18} = CRB;
312 let Inst{19-20} = CRBb;
313 let Inst{21-30} = xo;
314 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000315}
316
Chris Lattner15709c22005-04-19 04:51:30 +0000317class XLForm_2<bits<6> opcode, bits<10> xo, bit lk,
Chris Lattner5b78da42005-04-19 05:05:22 +0000318 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000319 bits<5> BO;
320 bits<5> BI;
321 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000322
Misha Brukman5295e1d2004-08-09 17:24:04 +0000323 let Inst{6-10} = BO;
324 let Inst{11-15} = BI;
325 let Inst{16-18} = 0;
326 let Inst{19-20} = BH;
327 let Inst{21-30} = xo;
328 let Inst{31} = lk;
329}
330
Nate Begeman61738782004-09-02 08:13:00 +0000331class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,
Chris Lattner15709c22005-04-19 04:51:30 +0000332 bits<5> bi, bit lk, dag OL, string asmstr>
333 : XLForm_2<opcode, xo, lk, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000334 let BO = bo;
335 let BI = bi;
336 let BH = 0;
337}
338
Chris Lattner15709c22005-04-19 04:51:30 +0000339class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000340 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000341 bits<3> BF;
342 bits<3> BFA;
343
344 let Inst{6-8} = BF;
345 let Inst{9-10} = 0;
346 let Inst{11-13} = BFA;
347 let Inst{14-15} = 0;
348 let Inst{16-20} = 0;
349 let Inst{21-30} = xo;
350 let Inst{31} = 0;
351}
352
Misha Brukman5295e1d2004-08-09 17:24:04 +0000353// 1.7.8 XFX-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000354class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000355 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000356 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000357 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000358
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000359 let Inst{6-10} = RT;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000360 let Inst{11-20} = SPR;
361 let Inst{21-30} = xo;
362 let Inst{31} = 0;
363}
364
Chris Lattnerd790d222005-04-19 04:40:07 +0000365class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
366 dag OL, string asmstr>
367 : XFXForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000368 let SPR = spr;
369}
370
Chris Lattner5b78da42005-04-19 05:05:22 +0000371class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
372 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000373 bits<5> RT;
374
375 let Inst{6-10} = RT;
376 let Inst{11-20} = 0;
377 let Inst{21-30} = xo;
378 let Inst{31} = 0;
379}
380
Chris Lattnerd790d222005-04-19 04:40:07 +0000381class XFXForm_5<bits<6> opcode, bit mfcrf, bits<10> xo,
Chris Lattner5b78da42005-04-19 05:05:22 +0000382 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000383 bits<8> FXM;
384 bits<5> ST;
385
386 let Inst{6-10} = ST;
Nate Begeman602a45f2005-04-18 02:43:24 +0000387 let Inst{11} = mfcrf;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000388 let Inst{12-19} = FXM;
389 let Inst{20} = 0;
390 let Inst{21-30} = xo;
391 let Inst{31} = 0;
392}
393
Chris Lattnerd790d222005-04-19 04:40:07 +0000394class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
395 : XFXForm_1<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000396
Nate Begeman143cf942004-08-30 02:28:06 +0000397class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Chris Lattnerd790d222005-04-19 04:40:07 +0000398 dag OL, string asmstr>
399 : XFXForm_7<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000400 let SPR = spr;
401}
402
Nate Begeman765cb5f2004-08-13 02:19:26 +0000403// 1.7.10 XS-Form
Chris Lattnerf9172e12005-04-19 05:15:18 +0000404class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000405 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000406 bits<5> RS;
407 bits<5> A;
408 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000409
Chris Lattnerf9172e12005-04-19 05:15:18 +0000410 bit RC = 0; // set by isDOT
411
Nate Begeman765cb5f2004-08-13 02:19:26 +0000412 let Inst{6-10} = RS;
413 let Inst{11-15} = A;
414 let Inst{16-20} = SH{1-5};
415 let Inst{21-29} = xo;
416 let Inst{30} = SH{0};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000417 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000418}
419
Misha Brukman5295e1d2004-08-09 17:24:04 +0000420// 1.7.11 XO-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000421class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Chris Lattner5b78da42005-04-19 05:05:22 +0000422 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000423 bits<5> RT;
424 bits<5> RA;
425 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000426
Misha Brukman5295e1d2004-08-09 17:24:04 +0000427 let Inst{6-10} = RT;
428 let Inst{11-15} = RA;
429 let Inst{16-20} = RB;
430 let Inst{21} = oe;
431 let Inst{22-30} = xo;
432 let Inst{31} = rc;
433}
434
Chris Lattnerd790d222005-04-19 04:40:07 +0000435class XOForm_1r<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Nate Begeman143cf942004-08-30 02:28:06 +0000436 dag OL, string asmstr>
Chris Lattnerd790d222005-04-19 04:40:07 +0000437 : XOForm_1<opcode, xo, oe, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000438 let Inst{11-15} = RB;
439 let Inst{16-20} = RA;
440}
441
Chris Lattnerd790d222005-04-19 04:40:07 +0000442class XOForm_3<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Nate Begeman143cf942004-08-30 02:28:06 +0000443 dag OL, string asmstr>
Chris Lattnerd790d222005-04-19 04:40:07 +0000444 : XOForm_1<opcode, xo, oe, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000445 let RB = 0;
446}
447
448// 1.7.12 A-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000449class AForm_1<bits<6> opcode, bits<5> xo, bit rc, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000450 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000451 bits<5> FRT;
452 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000453 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000454 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000455
Misha Brukman5295e1d2004-08-09 17:24:04 +0000456 let Inst{6-10} = FRT;
457 let Inst{11-15} = FRA;
458 let Inst{16-20} = FRB;
459 let Inst{21-25} = FRC;
460 let Inst{26-30} = xo;
461 let Inst{31} = rc;
462}
463
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000464class AForm_2<bits<6> opcode, bits<5> xo, bit rc, dag OL, string asmstr>
465 : AForm_1<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000466 let FRC = 0;
467}
468
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000469class AForm_3<bits<6> opcode, bits<5> xo, bit rc, dag OL,
Nate Begeman6cdbd222004-08-29 22:45:13 +0000470 string asmstr>
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000471 : AForm_1<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000472 let FRB = 0;
473}
474
Misha Brukman5295e1d2004-08-09 17:24:04 +0000475// 1.7.13 M-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000476class MForm_1<bits<6> opcode, bit rc, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000477 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000478 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000479 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000480 bits<5> RB;
481 bits<5> MB;
482 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000483
Misha Brukman5295e1d2004-08-09 17:24:04 +0000484 let Inst{6-10} = RS;
485 let Inst{11-15} = RA;
486 let Inst{16-20} = RB;
487 let Inst{21-25} = MB;
488 let Inst{26-30} = ME;
489 let Inst{31} = rc;
490}
491
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000492class MForm_2<bits<6> opcode, bit rc, dag OL, string asmstr>
493 : MForm_1<opcode, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000494}
495
Nate Begeman765cb5f2004-08-13 02:19:26 +0000496// 1.7.14 MD-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000497class MDForm_1<bits<6> opcode, bits<3> xo, bit rc,
Chris Lattner5b78da42005-04-19 05:05:22 +0000498 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000499 bits<5> RS;
500 bits<5> RA;
501 bits<6> SH;
502 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000503
Nate Begeman765cb5f2004-08-13 02:19:26 +0000504 let Inst{6-10} = RS;
505 let Inst{11-15} = RA;
506 let Inst{16-20} = SH{1-5};
507 let Inst{21-26} = MBE;
508 let Inst{27-29} = xo;
509 let Inst{30} = SH{0};
510 let Inst{31} = rc;
511}
512
Misha Brukman6b21bde2004-08-02 21:56:35 +0000513//===----------------------------------------------------------------------===//
514
Chris Lattner5b78da42005-04-19 05:05:22 +0000515class Pseudo<dag OL, string asmstr> : I<0, OL, asmstr> {
Nate Begeman61738782004-09-02 08:13:00 +0000516 let PPC64 = 0;
517 let VMX = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000518
Nate Begeman61738782004-09-02 08:13:00 +0000519 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000520}