blob: 865320c1d61a89342d8dd404976fed3584698532 [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//===----------------------------------------------------------------------===//
Misha Brukmancd4f51b2004-08-02 16:54:54 +00009
Misha Brukman6b21bde2004-08-02 21:56:35 +000010//===----------------------------------------------------------------------===//
11//
12// PowerPC instruction formats
Misha Brukmancd4f51b2004-08-02 16:54:54 +000013
Evan Cheng94b5a802007-07-19 01:14:50 +000014class I<bits<6> opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin>
Jim Laskey74ab9962005-10-19 19:51:16 +000015 : Instruction {
Misha Brukman6b21bde2004-08-02 21:56:35 +000016 field bits<32> Inst;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000017
Chris Lattner5b78da42005-04-19 05:05:22 +000018 bit PPC64 = 0; // Default value, override with isPPC64
Misha Brukmancd4f51b2004-08-02 16:54:54 +000019
Nate Begeman4bfceb12004-09-04 05:00:00 +000020 let Name = "";
Misha Brukmandad438b2004-08-10 22:47:03 +000021 let Namespace = "PPC";
Misha Brukman5295e1d2004-08-09 17:24:04 +000022 let Inst{0-5} = opcode;
Evan Cheng94b5a802007-07-19 01:14:50 +000023 let OutOperandList = OOL;
24 let InOperandList = IOL;
Nate Begeman4bfceb12004-09-04 05:00:00 +000025 let AsmString = asmstr;
Jim Laskey74ab9962005-10-19 19:51:16 +000026 let Itinerary = itin;
Chris Lattner51348c52006-03-12 09:13:49 +000027
28 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to
29 /// these must be reflected there! See comments there for what these are.
30 bits<1> PPC970_First = 0;
31 bits<1> PPC970_Single = 0;
Chris Lattner7579cfb2006-03-13 05:15:10 +000032 bits<1> PPC970_Cracked = 0;
Chris Lattner51348c52006-03-12 09:13:49 +000033 bits<3> PPC970_Unit = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +000034}
35
Chris Lattner7579cfb2006-03-13 05:15:10 +000036class PPC970_DGroup_First { bits<1> PPC970_First = 1; }
37class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; }
38class PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; }
Chris Lattner51348c52006-03-12 09:13:49 +000039class PPC970_MicroCode;
40
41class PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; }
42class PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; }
43class PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; }
44class PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; }
45class PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; }
46class PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; }
47class PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; }
48class PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; }
49
50
Misha Brukman5295e1d2004-08-09 17:24:04 +000051// 1.7.1 I-Form
Evan Cheng94b5a802007-07-19 01:14:50 +000052class IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr,
Chris Lattnerd9d18af2005-12-04 18:42:54 +000053 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +000054 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerd9d18af2005-12-04 18:42:54 +000055 let Pattern = pattern;
Misha Brukman189f3dc2004-10-14 05:55:37 +000056 bits<24> LI;
Misha Brukman6b21bde2004-08-02 21:56:35 +000057
Misha Brukman5295e1d2004-08-09 17:24:04 +000058 let Inst{6-29} = LI;
59 let Inst{30} = aa;
60 let Inst{31} = lk;
Misha Brukman6b21bde2004-08-02 21:56:35 +000061}
62
Misha Brukman5295e1d2004-08-09 17:24:04 +000063// 1.7.2 B-Form
Evan Cheng94b5a802007-07-19 01:14:50 +000064class BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr>
65 : I<opcode, OOL, IOL, asmstr, BrB> {
Chris Lattner33fc1d42006-11-17 23:53:28 +000066 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
67 bits<3> CR;
68 bits<14> BD;
69
70 bits<5> BI;
71 let BI{0-1} = BIBO{5-6};
72 let BI{2-4} = CR{0-2};
73
74 let Inst{6-10} = BIBO{4-0};
75 let Inst{11-15} = BI;
76 let Inst{16-29} = BD;
77 let Inst{30} = aa;
78 let Inst{31} = lk;
79}
80
81
Misha Brukman5295e1d2004-08-09 17:24:04 +000082// 1.7.4 D-Form
Evan Cheng94b5a802007-07-19 01:14:50 +000083class DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr,
84 InstrItinClass itin, list<dag> pattern>
85 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +000086 bits<5> A;
87 bits<5> B;
88 bits<16> C;
Nate Begemanade6f9a2005-12-09 23:54:18 +000089
90 let Pattern = pattern;
Misha Brukman6b21bde2004-08-02 21:56:35 +000091
Misha Brukman6b21bde2004-08-02 21:56:35 +000092 let Inst{6-10} = A;
93 let Inst{11-15} = B;
94 let Inst{16-31} = C;
95}
96
Evan Cheng94b5a802007-07-19 01:14:50 +000097class DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
98 InstrItinClass itin, list<dag> pattern>
99 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman15b0fb52004-10-23 06:08:38 +0000100 bits<5> A;
101 bits<16> C;
102 bits<5> B;
Nate Begemanade6f9a2005-12-09 23:54:18 +0000103
104 let Pattern = pattern;
Misha Brukman15b0fb52004-10-23 06:08:38 +0000105
Misha Brukman15b0fb52004-10-23 06:08:38 +0000106 let Inst{6-10} = A;
107 let Inst{11-15} = B;
108 let Inst{16-31} = C;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000109}
110
Evan Cheng94b5a802007-07-19 01:14:50 +0000111class DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
112 InstrItinClass itin, list<dag> pattern>
113 : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000114
Evan Cheng94b5a802007-07-19 01:14:50 +0000115class DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
116 InstrItinClass itin, list<dag> pattern>
117 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000118 bits<5> A;
119 bits<16> B;
Nate Begeman4bfceb12004-09-04 05:00:00 +0000120
Chris Lattner2d8032b2005-09-08 17:33:10 +0000121 let Pattern = pattern;
122
Nate Begeman4bfceb12004-09-04 05:00:00 +0000123 let Inst{6-10} = A;
124 let Inst{11-15} = 0;
125 let Inst{16-31} = B;
Misha Brukman6b21bde2004-08-02 21:56:35 +0000126}
127
Evan Cheng94b5a802007-07-19 01:14:50 +0000128class DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
129 InstrItinClass itin, list<dag> pattern>
130 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner022e2712004-11-24 02:15:41 +0000131 bits<5> B;
132 bits<5> A;
133 bits<16> C;
134
Chris Lattner76cb0062005-09-08 17:40:49 +0000135 let Pattern = pattern;
136
Chris Lattner022e2712004-11-24 02:15:41 +0000137 let Inst{6-10} = A;
138 let Inst{11-15} = B;
139 let Inst{16-31} = C;
140}
Nate Begeman4bfceb12004-09-04 05:00:00 +0000141
Evan Cheng94b5a802007-07-19 01:14:50 +0000142class DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
143 InstrItinClass itin, list<dag> pattern>
144 : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000145 let A = 0;
146 let B = 0;
147 let C = 0;
148}
149
Evan Cheng94b5a802007-07-19 01:14:50 +0000150class DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
151 InstrItinClass itin>
152 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000153 bits<3> BF;
154 bits<1> L;
155 bits<5> RA;
156 bits<16> I;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000157
Misha Brukman5295e1d2004-08-09 17:24:04 +0000158 let Inst{6-8} = BF;
159 let Inst{9} = 0;
160 let Inst{10} = L;
161 let Inst{11-15} = RA;
162 let Inst{16-31} = I;
163}
164
Evan Cheng94b5a802007-07-19 01:14:50 +0000165class DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
166 InstrItinClass itin>
167 : DForm_5<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000168 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000169}
170
Evan Cheng94b5a802007-07-19 01:14:50 +0000171class DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
172 InstrItinClass itin>
173 : DForm_5<opcode, OOL, IOL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000174
Evan Cheng94b5a802007-07-19 01:14:50 +0000175class DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
176 InstrItinClass itin>
177 : DForm_6<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb2367e32005-04-19 04:59:28 +0000178 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000179}
180
Misha Brukman5295e1d2004-08-09 17:24:04 +0000181
Misha Brukman28beda92004-08-11 15:54:36 +0000182// 1.7.5 DS-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000183class DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000184 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000185 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000186 bits<5> RST;
187 bits<14> DS;
188 bits<5> RA;
Misha Brukman28beda92004-08-11 15:54:36 +0000189
Nate Begemanade6f9a2005-12-09 23:54:18 +0000190 let Pattern = pattern;
191
Misha Brukman28beda92004-08-11 15:54:36 +0000192 let Inst{6-10} = RST;
193 let Inst{11-15} = RA;
194 let Inst{16-29} = DS;
195 let Inst{30-31} = xo;
196}
197
Misha Brukman5295e1d2004-08-09 17:24:04 +0000198// 1.7.6 X-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000199class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000200 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000201 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000202 bits<5> RST;
203 bits<5> A;
204 bits<5> B;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000205
Nate Begemanade6f9a2005-12-09 23:54:18 +0000206 let Pattern = pattern;
207
Chris Lattnerf9172e12005-04-19 05:15:18 +0000208 bit RC = 0; // set by isDOT
209
Misha Brukman28beda92004-08-11 15:54:36 +0000210 let Inst{6-10} = RST;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000211 let Inst{11-15} = A;
212 let Inst{16-20} = B;
213 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000214 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000215}
216
Chris Lattner130888ad2004-11-24 03:52:02 +0000217// This is the same as XForm_base_r3xo, but the first two operands are swapped
218// when code is emitted.
219class XForm_base_r3xo_swapped
Evan Cheng94b5a802007-07-19 01:14:50 +0000220 <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000221 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000222 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattner130888ad2004-11-24 03:52:02 +0000223 bits<5> A;
224 bits<5> RST;
225 bits<5> B;
226
Chris Lattnerf9172e12005-04-19 05:15:18 +0000227 bit RC = 0; // set by isDOT
228
Chris Lattner130888ad2004-11-24 03:52:02 +0000229 let Inst{6-10} = RST;
230 let Inst{11-15} = A;
231 let Inst{16-20} = B;
232 let Inst{21-30} = xo;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000233 let Inst{31} = RC;
Chris Lattner130888ad2004-11-24 03:52:02 +0000234}
235
Nate Begeman765cb5f2004-08-13 02:19:26 +0000236
Evan Cheng94b5a802007-07-19 01:14:50 +0000237class XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000238 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000239 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000240
Evan Cheng94b5a802007-07-19 01:14:50 +0000241class XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000242 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000243 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000244 let Pattern = pattern;
245}
Misha Brukman5295e1d2004-08-09 17:24:04 +0000246
Evan Cheng94b5a802007-07-19 01:14:50 +0000247class XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000248 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000249 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000250
Evan Cheng94b5a802007-07-19 01:14:50 +0000251class XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000252 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000253 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Jim Laskey74ab9962005-10-19 19:51:16 +0000254 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000255}
256
Evan Cheng94b5a802007-07-19 01:14:50 +0000257class XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000258 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000259 : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000260 let B = 0;
Chris Lattnerdcbb5612005-09-02 22:35:53 +0000261 let Pattern = pattern;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000262}
263
Evan Cheng94b5a802007-07-19 01:14:50 +0000264class XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000265 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000266 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000267 bits<3> BF;
268 bits<1> L;
269 bits<5> RA;
270 bits<5> RB;
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} = 0;
274 let Inst{10} = L;
275 let Inst{11-15} = RA;
276 let Inst{16-20} = RB;
277 let Inst{21-30} = xo;
278 let Inst{31} = 0;
279}
280
Evan Cheng94b5a802007-07-19 01:14:50 +0000281class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000282 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000283 : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
Chris Lattner15709c22005-04-19 04:51:30 +0000284 let L = PPC64;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000285}
286
Evan Cheng94b5a802007-07-19 01:14:50 +0000287class XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000288 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000289 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000290 bits<3> BF;
291 bits<5> FRA;
292 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000293
Misha Brukman5295e1d2004-08-09 17:24:04 +0000294 let Inst{6-8} = BF;
295 let Inst{9-10} = 0;
296 let Inst{11-15} = FRA;
297 let Inst{16-20} = FRB;
298 let Inst{21-30} = xo;
299 let Inst{31} = 0;
300}
301
Evan Cheng94b5a802007-07-19 01:14:50 +0000302class XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000303 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000304 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000305}
306
Evan Cheng94b5a802007-07-19 01:14:50 +0000307class XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000308 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000309 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000310 let A = 0;
311}
312
Evan Cheng94b5a802007-07-19 01:14:50 +0000313class XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanade6f9a2005-12-09 23:54:18 +0000314 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000315 : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000316}
317
Chris Lattnerc8587d42006-06-06 21:29:23 +0000318// DCB_Form - Form X instruction, used for dcb* instructions.
Evan Cheng94b5a802007-07-19 01:14:50 +0000319class DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
Chris Lattnerc8587d42006-06-06 21:29:23 +0000320 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000321 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerc8587d42006-06-06 21:29:23 +0000322 bits<5> A;
323 bits<5> B;
324
325 let Pattern = pattern;
326
327 let Inst{6-10} = immfield;
328 let Inst{11-15} = A;
329 let Inst{16-20} = B;
330 let Inst{21-30} = xo;
331 let Inst{31} = 0;
332}
333
334
Chris Lattnerc94d9322006-04-05 22:27:14 +0000335// DSS_Form - Form X instruction, used for altivec dss* instructions.
Evan Cheng94b5a802007-07-19 01:14:50 +0000336class DSS_Form<bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerc94d9322006-04-05 22:27:14 +0000337 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000338 : I<31, OOL, IOL, asmstr, itin> {
Chris Lattnerc94d9322006-04-05 22:27:14 +0000339 bits<1> T;
340 bits<2> STRM;
341 bits<5> A;
342 bits<5> B;
343
344 let Pattern = pattern;
345
346 let Inst{6} = T;
347 let Inst{7-8} = 0;
348 let Inst{9-10} = STRM;
349 let Inst{11-15} = A;
350 let Inst{16-20} = B;
351 let Inst{21-30} = xo;
352 let Inst{31} = 0;
353}
354
Misha Brukman5295e1d2004-08-09 17:24:04 +0000355// 1.7.7 XL-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000356class XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000357 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000358 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000359 bits<5> CRD;
360 bits<5> CRA;
361 bits<5> CRB;
Nate Begeman65a82c52005-04-14 03:20:38 +0000362
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000363 let Pattern = pattern;
364
365 let Inst{6-10} = CRD;
366 let Inst{11-15} = CRA;
367 let Inst{16-20} = CRB;
368 let Inst{21-30} = xo;
369 let Inst{31} = 0;
370}
371
Evan Cheng94b5a802007-07-19 01:14:50 +0000372class XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000373 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000374 : I<opcode, OOL, IOL, asmstr, itin> {
Chris Lattnerb9bd34f2007-02-25 05:07:49 +0000375 bits<5> CRD;
376
377 let Pattern = pattern;
378
379 let Inst{6-10} = CRD;
380 let Inst{11-15} = CRD;
381 let Inst{16-20} = CRD;
Nate Begeman65a82c52005-04-14 03:20:38 +0000382 let Inst{21-30} = xo;
383 let Inst{31} = 0;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000384}
385
Evan Cheng94b5a802007-07-19 01:14:50 +0000386class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
Nate Begemanb11b8e42005-12-20 00:26:01 +0000387 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000388 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000389 bits<5> BO;
390 bits<5> BI;
391 bits<2> BH;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000392
Nate Begemanb11b8e42005-12-20 00:26:01 +0000393 let Pattern = pattern;
394
Misha Brukman5295e1d2004-08-09 17:24:04 +0000395 let Inst{6-10} = BO;
396 let Inst{11-15} = BI;
397 let Inst{16-18} = 0;
398 let Inst{19-20} = BH;
399 let Inst{21-30} = xo;
400 let Inst{31} = lk;
401}
402
Chris Lattner29597892006-11-04 05:42:48 +0000403class XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
Evan Cheng94b5a802007-07-19 01:14:50 +0000404 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
405 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Chris Lattner29597892006-11-04 05:42:48 +0000406 bits<7> BIBO; // 2 bits of BI and 5 bits of BO.
407 bits<3> CR;
408
Chris Lattnerd94477f2006-11-07 01:51:50 +0000409 let BO = BIBO{2-6};
410 let BI{0-1} = BIBO{0-1};
Chris Lattner29597892006-11-04 05:42:48 +0000411 let BI{2-4} = CR;
412 let BH = 0;
413}
414
415
Jim Laskey74ab9962005-10-19 19:51:16 +0000416class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk,
Evan Cheng94b5a802007-07-19 01:14:50 +0000417 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
418 : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000419 let BO = bo;
420 let BI = bi;
421 let BH = 0;
422}
423
Evan Cheng94b5a802007-07-19 01:14:50 +0000424class XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000425 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000426 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000427 bits<3> BF;
428 bits<3> BFA;
429
430 let Inst{6-8} = BF;
431 let Inst{9-10} = 0;
432 let Inst{11-13} = BFA;
433 let Inst{14-15} = 0;
434 let Inst{16-20} = 0;
435 let Inst{21-30} = xo;
436 let Inst{31} = 0;
437}
438
Misha Brukman5295e1d2004-08-09 17:24:04 +0000439// 1.7.8 XFX-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000440class XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000441 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000442 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000443 bits<5> RT;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000444 bits<10> SPR;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000445
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000446 let Inst{6-10} = RT;
Nate Begeman048b2632005-11-29 22:42:50 +0000447 let Inst{11} = SPR{4};
448 let Inst{12} = SPR{3};
449 let Inst{13} = SPR{2};
450 let Inst{14} = SPR{1};
451 let Inst{15} = SPR{0};
452 let Inst{16} = SPR{9};
453 let Inst{17} = SPR{8};
454 let Inst{18} = SPR{7};
455 let Inst{19} = SPR{6};
456 let Inst{20} = SPR{5};
Misha Brukman5295e1d2004-08-09 17:24:04 +0000457 let Inst{21-30} = xo;
458 let Inst{31} = 0;
459}
460
Chris Lattnerd790d222005-04-19 04:40:07 +0000461class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng94b5a802007-07-19 01:14:50 +0000462 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
463 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000464 let SPR = spr;
465}
466
Evan Cheng94b5a802007-07-19 01:14:50 +0000467class XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000468 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000469 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000470 bits<5> RT;
471
472 let Inst{6-10} = RT;
473 let Inst{11-20} = 0;
474 let Inst{21-30} = xo;
475 let Inst{31} = 0;
476}
477
Evan Cheng94b5a802007-07-19 01:14:50 +0000478class XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000479 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000480 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000481 bits<8> FXM;
482 bits<5> ST;
483
484 let Inst{6-10} = ST;
Nate Begeman9a838672005-08-08 20:04:52 +0000485 let Inst{11} = 0;
Nate Begemanf67f3bf2005-04-12 07:04:16 +0000486 let Inst{12-19} = FXM;
487 let Inst{20} = 0;
488 let Inst{21-30} = xo;
489 let Inst{31} = 0;
490}
491
Evan Cheng94b5a802007-07-19 01:14:50 +0000492class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000493 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000494 : I<opcode, OOL, IOL, asmstr, itin> {
Nate Begeman9a838672005-08-08 20:04:52 +0000495 bits<5> ST;
496 bits<8> FXM;
497
498 let Inst{6-10} = ST;
499 let Inst{11} = 1;
500 let Inst{12-19} = FXM;
501 let Inst{20} = 0;
502 let Inst{21-30} = xo;
503 let Inst{31} = 0;
504}
505
Evan Cheng94b5a802007-07-19 01:14:50 +0000506class XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000507 InstrItinClass itin>
Evan Cheng94b5a802007-07-19 01:14:50 +0000508 : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000509
Nate Begeman143cf942004-08-30 02:28:06 +0000510class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
Evan Cheng94b5a802007-07-19 01:14:50 +0000511 dag OOL, dag IOL, string asmstr, InstrItinClass itin>
512 : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000513 let SPR = spr;
514}
515
Chris Lattneraeadac82006-12-06 20:02:54 +0000516// 1.7.10 XS-Form - SRADI.
Evan Cheng94b5a802007-07-19 01:14:50 +0000517class XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnera2af3f42006-06-27 20:07:26 +0000518 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000519 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000520 bits<5> A;
Chris Lattner9472eb82006-12-06 21:35:10 +0000521 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000522 bits<6> SH;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000523
Chris Lattnerf9172e12005-04-19 05:15:18 +0000524 bit RC = 0; // set by isDOT
Chris Lattnera2af3f42006-06-27 20:07:26 +0000525 let Pattern = pattern;
Chris Lattnerf9172e12005-04-19 05:15:18 +0000526
Nate Begeman765cb5f2004-08-13 02:19:26 +0000527 let Inst{6-10} = RS;
528 let Inst{11-15} = A;
Chris Lattneraeadac82006-12-06 20:02:54 +0000529 let Inst{16-20} = SH{4,3,2,1,0};
Nate Begeman765cb5f2004-08-13 02:19:26 +0000530 let Inst{21-29} = xo;
Chris Lattneraeadac82006-12-06 20:02:54 +0000531 let Inst{30} = SH{5};
Chris Lattnerf9172e12005-04-19 05:15:18 +0000532 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000533}
534
Misha Brukman5295e1d2004-08-09 17:24:04 +0000535// 1.7.11 XO-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000536class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000537 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000538 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000539 bits<5> RT;
540 bits<5> RA;
541 bits<5> RB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000542
Chris Lattner3a1002d2005-09-02 21:18:00 +0000543 let Pattern = pattern;
544
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000545 bit RC = 0; // set by isDOT
546
Misha Brukman5295e1d2004-08-09 17:24:04 +0000547 let Inst{6-10} = RT;
548 let Inst{11-15} = RA;
549 let Inst{16-20} = RB;
550 let Inst{21} = oe;
551 let Inst{22-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000552 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000553}
554
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000555class XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
Evan Cheng94b5a802007-07-19 01:14:50 +0000556 dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
557 : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000558 let RB = 0;
559}
560
561// 1.7.12 A-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000562class AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000563 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000564 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000565 bits<5> FRT;
566 bits<5> FRA;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000567 bits<5> FRC;
Chris Lattnerda76c162004-11-25 04:11:07 +0000568 bits<5> FRB;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000569
Chris Lattner027a2672005-09-29 23:34:24 +0000570 let Pattern = pattern;
571
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000572 bit RC = 0; // set by isDOT
573
Misha Brukman5295e1d2004-08-09 17:24:04 +0000574 let Inst{6-10} = FRT;
575 let Inst{11-15} = FRA;
576 let Inst{16-20} = FRB;
577 let Inst{21-25} = FRC;
578 let Inst{26-30} = xo;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000579 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000580}
581
Evan Cheng94b5a802007-07-19 01:14:50 +0000582class AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000583 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000584 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000585 let FRC = 0;
586}
587
Evan Cheng94b5a802007-07-19 01:14:50 +0000588class AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000589 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000590 : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000591 let FRB = 0;
592}
593
Misha Brukman5295e1d2004-08-09 17:24:04 +0000594// 1.7.13 M-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000595class MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000596 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000597 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000598 bits<5> RA;
Chris Lattner5f4b0e12004-11-23 19:23:32 +0000599 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000600 bits<5> RB;
601 bits<5> MB;
602 bits<5> ME;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000603
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000604 let Pattern = pattern;
605
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000606 bit RC = 0; // set by isDOT
607
Misha Brukman5295e1d2004-08-09 17:24:04 +0000608 let Inst{6-10} = RS;
609 let Inst{11-15} = RA;
610 let Inst{16-20} = RB;
611 let Inst{21-25} = MB;
612 let Inst{26-30} = ME;
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000613 let Inst{31} = RC;
Misha Brukman5295e1d2004-08-09 17:24:04 +0000614}
615
Evan Cheng94b5a802007-07-19 01:14:50 +0000616class MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000617 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000618 : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
Misha Brukman5295e1d2004-08-09 17:24:04 +0000619}
620
Nate Begeman765cb5f2004-08-13 02:19:26 +0000621// 1.7.14 MD-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000622class MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
Jim Laskey74ab9962005-10-19 19:51:16 +0000623 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000624 : I<opcode, OOL, IOL, asmstr, itin> {
Misha Brukman189f3dc2004-10-14 05:55:37 +0000625 bits<5> RA;
Chris Lattner077b86a2006-07-13 21:52:41 +0000626 bits<5> RS;
Misha Brukman189f3dc2004-10-14 05:55:37 +0000627 bits<6> SH;
628 bits<6> MBE;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000629
Nate Begeman9f3c26c2005-10-19 18:42:01 +0000630 let Pattern = pattern;
631
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000632 bit RC = 0; // set by isDOT
633
Nate Begeman765cb5f2004-08-13 02:19:26 +0000634 let Inst{6-10} = RS;
635 let Inst{11-15} = RA;
Chris Lattneraeadac82006-12-06 20:02:54 +0000636 let Inst{16-20} = SH{4,3,2,1,0};
637 let Inst{21-26} = MBE{4,3,2,1,0,5};
Nate Begeman765cb5f2004-08-13 02:19:26 +0000638 let Inst{27-29} = xo;
Chris Lattnerdd57ac42006-07-12 22:08:13 +0000639 let Inst{30} = SH{5};
Chris Lattnerbaa9be52005-04-19 05:21:30 +0000640 let Inst{31} = RC;
Nate Begeman765cb5f2004-08-13 02:19:26 +0000641}
642
Chris Lattnerc94d9322006-04-05 22:27:14 +0000643
644
Nate Begeman8492fd32005-11-23 05:29:52 +0000645// E-1 VA-Form
Chris Lattner1738c292006-03-27 03:34:17 +0000646
647// VAForm_1 - DACB ordering.
Evan Cheng94b5a802007-07-19 01:14:50 +0000648class VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000649 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000650 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000651 bits<5> VD;
652 bits<5> VA;
Nate Begeman8492fd32005-11-23 05:29:52 +0000653 bits<5> VC;
Chris Lattner4e737172006-03-22 01:44:36 +0000654 bits<5> VB;
Nate Begeman11fd6b22005-11-26 22:39:34 +0000655
656 let Pattern = pattern;
Nate Begeman8492fd32005-11-23 05:29:52 +0000657
658 let Inst{6-10} = VD;
659 let Inst{11-15} = VA;
660 let Inst{16-20} = VB;
661 let Inst{21-25} = VC;
662 let Inst{26-31} = xo;
663}
664
Chris Lattner1738c292006-03-27 03:34:17 +0000665// VAForm_1a - DABC ordering.
Evan Cheng94b5a802007-07-19 01:14:50 +0000666class VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner1738c292006-03-27 03:34:17 +0000667 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000668 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner1738c292006-03-27 03:34:17 +0000669 bits<5> VD;
670 bits<5> VA;
671 bits<5> VB;
672 bits<5> VC;
673
674 let Pattern = pattern;
675
676 let Inst{6-10} = VD;
677 let Inst{11-15} = VA;
678 let Inst{16-20} = VB;
679 let Inst{21-25} = VC;
680 let Inst{26-31} = xo;
681}
682
Evan Cheng94b5a802007-07-19 01:14:50 +0000683class VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner53e07de2006-03-26 00:41:48 +0000684 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000685 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner53e07de2006-03-26 00:41:48 +0000686 bits<5> VD;
687 bits<5> VA;
688 bits<5> VB;
689 bits<4> SH;
690
691 let Pattern = pattern;
692
693 let Inst{6-10} = VD;
694 let Inst{11-15} = VA;
695 let Inst{16-20} = VB;
696 let Inst{21} = 0;
697 let Inst{22-25} = SH;
698 let Inst{26-31} = xo;
699}
700
Nate Begeman8492fd32005-11-23 05:29:52 +0000701// E-2 VX-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000702class VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000703 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000704 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000705 bits<5> VD;
706 bits<5> VA;
707 bits<5> VB;
708
Nate Begeman11fd6b22005-11-26 22:39:34 +0000709 let Pattern = pattern;
710
Nate Begeman8492fd32005-11-23 05:29:52 +0000711 let Inst{6-10} = VD;
712 let Inst{11-15} = VA;
713 let Inst{16-20} = VB;
714 let Inst{21-31} = xo;
715}
716
Evan Cheng94b5a802007-07-19 01:14:50 +0000717class VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman40f081d2005-12-14 00:34:09 +0000718 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000719 : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
Nate Begeman40f081d2005-12-14 00:34:09 +0000720 let VA = VD;
721 let VB = VD;
722}
723
724
Evan Cheng94b5a802007-07-19 01:14:50 +0000725class VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
Nate Begemanc1381182005-11-29 08:04:45 +0000726 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000727 : I<4, OOL, IOL, asmstr, itin> {
Nate Begemanc1381182005-11-29 08:04:45 +0000728 bits<5> VD;
729 bits<5> VB;
730
731 let Pattern = pattern;
732
733 let Inst{6-10} = VD;
734 let Inst{11-15} = 0;
735 let Inst{16-20} = VB;
736 let Inst{21-31} = xo;
737}
738
Evan Cheng94b5a802007-07-19 01:14:50 +0000739class VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattnerdf59d532006-03-27 03:28:57 +0000740 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000741 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattnerdf59d532006-03-27 03:28:57 +0000742 bits<5> VD;
743 bits<5> IMM;
744
745 let Pattern = pattern;
746
747 let Inst{6-10} = VD;
748 let Inst{11-15} = IMM;
749 let Inst{16-20} = 0;
750 let Inst{21-31} = xo;
751}
752
Chris Lattner5a528e52006-04-05 00:03:57 +0000753/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
Evan Cheng94b5a802007-07-19 01:14:50 +0000754class VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner5a528e52006-04-05 00:03:57 +0000755 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000756 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner5a528e52006-04-05 00:03:57 +0000757 bits<5> VD;
758
759 let Pattern = pattern;
760
761 let Inst{6-10} = VD;
762 let Inst{11-15} = 0;
763 let Inst{16-20} = 0;
764 let Inst{21-31} = xo;
765}
766
767/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
Evan Cheng94b5a802007-07-19 01:14:50 +0000768class VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
Chris Lattner5a528e52006-04-05 00:03:57 +0000769 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000770 : I<4, OOL, IOL, asmstr, itin> {
Chris Lattner5a528e52006-04-05 00:03:57 +0000771 bits<5> VB;
772
773 let Pattern = pattern;
774
775 let Inst{6-10} = 0;
776 let Inst{11-15} = 0;
777 let Inst{16-20} = VB;
778 let Inst{21-31} = xo;
779}
Chris Lattnerdf59d532006-03-27 03:28:57 +0000780
Nate Begeman8492fd32005-11-23 05:29:52 +0000781// E-4 VXR-Form
Evan Cheng94b5a802007-07-19 01:14:50 +0000782class VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
Nate Begeman8492fd32005-11-23 05:29:52 +0000783 InstrItinClass itin, list<dag> pattern>
Evan Cheng94b5a802007-07-19 01:14:50 +0000784 : I<4, OOL, IOL, asmstr, itin> {
Nate Begeman8492fd32005-11-23 05:29:52 +0000785 bits<5> VD;
786 bits<5> VA;
787 bits<5> VB;
Chris Lattner793cbcb2006-03-26 04:57:17 +0000788 bit RC = 0;
Nate Begeman8492fd32005-11-23 05:29:52 +0000789
Nate Begeman11fd6b22005-11-26 22:39:34 +0000790 let Pattern = pattern;
791
Nate Begeman8492fd32005-11-23 05:29:52 +0000792 let Inst{6-10} = VD;
793 let Inst{11-15} = VA;
794 let Inst{16-20} = VB;
Chris Lattner793cbcb2006-03-26 04:57:17 +0000795 let Inst{21} = RC;
Nate Begeman8492fd32005-11-23 05:29:52 +0000796 let Inst{22-31} = xo;
797}
798
Misha Brukman6b21bde2004-08-02 21:56:35 +0000799//===----------------------------------------------------------------------===//
Evan Cheng94b5a802007-07-19 01:14:50 +0000800class Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
801 : I<0, OOL, IOL, asmstr, NoItinerary> {
Nate Begeman61738782004-09-02 08:13:00 +0000802 let PPC64 = 0;
Chris Lattnerb439dad2005-10-25 20:58:43 +0000803 let Pattern = pattern;
Nate Begeman61738782004-09-02 08:13:00 +0000804 let Inst{31-0} = 0;
Misha Brukmancd4f51b2004-08-02 16:54:54 +0000805}