blob: f5134dfd767f3a803723947f0b878340cdb938aa [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 Lattner15709c22005-04-19 04:51:30 +0000197class XForm_base_r3xo<bits<6> opcode, bits<10> xo, bit rc,
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
Misha Brukman28beda92004-08-11 15:54:36 +0000203 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000204 let Inst{11-15} = A;
205 let Inst{16-20} = B;
206 let Inst{21-30} = xo;
207 let Inst{31} = rc;
208}
209
Chris Lattner130888ad2004-11-24 03:52:02 +0000210// This is the same as XForm_base_r3xo, but the first two operands are swapped
211// when code is emitted.
212class XForm_base_r3xo_swapped
Chris Lattner15709c22005-04-19 04:51:30 +0000213 <bits<6> opcode, bits<10> xo, bit rc, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000214 : I<opcode, OL, asmstr> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000215 bits<5> A;
216 bits<5> RST;
217 bits<5> B;
218
219 let Inst{6-10} = RST;
220 let Inst{11-15} = A;
221 let Inst{16-20} = B;
222 let Inst{21-30} = xo;
Chris Lattnerf29cc882005-04-11 15:03:41 +0000223 let Inst{31} = rc;
Chris Lattner130888ad2004-11-24 03:52:02 +0000224}
225
Nate Begeman765cb5f2004-08-13 02:19:26 +0000226
Chris Lattner15709c22005-04-19 04:51:30 +0000227class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
228 : XForm_base_r3xo<opcode, xo, 0, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000229
Chris Lattner15709c22005-04-19 04:51:30 +0000230class XForm_6<bits<6> opcode, bits<10> xo, bit rc, dag OL, string asmstr>
231 : XForm_base_r3xo_swapped<opcode, xo, rc, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000232
Chris Lattner15709c22005-04-19 04:51:30 +0000233class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
234 : XForm_base_r3xo<opcode, xo, 0, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000235
Chris Lattner15709c22005-04-19 04:51:30 +0000236class XForm_10<bits<6> opcode, bits<10> xo, bit rc, dag OL, string asmstr>
237 : XForm_base_r3xo_swapped<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000238}
239
Chris Lattner15709c22005-04-19 04:51:30 +0000240class XForm_11<bits<6> opcode, bits<10> xo, bit rc, dag OL, string asmstr>
241 : XForm_base_r3xo_swapped<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000242 let B = 0;
243}
244
Chris Lattner15709c22005-04-19 04:51:30 +0000245class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000246 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000247 bits<3> BF;
248 bits<1> L;
249 bits<5> RA;
250 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000251
Misha Brukman5295e1d2004-08-09 17:24:04 +0000252 let Inst{6-8} = BF;
253 let Inst{9} = 0;
254 let Inst{10} = L;
255 let Inst{11-15} = RA;
256 let Inst{16-20} = RB;
257 let Inst{21-30} = xo;
258 let Inst{31} = 0;
259}
260
Chris Lattner15709c22005-04-19 04:51:30 +0000261class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
262 : XForm_16<opcode, xo, OL, asmstr> {
263 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000264}
265
Chris Lattner15709c22005-04-19 04:51:30 +0000266class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000267 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000268 bits<3> BF;
269 bits<5> FRA;
270 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000271
Misha Brukman5295e1d2004-08-09 17:24:04 +0000272 let Inst{6-8} = BF;
273 let Inst{9-10} = 0;
274 let Inst{11-15} = FRA;
275 let Inst{16-20} = FRB;
276 let Inst{21-30} = xo;
277 let Inst{31} = 0;
278}
279
Chris Lattner15709c22005-04-19 04:51:30 +0000280class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
281 : XForm_base_r3xo<opcode, xo, 0, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000282}
283
Chris Lattner15709c22005-04-19 04:51:30 +0000284class XForm_26<bits<6> opcode, bits<10> xo, bit rc, dag OL, string asmstr>
285 : XForm_base_r3xo<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000286 let A = 0;
287}
288
Chris Lattner15709c22005-04-19 04:51:30 +0000289class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
290 : XForm_base_r3xo<opcode, xo, 0, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000291}
292
293// 1.7.7 XL-Form
Chris Lattner15709c22005-04-19 04:51:30 +0000294class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000295 : I<opcode, OL, asmstr> {
Nate Begeman65a82c52005-04-14 03:20:38 +0000296 bits<3> CRD;
297 bits<2> CRDb;
298 bits<3> CRA;
299 bits<2> CRAb;
300 bits<3> CRB;
301 bits<2> CRBb;
302
303 let Inst{6-8} = CRD;
304 let Inst{9-10} = CRDb;
305 let Inst{11-13} = CRA;
306 let Inst{14-15} = CRAb;
307 let Inst{16-18} = CRB;
308 let Inst{19-20} = CRBb;
309 let Inst{21-30} = xo;
310 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000311}
312
Chris Lattner15709c22005-04-19 04:51:30 +0000313class XLForm_2<bits<6> opcode, bits<10> xo, bit lk,
Chris Lattner5b78da42005-04-19 05:05:22 +0000314 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000315 bits<5> BO;
316 bits<5> BI;
317 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000318
Misha Brukman5295e1d2004-08-09 17:24:04 +0000319 let Inst{6-10} = BO;
320 let Inst{11-15} = BI;
321 let Inst{16-18} = 0;
322 let Inst{19-20} = BH;
323 let Inst{21-30} = xo;
324 let Inst{31} = lk;
325}
326
Nate Begeman61738782004-09-02 08:13:00 +0000327class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,
Chris Lattner15709c22005-04-19 04:51:30 +0000328 bits<5> bi, bit lk, dag OL, string asmstr>
329 : XLForm_2<opcode, xo, lk, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000330 let BO = bo;
331 let BI = bi;
332 let BH = 0;
333}
334
Chris Lattner15709c22005-04-19 04:51:30 +0000335class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000336 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000337 bits<3> BF;
338 bits<3> BFA;
339
340 let Inst{6-8} = BF;
341 let Inst{9-10} = 0;
342 let Inst{11-13} = BFA;
343 let Inst{14-15} = 0;
344 let Inst{16-20} = 0;
345 let Inst{21-30} = xo;
346 let Inst{31} = 0;
347}
348
Misha Brukman5295e1d2004-08-09 17:24:04 +0000349// 1.7.8 XFX-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000350class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000351 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000352 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000353 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000354
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000355 let Inst{6-10} = RT;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000356 let Inst{11-20} = SPR;
357 let Inst{21-30} = xo;
358 let Inst{31} = 0;
359}
360
Chris Lattnerd790d222005-04-19 04:40:07 +0000361class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
362 dag OL, string asmstr>
363 : XFXForm_1<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000364 let SPR = spr;
365}
366
Chris Lattner5b78da42005-04-19 05:05:22 +0000367class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
368 : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000369 bits<5> RT;
370
371 let Inst{6-10} = RT;
372 let Inst{11-20} = 0;
373 let Inst{21-30} = xo;
374 let Inst{31} = 0;
375}
376
Chris Lattnerd790d222005-04-19 04:40:07 +0000377class XFXForm_5<bits<6> opcode, bit mfcrf, bits<10> xo,
Chris Lattner5b78da42005-04-19 05:05:22 +0000378 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000379 bits<8> FXM;
380 bits<5> ST;
381
382 let Inst{6-10} = ST;
Nate Begeman602a45f2005-04-18 02:43:24 +0000383 let Inst{11} = mfcrf;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000384 let Inst{12-19} = FXM;
385 let Inst{20} = 0;
386 let Inst{21-30} = xo;
387 let Inst{31} = 0;
388}
389
Chris Lattnerd790d222005-04-19 04:40:07 +0000390class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr>
391 : XFXForm_1<opcode, xo, OL, asmstr>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000392
Nate Begeman143cf942004-08-30 02:28:06 +0000393class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Chris Lattnerd790d222005-04-19 04:40:07 +0000394 dag OL, string asmstr>
395 : XFXForm_7<opcode, xo, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000396 let SPR = spr;
397}
398
Nate Begeman765cb5f2004-08-13 02:19:26 +0000399// 1.7.10 XS-Form
Chris Lattner5b78da42005-04-19 05:05:22 +0000400class XSForm_1<bits<6> opcode, bits<9> xo, bit rc, dag OL, string asmstr>
401 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000402 bits<5> RS;
403 bits<5> A;
404 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000405
Nate Begeman765cb5f2004-08-13 02:19:26 +0000406 let Inst{6-10} = RS;
407 let Inst{11-15} = A;
408 let Inst{16-20} = SH{1-5};
409 let Inst{21-29} = xo;
410 let Inst{30} = SH{0};
411 let Inst{31} = rc;
412}
413
Misha Brukman5295e1d2004-08-09 17:24:04 +0000414// 1.7.11 XO-Form
Chris Lattnerd790d222005-04-19 04:40:07 +0000415class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Chris Lattner5b78da42005-04-19 05:05:22 +0000416 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000417 bits<5> RT;
418 bits<5> RA;
419 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000420
Misha Brukman5295e1d2004-08-09 17:24:04 +0000421 let Inst{6-10} = RT;
422 let Inst{11-15} = RA;
423 let Inst{16-20} = RB;
424 let Inst{21} = oe;
425 let Inst{22-30} = xo;
426 let Inst{31} = rc;
427}
428
Chris Lattnerd790d222005-04-19 04:40:07 +0000429class XOForm_1r<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Nate Begeman143cf942004-08-30 02:28:06 +0000430 dag OL, string asmstr>
Chris Lattnerd790d222005-04-19 04:40:07 +0000431 : XOForm_1<opcode, xo, oe, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000432 let Inst{11-15} = RB;
433 let Inst{16-20} = RA;
434}
435
Chris Lattnerd790d222005-04-19 04:40:07 +0000436class XOForm_3<bits<6> opcode, bits<9> xo, bit oe, bit rc,
Nate Begeman143cf942004-08-30 02:28:06 +0000437 dag OL, string asmstr>
Chris Lattnerd790d222005-04-19 04:40:07 +0000438 : XOForm_1<opcode, xo, oe, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000439 let RB = 0;
440}
441
442// 1.7.12 A-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000443class AForm_1<bits<6> opcode, bits<5> xo, bit rc, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000444 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000445 bits<5> FRT;
446 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000447 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000448 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000449
Misha Brukman5295e1d2004-08-09 17:24:04 +0000450 let Inst{6-10} = FRT;
451 let Inst{11-15} = FRA;
452 let Inst{16-20} = FRB;
453 let Inst{21-25} = FRC;
454 let Inst{26-30} = xo;
455 let Inst{31} = rc;
456}
457
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000458class AForm_2<bits<6> opcode, bits<5> xo, bit rc, dag OL, string asmstr>
459 : AForm_1<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000460 let FRC = 0;
461}
462
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000463class AForm_3<bits<6> opcode, bits<5> xo, bit rc, dag OL,
Nate Begeman6cdbd222004-08-29 22:45:13 +0000464 string asmstr>
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000465 : AForm_1<opcode, xo, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000466 let FRB = 0;
467}
468
Misha Brukman5295e1d2004-08-09 17:24:04 +0000469// 1.7.13 M-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000470class MForm_1<bits<6> opcode, bit rc, dag OL, string asmstr>
Chris Lattner5b78da42005-04-19 05:05:22 +0000471 : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000472 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000473 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000474 bits<5> RB;
475 bits<5> MB;
476 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000477
Misha Brukman5295e1d2004-08-09 17:24:04 +0000478 let Inst{6-10} = RS;
479 let Inst{11-15} = RA;
480 let Inst{16-20} = RB;
481 let Inst{21-25} = MB;
482 let Inst{26-30} = ME;
483 let Inst{31} = rc;
484}
485
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000486class MForm_2<bits<6> opcode, bit rc, dag OL, string asmstr>
487 : MForm_1<opcode, rc, OL, asmstr> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000488}
489
Nate Begeman765cb5f2004-08-13 02:19:26 +0000490// 1.7.14 MD-Form
Chris Lattnerc7cb8c72005-04-19 04:32:54 +0000491class MDForm_1<bits<6> opcode, bits<3> xo, bit rc,
Chris Lattner5b78da42005-04-19 05:05:22 +0000492 dag OL, string asmstr> : I<opcode, OL, asmstr> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000493 bits<5> RS;
494 bits<5> RA;
495 bits<6> SH;
496 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000497
Nate Begeman765cb5f2004-08-13 02:19:26 +0000498 let Inst{6-10} = RS;
499 let Inst{11-15} = RA;
500 let Inst{16-20} = SH{1-5};
501 let Inst{21-26} = MBE;
502 let Inst{27-29} = xo;
503 let Inst{30} = SH{0};
504 let Inst{31} = rc;
505}
506
Misha Brukman6b21bde2004-08-02 21:56:35 +0000507//===----------------------------------------------------------------------===//
508
Chris Lattner5b78da42005-04-19 05:05:22 +0000509class Pseudo<dag OL, string asmstr> : I<0, OL, asmstr> {
Nate Begeman61738782004-09-02 08:13:00 +0000510 let PPC64 = 0;
511 let VMX = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000512
Nate Begeman61738782004-09-02 08:13:00 +0000513 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000514}