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