Several big changes:
[oota-llvm.git] / lib / Target / PowerPC / PPCInstrFormats.td
1 //===- 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
13 //===----------------------------------------------------------------------===//
14 //
15 // PowerPC instruction formats
16
17 class I<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
18         : Instruction {
19   field bits<32> Inst;
20
21   bit PPC64 = 0;  // Default value, override with isPPC64
22   bit VMX = 0;    // Default value, override with isVMX
23
24   let Name = "";
25   let Namespace = "PPC";
26   let Inst{0-5} = opcode;
27   let OperandList = OL;
28   let AsmString = asmstr;
29   let Itinerary = itin;
30   
31   /// These fields correspond to the fields in PPCInstrInfo.h.  Any changes to
32   /// these must be reflected there!  See comments there for what these are.
33   bits<1> PPC970_First = 0;
34   bits<1> PPC970_Single = 0;
35   bits<3> PPC970_Unit = 0;
36 }
37
38 class PPC970_DGroup_First  { bits<1> PPC970_First = 1;  }
39 class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; }
40 class PPC970_MicroCode;
41
42 class PPC970_Unit_Pseudo   { bits<3> PPC970_Unit = 0;   }
43 class PPC970_Unit_FXU      { bits<3> PPC970_Unit = 1;   }
44 class PPC970_Unit_LSU      { bits<3> PPC970_Unit = 2;   }
45 class PPC970_Unit_FPU      { bits<3> PPC970_Unit = 3;   }
46 class PPC970_Unit_CRU      { bits<3> PPC970_Unit = 4;   }
47 class PPC970_Unit_VALU     { bits<3> PPC970_Unit = 5;   }
48 class PPC970_Unit_VPERM    { bits<3> PPC970_Unit = 6;   }
49 class PPC970_Unit_BRU      { bits<3> PPC970_Unit = 7;   }
50
51
52 // 1.7.1 I-Form
53 class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr,
54             InstrItinClass itin, list<dag> pattern>
55          : I<opcode, OL, asmstr, itin> {
56   let Pattern = pattern;
57   bits<24> LI;
58
59   let Inst{6-29}  = LI;
60   let Inst{30}    = aa;
61   let Inst{31}    = lk;
62 }
63
64 // 1.7.2 B-Form
65 class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL, 
66             string asmstr, InstrItinClass itin>
67   : I<opcode, OL, asmstr, itin> {
68   bits<3>  CR;
69   bits<14> BD;
70
71   let Inst{6-10}  = bo;
72   let Inst{11-13} = CR;
73   let Inst{14-15} = bicode;
74   let Inst{16-29} = BD;
75   let Inst{30}    = aa;
76   let Inst{31}    = lk;
77 }
78
79 // 1.7.4 D-Form
80 class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
81                  list<dag> pattern> 
82   : I<opcode, OL, asmstr, itin> {
83   bits<5>  A;
84   bits<5>  B;
85   bits<16> C;
86
87   let Pattern = pattern;
88   
89   let Inst{6-10}  = A;
90   let Inst{11-15} = B;
91   let Inst{16-31} = C;
92 }
93
94 class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
95               list<dag> pattern>
96   : I<opcode, OL, asmstr, itin> {
97   bits<5>  A;
98   bits<16> C;
99   bits<5>  B;
100
101   let Pattern = pattern;
102   
103   let Inst{6-10}  = A;
104   let Inst{11-15} = B;
105   let Inst{16-31} = C;
106 }
107
108 class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
109               list<dag> pattern>
110   : DForm_base<opcode, OL, asmstr, itin, pattern>;
111
112 class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
113                  list<dag> pattern>
114   : I<opcode, OL, asmstr, itin> {
115   bits<5>  A;
116   bits<16> B;
117   
118   let Pattern = pattern;
119   
120   let Inst{6-10}  = A;
121   let Inst{11-15} = 0;
122   let Inst{16-31} = B;
123 }
124
125 // Currently we make the use/def reg distinction in ISel, not tablegen
126 class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
127               list<dag> pattern>
128   : DForm_1<opcode, OL, asmstr, itin, pattern>;
129
130 class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
131               list<dag> pattern>
132   : I<opcode, OL, asmstr, itin> {
133   bits<5>  B;
134   bits<5>  A;
135   bits<16> C;
136   
137   let Pattern = pattern;
138   
139   let Inst{6-10}  = A;
140   let Inst{11-15} = B;
141   let Inst{16-31} = C;
142 }
143               
144 class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
145                    list<dag> pattern>
146   : DForm_1<opcode, OL, asmstr, itin, pattern> {
147   let A = 0;
148   let B = 0;
149   let C = 0;
150 }
151
152 class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
153   : I<opcode, OL, asmstr, itin> {
154   bits<3>  BF;
155   bits<1>  L;
156   bits<5>  RA;
157   bits<16> I;
158
159   let Inst{6-8}   = BF;
160   let Inst{9}     = 0;
161   let Inst{10}    = L;
162   let Inst{11-15} = RA;
163   let Inst{16-31} = I;
164 }
165
166 class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
167   : DForm_5<opcode, OL, asmstr, itin> {
168   let L = PPC64;
169 }
170
171 class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 
172   : DForm_5<opcode, OL, asmstr, itin>;
173
174 class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin>
175   : DForm_6<opcode, OL, asmstr, itin> {
176   let L = PPC64;
177 }
178
179 class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
180               list<dag> pattern>
181   : DForm_1<opcode, OL, asmstr, itin, pattern> {
182 }
183
184 class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin,
185               list<dag> pattern>
186   : DForm_1<opcode, OL, asmstr, itin, pattern> {
187 }
188
189 // 1.7.5 DS-Form
190 class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
191                InstrItinClass itin, list<dag> pattern>
192          : I<opcode, OL, asmstr, itin> {
193   bits<5>  RST;
194   bits<14> DS;
195   bits<5>  RA;
196
197   let Pattern = pattern;
198   
199   let Inst{6-10}  = RST;
200   let Inst{11-15} = RA;
201   let Inst{16-29} = DS;
202   let Inst{30-31} = xo;
203 }
204
205 class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr,
206                InstrItinClass itin, list<dag> pattern>
207   : DSForm_1<opcode, xo, OL, asmstr, itin, pattern>;
208
209 // 1.7.6 X-Form
210 class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 
211                       InstrItinClass itin, list<dag> pattern>
212   : I<opcode, OL, asmstr, itin> {
213   bits<5> RST;
214   bits<5> A;
215   bits<5> B;
216
217   let Pattern = pattern;
218
219   bit RC = 0;    // set by isDOT
220
221   let Inst{6-10}  = RST;
222   let Inst{11-15} = A;
223   let Inst{16-20} = B;
224   let Inst{21-30} = xo;
225   let Inst{31}    = RC;
226 }
227
228 // This is the same as XForm_base_r3xo, but the first two operands are swapped
229 // when code is emitted.
230 class XForm_base_r3xo_swapped
231         <bits<6> opcode, bits<10> xo, dag OL, string asmstr,
232         InstrItinClass itin> 
233   : I<opcode, OL, asmstr, itin> {
234   bits<5> A;
235   bits<5> RST;
236   bits<5> B;
237
238   bit RC = 0;    // set by isDOT
239
240   let Inst{6-10}  = RST;
241   let Inst{11-15} = A;
242   let Inst{16-20} = B;
243   let Inst{21-30} = xo;
244   let Inst{31}    = RC;
245 }
246
247
248 class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
249               InstrItinClass itin, list<dag> pattern> 
250   : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
251
252 class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
253               InstrItinClass itin, list<dag> pattern> 
254   : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
255   let Pattern = pattern;
256 }
257
258 class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
259               InstrItinClass itin, list<dag> pattern> 
260   : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>;
261
262 class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
263                InstrItinClass itin, list<dag> pattern> 
264   : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
265     let Pattern = pattern;
266 }
267
268 class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
269                InstrItinClass itin, list<dag> pattern> 
270   : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> {
271   let B = 0;
272   let Pattern = pattern;
273 }
274
275 class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
276                InstrItinClass itin>
277          : I<opcode, OL, asmstr, itin> {
278   bits<3> BF;
279   bits<1> L; 
280   bits<5> RA;
281   bits<5> RB;
282   
283   let Inst{6-8}   = BF;
284   let Inst{9}     = 0;
285   let Inst{10}    = L;
286   let Inst{11-15} = RA;
287   let Inst{16-20} = RB;
288   let Inst{21-30} = xo;
289   let Inst{31}    = 0;
290 }
291
292 class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
293                    InstrItinClass itin>
294   : XForm_16<opcode, xo, OL, asmstr, itin> {
295   let L = PPC64;
296 }
297
298 class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
299                InstrItinClass itin>
300          : I<opcode, OL, asmstr, itin> {
301   bits<3> BF;
302   bits<5> FRA;
303   bits<5> FRB;
304   
305   let Inst{6-8}   = BF;
306   let Inst{9-10}  = 0;
307   let Inst{11-15} = FRA;
308   let Inst{16-20} = FRB;
309   let Inst{21-30} = xo;
310   let Inst{31}    = 0;
311 }
312
313 class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
314                InstrItinClass itin, list<dag> pattern> 
315   : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
316 }
317
318 class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
319                InstrItinClass itin, list<dag> pattern>
320   : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
321   let A = 0;
322 }
323
324 class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
325                InstrItinClass itin, list<dag> pattern> 
326   : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> {
327 }
328
329 // 1.7.7 XL-Form
330 class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
331                InstrItinClass itin>
332     : I<opcode, OL, asmstr, itin> {
333   bits<3> CRD;
334   bits<2> CRDb;
335   bits<3> CRA;
336   bits<2> CRAb;
337   bits<3> CRB;
338   bits<2> CRBb;
339   
340   let Inst{6-8}   = CRD;
341   let Inst{9-10}  = CRDb;
342   let Inst{11-13} = CRA;
343   let Inst{14-15} = CRAb;
344   let Inst{16-18} = CRB;
345   let Inst{19-20} = CRBb;
346   let Inst{21-30} = xo;
347   let Inst{31}    = 0;
348 }
349
350 class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr, 
351                InstrItinClass itin, list<dag> pattern>
352     : I<opcode, OL, asmstr, itin> {
353   bits<5> BO;
354   bits<5> BI;
355   bits<2> BH;
356   
357   let Pattern = pattern;
358   
359   let Inst{6-10}  = BO;
360   let Inst{11-15} = BI;
361   let Inst{16-18} = 0;
362   let Inst{19-20} = BH;
363   let Inst{21-30} = xo;
364   let Inst{31}    = lk;
365 }
366
367 class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,  bits<5> bi, bit lk,
368                   dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
369   : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> {
370   let BO = bo;
371   let BI = bi;
372   let BH = 0;
373 }
374
375 class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
376                InstrItinClass itin>
377          : I<opcode, OL, asmstr, itin> {
378   bits<3> BF;
379   bits<3> BFA;
380   
381   let Inst{6-8}   = BF;
382   let Inst{9-10}  = 0;
383   let Inst{11-13} = BFA;
384   let Inst{14-15} = 0;
385   let Inst{16-20} = 0;
386   let Inst{21-30} = xo;
387   let Inst{31}    = 0;
388 }
389
390 // 1.7.8 XFX-Form
391 class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
392                 InstrItinClass itin>
393          : I<opcode, OL, asmstr, itin> {
394   bits<5>  RT;
395   bits<10> SPR;
396
397   let Inst{6-10}  = RT;
398   let Inst{11}    = SPR{4};
399   let Inst{12}    = SPR{3};
400   let Inst{13}    = SPR{2};
401   let Inst{14}    = SPR{1};
402   let Inst{15}    = SPR{0};
403   let Inst{16}    = SPR{9};
404   let Inst{17}    = SPR{8};
405   let Inst{18}    = SPR{7};
406   let Inst{19}    = SPR{6};
407   let Inst{20}    = SPR{5};
408   let Inst{21-30} = xo;
409   let Inst{31}    = 0;
410 }
411
412 class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 
413                    dag OL, string asmstr, InstrItinClass itin> 
414   : XFXForm_1<opcode, xo, OL, asmstr, itin> {
415   let SPR = spr;
416 }
417
418 class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
419                 InstrItinClass itin>
420          : I<opcode, OL, asmstr, itin> {
421   bits<5>  RT;
422    
423   let Inst{6-10}  = RT;
424   let Inst{11-20} = 0;
425   let Inst{21-30} = xo;
426   let Inst{31}    = 0;
427 }
428
429 class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
430                 InstrItinClass itin> 
431   : I<opcode, OL, asmstr, itin> {
432   bits<8>  FXM;
433   bits<5>  ST;
434    
435   let Inst{6-10}  = ST;
436   let Inst{11}    = 0;
437   let Inst{12-19} = FXM;
438   let Inst{20}    = 0;
439   let Inst{21-30} = xo;
440   let Inst{31}    = 0;
441 }
442
443 class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
444                  InstrItinClass itin> 
445   : I<opcode, OL, asmstr, itin> {
446   bits<5>  ST;
447   bits<8>  FXM;
448    
449   let Inst{6-10}  = ST;
450   let Inst{11}    = 1;
451   let Inst{12-19} = FXM;
452   let Inst{20}    = 0;
453   let Inst{21-30} = xo;
454   let Inst{31}    = 0;
455 }
456
457 class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr,
458                 InstrItinClass itin>
459   : XFXForm_1<opcode, xo, OL, asmstr, itin>;
460
461 class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 
462                     dag OL, string asmstr, InstrItinClass itin> 
463   : XFXForm_7<opcode, xo, OL, asmstr, itin> {
464   let SPR = spr;
465 }
466
467 // 1.7.10 XS-Form
468 class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr,
469                InstrItinClass itin>
470          : I<opcode, OL, asmstr, itin> {
471   bits<5> RS;
472   bits<5> A;
473   bits<6> SH;
474
475   bit RC = 0;    // set by isDOT
476
477   let Inst{6-10}  = RS;
478   let Inst{11-15} = A;
479   let Inst{16-20} = SH{1-5};
480   let Inst{21-29} = xo;
481   let Inst{30}    = SH{0};
482   let Inst{31}    = RC;
483 }
484
485 // 1.7.11 XO-Form
486 class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr,
487                InstrItinClass itin, list<dag> pattern>
488          : I<opcode, OL, asmstr, itin> {
489   bits<5> RT;
490   bits<5> RA;
491   bits<5> RB;
492
493   let Pattern = pattern;
494
495   bit RC = 0;    // set by isDOT
496
497   let Inst{6-10}  = RT;
498   let Inst{11-15} = RA;
499   let Inst{16-20} = RB;
500   let Inst{21}    = oe;
501   let Inst{22-30} = xo;
502   let Inst{31}    = RC;  
503 }
504
505 class XOForm_3<bits<6> opcode, bits<9> xo, bit oe, 
506                dag OL, string asmstr, InstrItinClass itin, list<dag> pattern>
507   : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> {
508   let RB = 0;
509 }
510
511 // 1.7.12 A-Form
512 class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr, 
513               InstrItinClass itin, list<dag> pattern>
514          : I<opcode, OL, asmstr, itin> {
515   bits<5> FRT;
516   bits<5> FRA;
517   bits<5> FRC;
518   bits<5> FRB;
519
520   let Pattern = pattern;
521
522   bit RC = 0;    // set by isDOT
523
524   let Inst{6-10}  = FRT;
525   let Inst{11-15} = FRA;
526   let Inst{16-20} = FRB;
527   let Inst{21-25} = FRC;
528   let Inst{26-30} = xo;
529   let Inst{31}    = RC;
530 }
531
532 class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
533               InstrItinClass itin, list<dag> pattern>
534   : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
535   let FRC = 0;
536 }
537
538 class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr,
539               InstrItinClass itin, list<dag> pattern> 
540   : AForm_1<opcode, xo, OL, asmstr, itin, pattern> {
541   let FRB = 0;
542 }
543
544 // 1.7.13 M-Form
545 class MForm_1<bits<6> opcode, dag OL, string asmstr,
546               InstrItinClass itin, list<dag> pattern>
547     : I<opcode, OL, asmstr, itin> {
548   bits<5> RA;
549   bits<5> RS;
550   bits<5> RB;
551   bits<5> MB;
552   bits<5> ME;
553
554   let Pattern = pattern;
555
556   bit RC = 0;    // set by isDOT
557
558   let Inst{6-10}  = RS;
559   let Inst{11-15} = RA;
560   let Inst{16-20} = RB;
561   let Inst{21-25} = MB;
562   let Inst{26-30} = ME;
563   let Inst{31}    = RC;
564 }
565
566 class MForm_2<bits<6> opcode, dag OL, string asmstr,
567               InstrItinClass itin, list<dag> pattern>
568   : MForm_1<opcode, OL, asmstr, itin, pattern> {
569 }
570
571 // 1.7.14 MD-Form
572 class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr,
573                InstrItinClass itin, list<dag> pattern>
574     : I<opcode, OL, asmstr, itin> {
575   bits<5> RS;
576   bits<5> RA;
577   bits<6> SH;
578   bits<6> MBE;
579
580   let Pattern = pattern;
581
582   bit RC = 0;    // set by isDOT
583
584   let Inst{6-10}  = RS;
585   let Inst{11-15} = RA;
586   let Inst{16-20} = SH{1-5};
587   let Inst{21-26} = MBE;
588   let Inst{27-29} = xo;
589   let Inst{30}    = SH{0};
590   let Inst{31}    = RC;
591 }
592
593 // E-1 VA-Form
594 class VAForm_1<bits<6> xo, dag OL, string asmstr,
595                InstrItinClass itin, list<dag> pattern>
596     : I<4, OL, asmstr, itin> {
597   bits<5> VD;
598   bits<5> VA;
599   bits<5> VB;
600   bits<5> VC;
601
602   let Pattern = pattern;
603   
604   let Inst{6-10}  = VD;
605   let Inst{11-15} = VA;
606   let Inst{16-20} = VB;
607   let Inst{21-25} = VC;
608   let Inst{26-31} = xo;
609 }
610
611 // E-2 VX-Form
612 class VXForm_1<bits<11> xo, dag OL, string asmstr,
613                InstrItinClass itin, list<dag> pattern>
614     : I<4, OL, asmstr, itin> {
615   bits<5> VD;
616   bits<5> VA;
617   bits<5> VB;
618   
619   let Pattern = pattern;
620   
621   let Inst{6-10}  = VD;
622   let Inst{11-15} = VA;
623   let Inst{16-20} = VB;
624   let Inst{21-31} = xo;
625 }
626
627 class VXForm_setzero<bits<11> xo, dag OL, string asmstr,
628                InstrItinClass itin, list<dag> pattern>
629     : VXForm_1<xo, OL, asmstr, itin, pattern> {
630   let VA = VD;
631   let VB = VD;
632 }
633
634
635 class VXForm_2<bits<11> xo, dag OL, string asmstr,
636                InstrItinClass itin, list<dag> pattern>
637     : I<4, OL, asmstr, itin> {
638   bits<5> VD;
639   bits<5> VB;
640   
641   let Pattern = pattern;
642   
643   let Inst{6-10}  = VD;
644   let Inst{11-15} = 0;
645   let Inst{16-20} = VB;
646   let Inst{21-31} = xo;
647 }
648
649 // E-4 VXR-Form
650 class VXRForm_1<bits<10> xo, bit rc, dag OL, string asmstr,
651                InstrItinClass itin, list<dag> pattern>
652     : I<4, OL, asmstr, itin> {
653   bits<5> VD;
654   bits<5> VA;
655   bits<5> VB;
656   
657   let Pattern = pattern;
658   
659   let Inst{6-10}  = VD;
660   let Inst{11-15} = VA;
661   let Inst{16-20} = VB;
662   let Inst{21}    = rc;
663   let Inst{22-31} = xo;
664 }
665
666 //===----------------------------------------------------------------------===//
667 class Pseudo<dag OL, string asmstr, list<dag> pattern>
668     : I<0, OL, asmstr, NoItinerary> {
669   let PPC64 = 0;
670   let VMX = 0;
671   let Pattern = pattern;
672   let Inst{31-0} = 0;
673 }