blob: 1a47593604fd938ecbad03bfe9213df810017831 [file] [log] [blame]
Misha Brukman28791dd2004-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> {
14 bits<5> Value = val;
15}
16
17def Pseudo: Format<0>;
18def Gpr : Format<1>;
19def Gpr0 : Format<2>;
20def Simm16 : Format<3>;
21def Zimm16 : Format<4>;
22def PCRelimm24 : Format<5>;
23def Imm24 : Format<6>;
24def Imm5 : Format<7>;
25def PCRelimm14 : Format<8>;
26def Imm14 : Format<9>;
27def Imm2 : Format<10>;
28def Crf : Format<11>;
29def Imm3 : Format<12>;
30def Imm1 : Format<13>;
31def Fpr : Format<14>;
32def Imm4 : Format<15>;
33def Imm8 : Format<16>;
34def Disimm16 : Format<17>;
35def Disimm14 : Format<18>;
36def Spr : Format<19>;
37def Sgr : Format<20>;
38def Imm15 : Format<21>;
39def Vpr : Format<22>;
40
41class PPC32Inst : Instruction {
42 field bits<32> Inst;
43 bits<3> ArgCount;
44 bits<5> Arg0Type;
45 bits<5> Arg1Type;
46 bits<5> Arg2Type;
47 bits<5> Arg3Type;
48 bits<5> Arg4Type;
49 bit PPC64;
50 bit VMX;
51
52 let Namespace = "PPC32";
53}
54
55class PPC32InstPattern0 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
56 let Name = name;
57 let ArgCount = 3;
58 let PPC64 = ppc64;
59 let VMX =vmx;
60
61 let Arg0Type = OperandType0.Value;
62 let Arg1Type = OperandType1.Value;
63 let Arg2Type = OperandType2.Value;
64 let Arg3Type = 0;
65 let Arg4Type = 0;
66 let PPC64 = 0;
67 let VMX = 0;
68 bits<5> operand0;
69 bits<5> operand1;
70 bits<16> operand2;
71
72
73 let Inst {31-26} = opconstant0;
74 let Inst {25-21} = operand0;
75 let Inst {20-16} = operand1;
76 let Inst {15-0} = operand2;
77}
78
79class PPC32InstPattern1 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<5> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
80 let Name = name;
81 let ArgCount = 2;
82 let PPC64 = ppc64;
83 let VMX =vmx;
84
85 let Arg0Type = OperandType0.Value;
86 let Arg1Type = OperandType1.Value;
87 let Arg2Type = 0;
88 let Arg3Type = 0;
89 let Arg4Type = 0;
90 let PPC64 = 0;
91 let VMX = 0;
92 bits<5> operand0;
93 bits<16> operand1;
94
95
96 let Inst {31-26} = opconstant0;
97 let Inst {20-16} = opconstant1;
98 let Inst {25-21} = operand0;
99 let Inst {15-0} = operand1;
100}
101
102class PPC32InstPattern2 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
103 let Name = name;
104 let ArgCount = 3;
105 let PPC64 = ppc64;
106 let VMX =vmx;
107
108 let Arg0Type = OperandType0.Value;
109 let Arg1Type = OperandType1.Value;
110 let Arg2Type = OperandType2.Value;
111 let Arg3Type = 0;
112 let Arg4Type = 0;
113 let PPC64 = 0;
114 let VMX = 0;
115 bits<5> operand0;
116 bits<5> operand1;
117 bits<5> operand2;
118
119
120 let Inst {31-26} = opconstant0;
121 let Inst {10-0} = opconstant1;
122 let Inst {25-21} = operand0;
123 let Inst {20-16} = operand1;
124 let Inst {15-11} = operand2;
125}
126
127class PPC32InstPattern3 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<16> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
128 let Name = name;
129 let ArgCount = 2;
130 let PPC64 = ppc64;
131 let VMX =vmx;
132
133 let Arg0Type = OperandType0.Value;
134 let Arg1Type = OperandType1.Value;
135 let Arg2Type = 0;
136 let Arg3Type = 0;
137 let Arg4Type = 0;
138 let PPC64 = 0;
139 let VMX = 0;
140 bits<5> operand0;
141 bits<5> operand1;
142
143
144 let Inst {31-26} = opconstant0;
145 let Inst {15-0} = opconstant1;
146 let Inst {25-21} = operand0;
147 let Inst {20-16} = operand1;
148}
149
150class PPC32InstPattern4 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
151 let Name = name;
152 let ArgCount = 3;
153 let PPC64 = ppc64;
154 let VMX =vmx;
155
156 let Arg0Type = OperandType0.Value;
157 let Arg1Type = OperandType1.Value;
158 let Arg2Type = OperandType2.Value;
159 let Arg3Type = 0;
160 let Arg4Type = 0;
161 let PPC64 = 0;
162 let VMX = 0;
163 bits<5> operand0;
164 bits<5> operand1;
165 bits<16> operand2;
166
167
168 let Inst {31-26} = opconstant0;
169 let Inst {20-16} = operand0;
170 let Inst {25-21} = operand1;
171 let Inst {15-0} = operand2;
172}
173
174class PPC32InstPattern5 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
175 let Name = name;
176 let ArgCount = 3;
177 let PPC64 = ppc64;
178 let VMX =vmx;
179
180 let Arg0Type = OperandType0.Value;
181 let Arg1Type = OperandType1.Value;
182 let Arg2Type = OperandType2.Value;
183 let Arg3Type = 0;
184 let Arg4Type = 0;
185 let PPC64 = 0;
186 let VMX = 0;
187 bits<5> operand0;
188 bits<5> operand1;
189 bits<5> operand2;
190
191
192 let Inst {31-26} = opconstant0;
193 let Inst {10-0} = opconstant1;
194 let Inst {20-16} = operand0;
195 let Inst {25-21} = operand1;
196 let Inst {15-11} = operand2;
197}
198
199class PPC32InstPattern6 <string name, Format OperandType0, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
200 let Name = name;
201 let ArgCount = 1;
202 let PPC64 = ppc64;
203 let VMX =vmx;
204
205 let Arg0Type = OperandType0.Value;
206 let Arg1Type = 0;
207 let Arg2Type = 0;
208 let Arg3Type = 0;
209 let Arg4Type = 0;
210 let PPC64 = 0;
211 let VMX = 0;
212 bits<24> operand0;
213
214
215 let Inst {31-26} = opconstant0;
216 let Inst {1-0} = opconstant1;
217 let Inst {25-2} = operand0;
218}
219
220class PPC32InstPattern7 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
221 let Name = name;
222 let ArgCount = 3;
223 let PPC64 = ppc64;
224 let VMX =vmx;
225
226 let Arg0Type = OperandType0.Value;
227 let Arg1Type = OperandType1.Value;
228 let Arg2Type = OperandType2.Value;
229 let Arg3Type = 0;
230 let Arg4Type = 0;
231 let PPC64 = 0;
232 let VMX = 0;
233 bits<5> operand0;
234 bits<5> operand1;
235 bits<14> operand2;
236
237
238 let Inst {31-26} = opconstant0;
239 let Inst {1-0} = opconstant1;
240 let Inst {25-21} = operand0;
241 let Inst {20-16} = operand1;
242 let Inst {15-2} = operand2;
243}
244
245class PPC32InstPattern8 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<3> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
246 let Name = name;
247 let ArgCount = 3;
248 let PPC64 = ppc64;
249 let VMX =vmx;
250
251 let Arg0Type = OperandType0.Value;
252 let Arg1Type = OperandType1.Value;
253 let Arg2Type = OperandType2.Value;
254 let Arg3Type = 0;
255 let Arg4Type = 0;
256 let PPC64 = 0;
257 let VMX = 0;
258 bits<5> operand0;
259 bits<5> operand1;
260 bits<2> operand2;
261
262
263 let Inst {31-26} = opconstant0;
264 let Inst {15-13} = opconstant1;
265 let Inst {10-0} = opconstant2;
266 let Inst {25-21} = operand0;
267 let Inst {20-16} = operand1;
268 let Inst {12-11} = operand2;
269}
270
271class PPC32InstPattern9 <string name, Format OperandType0, Format OperandType1, bits<11> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
272 let Name = name;
273 let ArgCount = 2;
274 let PPC64 = ppc64;
275 let VMX =vmx;
276
277 let Arg0Type = OperandType0.Value;
278 let Arg1Type = OperandType1.Value;
279 let Arg2Type = 0;
280 let Arg3Type = 0;
281 let Arg4Type = 0;
282 let PPC64 = 0;
283 let VMX = 0;
284 bits<5> operand0;
285 bits<14> operand1;
286
287
288 let Inst {31-21} = opconstant0;
289 let Inst {1-0} = opconstant1;
290 let Inst {20-16} = operand0;
291 let Inst {15-2} = operand1;
292}
293
294class PPC32InstPattern10 <string name, Format OperandType0, bits<16> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
295 let Name = name;
296 let ArgCount = 1;
297 let PPC64 = ppc64;
298 let VMX =vmx;
299
300 let Arg0Type = OperandType0.Value;
301 let Arg1Type = 0;
302 let Arg2Type = 0;
303 let Arg3Type = 0;
304 let Arg4Type = 0;
305 let PPC64 = 0;
306 let VMX = 0;
307 bits<14> operand0;
308
309
310 let Inst {31-16} = opconstant0;
311 let Inst {1-0} = opconstant1;
312 let Inst {15-2} = operand0;
313}
314
315class PPC32InstPattern11 <string name, Format OperandType0, bits<19> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
316 let Name = name;
317 let ArgCount = 1;
318 let PPC64 = ppc64;
319 let VMX =vmx;
320
321 let Arg0Type = OperandType0.Value;
322 let Arg1Type = 0;
323 let Arg2Type = 0;
324 let Arg3Type = 0;
325 let Arg4Type = 0;
326 let PPC64 = 0;
327 let VMX = 0;
328 bits<2> operand0;
329
330
331 let Inst {31-13} = opconstant0;
332 let Inst {10-0} = opconstant1;
333 let Inst {12-11} = operand0;
334}
335
336class PPC32InstPattern12 <string name, Format OperandType0, Format OperandType1, bits<11> opconstant0, bits<3> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
337 let Name = name;
338 let ArgCount = 2;
339 let PPC64 = ppc64;
340 let VMX =vmx;
341
342 let Arg0Type = OperandType0.Value;
343 let Arg1Type = OperandType1.Value;
344 let Arg2Type = 0;
345 let Arg3Type = 0;
346 let Arg4Type = 0;
347 let PPC64 = 0;
348 let VMX = 0;
349 bits<5> operand0;
350 bits<2> operand1;
351
352
353 let Inst {31-21} = opconstant0;
354 let Inst {15-13} = opconstant1;
355 let Inst {10-0} = opconstant2;
356 let Inst {20-16} = operand0;
357 let Inst {12-11} = operand1;
358}
359
360class PPC32InstPattern13 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<1> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
361 let Name = name;
362 let ArgCount = 4;
363 let PPC64 = ppc64;
364 let VMX =vmx;
365
366 let Arg0Type = OperandType0.Value;
367 let Arg1Type = OperandType1.Value;
368 let Arg2Type = OperandType2.Value;
369 let Arg3Type = OperandType3.Value;
370 let Arg4Type = 0;
371 let PPC64 = 0;
372 let VMX = 0;
373 bits<3> operand0;
374 bits<1> operand1;
375 bits<5> operand2;
376 bits<16> operand3;
377
378
379 let Inst {31-26} = opconstant0;
380 let Inst {22} = opconstant1;
381 let Inst {25-23} = operand0;
382 let Inst {21} = operand1;
383 let Inst {20-16} = operand2;
384 let Inst {15-0} = operand3;
385}
386
387class PPC32InstPattern14 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
388 let Name = name;
389 let ArgCount = 3;
390 let PPC64 = ppc64;
391 let VMX =vmx;
392
393 let Arg0Type = OperandType0.Value;
394 let Arg1Type = OperandType1.Value;
395 let Arg2Type = OperandType2.Value;
396 let Arg3Type = 0;
397 let Arg4Type = 0;
398 let PPC64 = 0;
399 let VMX = 0;
400 bits<3> operand0;
401 bits<5> operand1;
402 bits<16> operand2;
403
404
405 let Inst {31-26} = opconstant0;
406 let Inst {22-21} = opconstant1;
407 let Inst {25-23} = operand0;
408 let Inst {20-16} = operand1;
409 let Inst {15-0} = operand2;
410}
411
412class PPC32InstPattern15 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<1> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
413 let Name = name;
414 let ArgCount = 4;
415 let PPC64 = ppc64;
416 let VMX =vmx;
417
418 let Arg0Type = OperandType0.Value;
419 let Arg1Type = OperandType1.Value;
420 let Arg2Type = OperandType2.Value;
421 let Arg3Type = OperandType3.Value;
422 let Arg4Type = 0;
423 let PPC64 = 0;
424 let VMX = 0;
425 bits<3> operand0;
426 bits<1> operand1;
427 bits<5> operand2;
428 bits<5> operand3;
429
430
431 let Inst {31-26} = opconstant0;
432 let Inst {22} = opconstant1;
433 let Inst {10-0} = opconstant2;
434 let Inst {25-23} = operand0;
435 let Inst {21} = operand1;
436 let Inst {20-16} = operand2;
437 let Inst {15-11} = operand3;
438}
439
440class PPC32InstPattern16 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
441 let Name = name;
442 let ArgCount = 3;
443 let PPC64 = ppc64;
444 let VMX =vmx;
445
446 let Arg0Type = OperandType0.Value;
447 let Arg1Type = OperandType1.Value;
448 let Arg2Type = OperandType2.Value;
449 let Arg3Type = 0;
450 let Arg4Type = 0;
451 let PPC64 = 0;
452 let VMX = 0;
453 bits<3> operand0;
454 bits<5> operand1;
455 bits<5> operand2;
456
457
458 let Inst {31-26} = opconstant0;
459 let Inst {22-21} = opconstant1;
460 let Inst {10-0} = opconstant2;
461 let Inst {25-23} = operand0;
462 let Inst {20-16} = operand1;
463 let Inst {15-11} = operand2;
464}
465
466class PPC32InstPattern17 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<16> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
467 let Name = name;
468 let ArgCount = 2;
469 let PPC64 = ppc64;
470 let VMX =vmx;
471
472 let Arg0Type = OperandType0.Value;
473 let Arg1Type = OperandType1.Value;
474 let Arg2Type = 0;
475 let Arg3Type = 0;
476 let Arg4Type = 0;
477 let PPC64 = 0;
478 let VMX = 0;
479 bits<5> operand0;
480 bits<5> operand1;
481
482
483 let Inst {31-26} = opconstant0;
484 let Inst {15-0} = opconstant1;
485 let Inst {20-16} = operand0;
486 let Inst {25-21} = operand1;
487}
488
489class PPC32InstPattern18 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<5> opconstant1, bits<6> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
490 let Name = name;
491 let ArgCount = 3;
492 let PPC64 = ppc64;
493 let VMX =vmx;
494
495 let Arg0Type = OperandType0.Value;
496 let Arg1Type = OperandType1.Value;
497 let Arg2Type = OperandType2.Value;
498 let Arg3Type = 0;
499 let Arg4Type = 0;
500 let PPC64 = 0;
501 let VMX = 0;
502 bits<5> operand0;
503 bits<5> operand1;
504 bits<5> operand2;
505
506
507 let Inst {31-26} = opconstant0;
508 let Inst {15-11} = opconstant1;
509 let Inst {5-0} = opconstant2;
510 let Inst {25-21} = operand0;
511 let Inst {20-16} = operand1;
512 let Inst {10-6} = operand2;
513}
514
515class PPC32InstPattern19 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<6> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
516 let Name = name;
517 let ArgCount = 4;
518 let PPC64 = ppc64;
519 let VMX =vmx;
520
521 let Arg0Type = OperandType0.Value;
522 let Arg1Type = OperandType1.Value;
523 let Arg2Type = OperandType2.Value;
524 let Arg3Type = OperandType3.Value;
525 let Arg4Type = 0;
526 let PPC64 = 0;
527 let VMX = 0;
528 bits<5> operand0;
529 bits<5> operand1;
530 bits<5> operand2;
531 bits<5> operand3;
532
533
534 let Inst {31-26} = opconstant0;
535 let Inst {5-0} = opconstant1;
536 let Inst {25-21} = operand0;
537 let Inst {20-16} = operand1;
538 let Inst {10-6} = operand2;
539 let Inst {15-11} = operand3;
540}
541
542class PPC32InstPattern20 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<5> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
543 let Name = name;
544 let ArgCount = 2;
545 let PPC64 = ppc64;
546 let VMX =vmx;
547
548 let Arg0Type = OperandType0.Value;
549 let Arg1Type = OperandType1.Value;
550 let Arg2Type = 0;
551 let Arg3Type = 0;
552 let Arg4Type = 0;
553 let PPC64 = 0;
554 let VMX = 0;
555 bits<5> operand0;
556 bits<5> operand1;
557
558
559 let Inst {31-26} = opconstant0;
560 let Inst {20-16} = opconstant1;
561 let Inst {10-0} = opconstant2;
562 let Inst {25-21} = operand0;
563 let Inst {15-11} = operand1;
564}
565
566class PPC32InstPattern21 <string name, Format OperandType0, bits<6> opconstant0, bits<21> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
567 let Name = name;
568 let ArgCount = 1;
569 let PPC64 = ppc64;
570 let VMX =vmx;
571
572 let Arg0Type = OperandType0.Value;
573 let Arg1Type = 0;
574 let Arg2Type = 0;
575 let Arg3Type = 0;
576 let Arg4Type = 0;
577 let PPC64 = 0;
578 let VMX = 0;
579 bits<5> operand0;
580
581
582 let Inst {31-26} = opconstant0;
583 let Inst {20-0} = opconstant1;
584 let Inst {25-21} = operand0;
585}
586
587class PPC32InstPattern22 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<18> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
588 let Name = name;
589 let ArgCount = 2;
590 let PPC64 = ppc64;
591 let VMX =vmx;
592
593 let Arg0Type = OperandType0.Value;
594 let Arg1Type = OperandType1.Value;
595 let Arg2Type = 0;
596 let Arg3Type = 0;
597 let Arg4Type = 0;
598 let PPC64 = 0;
599 let VMX = 0;
600 bits<3> operand0;
601 bits<5> operand1;
602
603
604 let Inst {31-26} = opconstant0;
605 let Inst {17-0} = opconstant1;
606 let Inst {25-23} = operand0;
607 let Inst {22-18} = operand1;
608}
609
610class PPC32InstPattern23 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<7> opconstant1, bits<12> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
611 let Name = name;
612 let ArgCount = 2;
613 let PPC64 = ppc64;
614 let VMX =vmx;
615
616 let Arg0Type = OperandType0.Value;
617 let Arg1Type = OperandType1.Value;
618 let Arg2Type = 0;
619 let Arg3Type = 0;
620 let Arg4Type = 0;
621 let PPC64 = 0;
622 let VMX = 0;
623 bits<3> operand0;
624 bits<4> operand1;
625
626
627 let Inst {31-26} = opconstant0;
628 let Inst {22-16} = opconstant1;
629 let Inst {11-0} = opconstant2;
630 let Inst {25-23} = operand0;
631 let Inst {15-12} = operand1;
632}
633
634class PPC32InstPattern24 <string name, Format OperandType0, Format OperandType1, bits<7> opconstant0, bits<1> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
635 let Name = name;
636 let ArgCount = 2;
637 let PPC64 = ppc64;
638 let VMX =vmx;
639
640 let Arg0Type = OperandType0.Value;
641 let Arg1Type = OperandType1.Value;
642 let Arg2Type = 0;
643 let Arg3Type = 0;
644 let Arg4Type = 0;
645 let PPC64 = 0;
646 let VMX = 0;
647 bits<8> operand0;
648 bits<5> operand1;
649
650
651 let Inst {31-25} = opconstant0;
652 let Inst {16} = opconstant1;
653 let Inst {10-0} = opconstant2;
654 let Inst {24-17} = operand0;
655 let Inst {15-11} = operand1;
656}
657
658class PPC32InstPattern25 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
659 let Name = name;
660 let ArgCount = 3;
661 let PPC64 = ppc64;
662 let VMX =vmx;
663
664 let Arg0Type = OperandType0.Value;
665 let Arg1Type = OperandType1.Value;
666 let Arg2Type = OperandType2.Value;
667 let Arg3Type = 0;
668 let Arg4Type = 0;
669 let PPC64 = 0;
670 let VMX = 0;
671 bits<5> operand0;
672 bits<16> operand1;
673 bits<5> operand2;
674
675
676 let Inst {31-26} = opconstant0;
677 let Inst {25-21} = operand0;
678 let Inst {15-0} = operand1;
679 let Inst {20-16} = operand2;
680}
681
682class PPC32InstPattern26 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
683 let Name = name;
684 let ArgCount = 3;
685 let PPC64 = ppc64;
686 let VMX =vmx;
687
688 let Arg0Type = OperandType0.Value;
689 let Arg1Type = OperandType1.Value;
690 let Arg2Type = OperandType2.Value;
691 let Arg3Type = 0;
692 let Arg4Type = 0;
693 let PPC64 = 0;
694 let VMX = 0;
695 bits<5> operand0;
696 bits<14> operand1;
697 bits<5> operand2;
698
699
700 let Inst {31-26} = opconstant0;
701 let Inst {1-0} = opconstant1;
702 let Inst {25-21} = operand0;
703 let Inst {15-2} = operand1;
704 let Inst {20-16} = operand2;
705}
706
707class PPC32InstPattern27 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<2> opconstant1, bits<18> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
708 let Name = name;
709 let ArgCount = 2;
710 let PPC64 = ppc64;
711 let VMX =vmx;
712
713 let Arg0Type = OperandType0.Value;
714 let Arg1Type = OperandType1.Value;
715 let Arg2Type = 0;
716 let Arg3Type = 0;
717 let Arg4Type = 0;
718 let PPC64 = 0;
719 let VMX = 0;
720 bits<3> operand0;
721 bits<3> operand1;
722
723
724 let Inst {31-26} = opconstant0;
725 let Inst {22-21} = opconstant1;
726 let Inst {17-0} = opconstant2;
727 let Inst {25-23} = operand0;
728 let Inst {20-18} = operand1;
729}
730
731class PPC32InstPattern28 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
732 let Name = name;
733 let ArgCount = 2;
734 let PPC64 = ppc64;
735 let VMX =vmx;
736
737 let Arg0Type = OperandType0.Value;
738 let Arg1Type = OperandType1.Value;
739 let Arg2Type = 0;
740 let Arg3Type = 0;
741 let Arg4Type = 0;
742 let PPC64 = 0;
743 let VMX = 0;
744 bits<5> operand0;
745 bits<10> operand1;
746
747
748 let Inst {31-26} = opconstant0;
749 let Inst {10-0} = opconstant1;
750 let Inst {25-21} = operand0;
751 let Inst {20-11} = operand1;
752}
753
754class PPC32InstPattern29 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
755 let Name = name;
756 let ArgCount = 2;
757 let PPC64 = ppc64;
758 let VMX =vmx;
759
760 let Arg0Type = OperandType0.Value;
761 let Arg1Type = OperandType1.Value;
762 let Arg2Type = 0;
763 let Arg3Type = 0;
764 let Arg4Type = 0;
765 let PPC64 = 0;
766 let VMX = 0;
767 bits<10> operand0;
768 bits<5> operand1;
769
770
771 let Inst {31-26} = opconstant0;
772 let Inst {10-0} = opconstant1;
773 let Inst {20-11} = operand0;
774 let Inst {25-21} = operand1;
775}
776
777class PPC32InstPattern30 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<1> opconstant1, bits<12> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
778 let Name = name;
779 let ArgCount = 2;
780 let PPC64 = ppc64;
781 let VMX =vmx;
782
783 let Arg0Type = OperandType0.Value;
784 let Arg1Type = OperandType1.Value;
785 let Arg2Type = 0;
786 let Arg3Type = 0;
787 let Arg4Type = 0;
788 let PPC64 = 0;
789 let VMX = 0;
790 bits<8> operand0;
791 bits<5> operand1;
792
793
794 let Inst {31-26} = opconstant0;
795 let Inst {20} = opconstant1;
796 let Inst {11-0} = opconstant2;
797 let Inst {19-12} = operand0;
798 let Inst {25-21} = operand1;
799}
800
801class PPC32InstPattern31 <string name, Format OperandType0, bits<6> opconstant0, bits<23> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
802 let Name = name;
803 let ArgCount = 1;
804 let PPC64 = ppc64;
805 let VMX =vmx;
806
807 let Arg0Type = OperandType0.Value;
808 let Arg1Type = 0;
809 let Arg2Type = 0;
810 let Arg3Type = 0;
811 let Arg4Type = 0;
812 let PPC64 = 0;
813 let VMX = 0;
814 bits<3> operand0;
815
816
817 let Inst {31-26} = opconstant0;
818 let Inst {22-0} = opconstant1;
819 let Inst {25-23} = operand0;
820}
821
822class PPC32InstPattern32 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<1> opconstant1, bits<12> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
823 let Name = name;
824 let ArgCount = 2;
825 let PPC64 = ppc64;
826 let VMX =vmx;
827
828 let Arg0Type = OperandType0.Value;
829 let Arg1Type = OperandType1.Value;
830 let Arg2Type = 0;
831 let Arg3Type = 0;
832 let Arg4Type = 0;
833 let PPC64 = 0;
834 let VMX = 0;
835 bits<5> operand0;
836 bits<8> operand1;
837
838
839 let Inst {31-26} = opconstant0;
840 let Inst {20} = opconstant1;
841 let Inst {11-0} = opconstant2;
842 let Inst {25-21} = operand0;
843 let Inst {19-12} = operand1;
844}
845
846class PPC32InstPattern33 <string name, bits<32> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
847 let Name = name;
848 let ArgCount = 0;
849 let PPC64 = ppc64;
850 let VMX =vmx;
851
852 let Arg0Type = 0;
853 let Arg1Type = 0;
854 let Arg2Type = 0;
855 let Arg3Type = 0;
856 let Arg4Type = 0;
857 let PPC64 = 0;
858 let VMX = 0;
859
860
861 let Inst {31-0} = opconstant0;
862}
863
864class PPC32InstPattern34 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, Format OperandType4, bits<6> opconstant0, bits<1> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
865 let Name = name;
866 let ArgCount = 5;
867 let PPC64 = ppc64;
868 let VMX =vmx;
869
870 let Arg0Type = OperandType0.Value;
871 let Arg1Type = OperandType1.Value;
872 let Arg2Type = OperandType2.Value;
873 let Arg3Type = OperandType3.Value;
874 let Arg4Type = OperandType4.Value;
875 let PPC64 = 0;
876 let VMX = 0;
877 bits<5> operand0;
878 bits<5> operand1;
879 bits<5> operand2;
880 bits<5> operand3;
881 bits<5> operand4;
882
883
884 let Inst {31-26} = opconstant0;
885 let Inst {0} = opconstant1;
886 let Inst {20-16} = operand0;
887 let Inst {25-21} = operand1;
888 let Inst {15-11} = operand2;
889 let Inst {10-6} = operand3;
890 let Inst {5-1} = operand4;
891}
892
893class PPC32InstPattern35 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
894 let Name = name;
895 let ArgCount = 3;
896 let PPC64 = ppc64;
897 let VMX =vmx;
898
899 let Arg0Type = OperandType0.Value;
900 let Arg1Type = OperandType1.Value;
901 let Arg2Type = OperandType2.Value;
902 let Arg3Type = 0;
903 let Arg4Type = 0;
904 let PPC64 = 0;
905 let VMX = 0;
906 bits<5> operand0;
907 bits<5> operand1;
908 bits<5> operand2;
909
910
911 let Inst {31-26} = opconstant0;
912 let Inst {10-0} = opconstant1;
913 let Inst {25-21} = operand0;
914 let Inst {15-11} = operand1;
915 let Inst {20-16} = operand2;
916}
917
918class PPC32InstPattern36 <string name, Format OperandType0, bits<9> opconstant0, bits<21> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
919 let Name = name;
920 let ArgCount = 1;
921 let PPC64 = ppc64;
922 let VMX =vmx;
923
924 let Arg0Type = OperandType0.Value;
925 let Arg1Type = 0;
926 let Arg2Type = 0;
927 let Arg3Type = 0;
928 let Arg4Type = 0;
929 let PPC64 = 0;
930 let VMX = 0;
931 bits<2> operand0;
932
933
934 let Inst {31-23} = opconstant0;
935 let Inst {20-0} = opconstant1;
936 let Inst {22-21} = operand0;
937}
938
939class PPC32InstPattern37 <string name, Format OperandType0, Format OperandType1, bits<11> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
940 let Name = name;
941 let ArgCount = 2;
942 let PPC64 = ppc64;
943 let VMX =vmx;
944
945 let Arg0Type = OperandType0.Value;
946 let Arg1Type = OperandType1.Value;
947 let Arg2Type = 0;
948 let Arg3Type = 0;
949 let Arg4Type = 0;
950 let PPC64 = 0;
951 let VMX = 0;
952 bits<5> operand0;
953 bits<16> operand1;
954
955
956 let Inst {31-21} = opconstant0;
957 let Inst {20-16} = operand0;
958 let Inst {15-0} = operand1;
959}
960
961class PPC32InstPattern38 <string name, Format OperandType0, Format OperandType1, bits<11> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
962 let Name = name;
963 let ArgCount = 2;
964 let PPC64 = ppc64;
965 let VMX =vmx;
966
967 let Arg0Type = OperandType0.Value;
968 let Arg1Type = OperandType1.Value;
969 let Arg2Type = 0;
970 let Arg3Type = 0;
971 let Arg4Type = 0;
972 let PPC64 = 0;
973 let VMX = 0;
974 bits<5> operand0;
975 bits<5> operand1;
976
977
978 let Inst {31-21} = opconstant0;
979 let Inst {10-0} = opconstant1;
980 let Inst {20-16} = operand0;
981 let Inst {15-11} = operand1;
982}
983
984class PPC32InstPattern39 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<7> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
985 let Name = name;
986 let ArgCount = 3;
987 let PPC64 = ppc64;
988 let VMX =vmx;
989
990 let Arg0Type = OperandType0.Value;
991 let Arg1Type = OperandType1.Value;
992 let Arg2Type = OperandType2.Value;
993 let Arg3Type = 0;
994 let Arg4Type = 0;
995 let PPC64 = 0;
996 let VMX = 0;
997 bits<5> operand0;
998 bits<5> operand1;
999 bits<4> operand2;
1000
1001
1002 let Inst {31-25} = opconstant0;
1003 let Inst {10-0} = opconstant1;
1004 let Inst {20-16} = operand0;
1005 let Inst {15-11} = operand1;
1006 let Inst {24-21} = operand2;
1007}
1008
1009class PPC32InstPattern40 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<4> opconstant1, bits<16> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
1010 let Name = name;
1011 let ArgCount = 2;
1012 let PPC64 = ppc64;
1013 let VMX =vmx;
1014
1015 let Arg0Type = OperandType0.Value;
1016 let Arg1Type = OperandType1.Value;
1017 let Arg2Type = 0;
1018 let Arg3Type = 0;
1019 let Arg4Type = 0;
1020 let PPC64 = 0;
1021 let VMX = 0;
1022 bits<5> operand0;
1023 bits<1> operand1;
1024
1025
1026 let Inst {31-26} = opconstant0;
1027 let Inst {20-17} = opconstant1;
1028 let Inst {15-0} = opconstant2;
1029 let Inst {25-21} = operand0;
1030 let Inst {16} = operand1;
1031}
1032
1033class PPC32InstPattern41 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<1> opconstant1, bits<16> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
1034 let Name = name;
1035 let ArgCount = 2;
1036 let PPC64 = ppc64;
1037 let VMX =vmx;
1038
1039 let Arg0Type = OperandType0.Value;
1040 let Arg1Type = OperandType1.Value;
1041 let Arg2Type = 0;
1042 let Arg3Type = 0;
1043 let Arg4Type = 0;
1044 let PPC64 = 0;
1045 let VMX = 0;
1046 bits<4> operand0;
1047 bits<5> operand1;
1048
1049
1050 let Inst {31-26} = opconstant0;
1051 let Inst {20} = opconstant1;
1052 let Inst {15-0} = opconstant2;
1053 let Inst {19-16} = operand0;
1054 let Inst {25-21} = operand1;
1055}
1056
1057class PPC32InstPattern42 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<1> opconstant1, bits<16> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
1058 let Name = name;
1059 let ArgCount = 2;
1060 let PPC64 = ppc64;
1061 let VMX =vmx;
1062
1063 let Arg0Type = OperandType0.Value;
1064 let Arg1Type = OperandType1.Value;
1065 let Arg2Type = 0;
1066 let Arg3Type = 0;
1067 let Arg4Type = 0;
1068 let PPC64 = 0;
1069 let VMX = 0;
1070 bits<5> operand0;
1071 bits<4> operand1;
1072
1073
1074 let Inst {31-26} = opconstant0;
1075 let Inst {20} = opconstant1;
1076 let Inst {15-0} = opconstant2;
1077 let Inst {25-21} = operand0;
1078 let Inst {19-16} = operand1;
1079}
1080
1081class PPC32InstPattern43 <string name, Format OperandType0, bits<16> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
1082 let Name = name;
1083 let ArgCount = 1;
1084 let PPC64 = ppc64;
1085 let VMX =vmx;
1086
1087 let Arg0Type = OperandType0.Value;
1088 let Arg1Type = 0;
1089 let Arg2Type = 0;
1090 let Arg3Type = 0;
1091 let Arg4Type = 0;
1092 let PPC64 = 0;
1093 let VMX = 0;
1094 bits<5> operand0;
1095
1096
1097 let Inst {31-16} = opconstant0;
1098 let Inst {10-0} = opconstant1;
1099 let Inst {15-11} = operand0;
1100}
1101
1102class PPC32InstPattern44 <string name, Format OperandType0, Format OperandType1, bits<10> opconstant0, bits<5> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
1103 let Name = name;
1104 let ArgCount = 2;
1105 let PPC64 = ppc64;
1106 let VMX =vmx;
1107
1108 let Arg0Type = OperandType0.Value;
1109 let Arg1Type = OperandType1.Value;
1110 let Arg2Type = 0;
1111 let Arg3Type = 0;
1112 let Arg4Type = 0;
1113 let PPC64 = 0;
1114 let VMX = 0;
1115 bits<5> operand0;
1116 bits<1> operand1;
1117
1118
1119 let Inst {31-22} = opconstant0;
1120 let Inst {20-16} = opconstant1;
1121 let Inst {10-0} = opconstant2;
1122 let Inst {15-11} = operand0;
1123 let Inst {21} = operand1;
1124}
1125
1126class PPC32InstPattern45 <string name, Format OperandType0, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
1127 let Name = name;
1128 let ArgCount = 1;
1129 let PPC64 = ppc64;
1130 let VMX =vmx;
1131
1132 let Arg0Type = OperandType0.Value;
1133 let Arg1Type = 0;
1134 let Arg2Type = 0;
1135 let Arg3Type = 0;
1136 let Arg4Type = 0;
1137 let PPC64 = 0;
1138 let VMX = 0;
1139 bits<15> operand0;
1140
1141
1142 let Inst {31-26} = opconstant0;
1143 let Inst {10-0} = opconstant1;
1144 let Inst {25-11} = operand0;
1145}
1146
1147class PPC32InstPattern46 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<9> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
1148 let Name = name;
1149 let ArgCount = 3;
1150 let PPC64 = ppc64;
1151 let VMX =vmx;
1152
1153 let Arg0Type = OperandType0.Value;
1154 let Arg1Type = OperandType1.Value;
1155 let Arg2Type = OperandType2.Value;
1156 let Arg3Type = 0;
1157 let Arg4Type = 0;
1158 let PPC64 = 0;
1159 let VMX = 0;
1160 bits<5> operand0;
1161 bits<5> operand1;
1162 bits<2> operand2;
1163
1164
1165 let Inst {31-23} = opconstant0;
1166 let Inst {10-0} = opconstant1;
1167 let Inst {20-16} = operand0;
1168 let Inst {15-11} = operand1;
1169 let Inst {22-21} = operand2;
1170}
1171
1172class PPC32InstPattern47 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<6> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
1173 let Name = name;
1174 let ArgCount = 4;
1175 let PPC64 = ppc64;
1176 let VMX =vmx;
1177
1178 let Arg0Type = OperandType0.Value;
1179 let Arg1Type = OperandType1.Value;
1180 let Arg2Type = OperandType2.Value;
1181 let Arg3Type = OperandType3.Value;
1182 let Arg4Type = 0;
1183 let PPC64 = 0;
1184 let VMX = 0;
1185 bits<5> operand0;
1186 bits<5> operand1;
1187 bits<5> operand2;
1188 bits<5> operand3;
1189
1190
1191 let Inst {31-26} = opconstant0;
1192 let Inst {5-0} = opconstant1;
1193 let Inst {25-21} = operand0;
1194 let Inst {20-16} = operand1;
1195 let Inst {15-11} = operand2;
1196 let Inst {10-6} = operand3;
1197}
1198
1199class PPC32InstPattern48 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<1> opconstant1, bits<6> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
1200 let Name = name;
1201 let ArgCount = 4;
1202 let PPC64 = ppc64;
1203 let VMX =vmx;
1204
1205 let Arg0Type = OperandType0.Value;
1206 let Arg1Type = OperandType1.Value;
1207 let Arg2Type = OperandType2.Value;
1208 let Arg3Type = OperandType3.Value;
1209 let Arg4Type = 0;
1210 let PPC64 = 0;
1211 let VMX = 0;
1212 bits<5> operand0;
1213 bits<5> operand1;
1214 bits<5> operand2;
1215 bits<4> operand3;
1216
1217
1218 let Inst {31-26} = opconstant0;
1219 let Inst {10} = opconstant1;
1220 let Inst {5-0} = opconstant2;
1221 let Inst {25-21} = operand0;
1222 let Inst {20-16} = operand1;
1223 let Inst {15-11} = operand2;
1224 let Inst {9-6} = operand3;
1225}
1226
1227class PPC32InstPatternPseudo <string name, Format OperandType0> : PPC32Inst {
1228 let Name = name;
1229 let ArgCount = 0;
1230 let PPC64 = 0;
1231 let VMX = 0;
1232
1233 let Arg0Type = OperandType0.Value;
1234 let Arg1Type = OperandType0.Value;
1235 let Arg2Type = OperandType0.Value;
1236 let Arg3Type = OperandType0.Value;
1237 let Arg4Type = 0;
1238 let PPC64 = 0;
1239 let VMX = 0;
1240 bits<5> operand0;
1241 bits<5> operand1;
1242 bits<5> operand2;
1243 bits<4> operand3;
1244
1245
1246 let Inst {31-0} = 0;
1247}