[PowerPC] Materialize more constants with CR-field set in late peephole
[llvm-core.git] / lib / Target / Mips / MicroMipsDSPInstrFormats.td
blob0d444dfc9fadecf53aec02faeea7209f42a94950
1 //===-- MicroMipsDSPInstrFormats.td - Instruction Formats --*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
10 class MMDSPInst<string opstr = "">
11     : MipsInst<(outs), (ins), "", [], NoItinerary, FrmOther> {
12   let ASEPredicate = [HasDSP];
13   let EncodingPredicates = [InMicroMips];
14   string BaseOpcode = opstr;
15   string Arch = "mmdsp";
16   let DecoderNamespace = "MicroMips";
19 class MMDSPInstAlias<string Asm, dag Result, bit Emit = 0b1>
20     : InstAlias<Asm, Result, Emit>, PredicateControl {
21   let ASEPredicate = [HasDSP];
22   let AdditionalPredicates = [InMicroMips];
25 class POOL32A_3R_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
26   bits<5> rd;
27   bits<5> rs;
28   bits<5> rt;
30   let Inst{31-26} = 0b000000;
31   let Inst{25-21} = rt;
32   let Inst{20-16} = rs;
33   let Inst{15-11} = rd;
34   let Inst{10-0}  = op;
37 class POOL32A_2R_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
38   bits<5> rt;
39   bits<5> rs;
41   let Inst{31-26} = 0b000000;
42   let Inst{25-21} = rt;
43   let Inst{20-16} = rs;
44   let Inst{15-6}  = op;
45   let Inst{5-0}   = 0b111100;
48 class POOL32A_2RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
49   bits<5> rt;
50   bits<5> rs;
51   bits<2> ac;
53   let Inst{31-26} = 0b000000;
54   let Inst{25-21} = rt;
55   let Inst{20-16} = rs;
56   let Inst{15-14} = ac;
57   let Inst{13-6}  = op;
58   let Inst{5-0}   = 0b111100;
61 class POOL32A_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
62   bits<5> rd;
63   bits<5> rs;
64   bits<5> rt;
66   let Inst{31-26} = 0b000000;
67   let Inst{25-21} = rt;
68   let Inst{20-16} = rs;
69   let Inst{15-11} = rd;
70   let Inst{10}    = 0b0;
71   let Inst{9-0}   = op;
74 class POOL32A_2RSA4_FMT<string opstr, bits<12> op> : MMDSPInst<opstr> {
75   bits<5> rt;
76   bits<5> rs;
77   bits<4> sa;
79   let Inst{31-26} = 0b000000;
80   let Inst{25-21} = rt;
81   let Inst{20-16} = rs;
82   let Inst{15-12} = sa;
83   let Inst{11-0}  = op;
86 class POOL32A_2RSA3_FMT<string opstr, bits<7> op> : MMDSPInst<opstr> {
87   bits<5> rt;
88   bits<5> rs;
89   bits<3> sa;
91   let Inst{31-26} = 0b000000;
92   let Inst{25-21} = rt;
93   let Inst{20-16} = rs;
94   let Inst{15-13} = sa;
95   let Inst{12-6}  = op;
96   let Inst{5-0}   = 0b111100;
99 class POOL32A_2RSA5B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
100   bits<5> rt;
101   bits<5> rs;
102   bits<5> sa;
104   let Inst{31-26} = 0b000000;
105   let Inst{25-21} = rt;
106   let Inst{20-16} = rs;
107   let Inst{15-11} = sa;
108   let Inst{10}    = 0b0;
109   let Inst{9-0}   = op;
112 class POOL32A_2RSA4B0_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
113   bits<5> rt;
114   bits<5> rs;
115   bits<4> sa;
117   let Inst{31-26} = 0b000000;
118   let Inst{25-21} = rt;
119   let Inst{20-16} = rs;
120   let Inst{15-12} = sa;
121   let Inst{11}    = 0b0;
122   let Inst{10-0}  = op;
125 class POOL32A_2RSA4OP6_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
126   bits<5> rt;
127   bits<5> rs;
128   bits<4> sa;
130   let Inst{31-26} = 0b000000;
131   let Inst{25-21} = rt;
132   let Inst{20-16} = rs;
133   let Inst{15-12} = sa;
134   let Inst{11-6}  = op;
135   let Inst{5-0}   = 0b111100;
138 class POOL32A_1RIMM5AC_FMT<string opstr, bits<8> funct> : MMDSPInst<opstr> {
139   bits<5> rt;
140   bits<5> imm;
141   bits<2> ac;
143   let Inst{31-26} = 0b000000;
144   let Inst{25-21} = rt;
145   let Inst{20-16} = imm;
146   let Inst{15-14} = ac;
147   let Inst{13-6}  = funct;
148   let Inst{5-0}   = 0b111100;
151 class POOL32A_2RSA5_FMT<string opstr, bits<11> op> : MMDSPInst<opstr> {
152   bits<5> rt;
153   bits<5> rs;
154   bits<5> sa;
156   let Inst{31-26} = 0b000000;
157   let Inst{25-21} = rt;
158   let Inst{20-16} = rs;
159   let Inst{15-11} = sa;
160   let Inst{10-0}  = op;
163 class POOL32A_1RMEMB0_FMT<string opstr, bits<10> funct> : MMDSPInst<opstr> {
164   bits<5> index;
165   bits<5> base;
166   bits<5> rd;
168   let Inst{31-26} = 0;
169   let Inst{25-21} = index;
170   let Inst{20-16} = base;
171   let Inst{15-11} = rd;
172   let Inst{10}    = 0b0;
173   let Inst{9-0}   = funct;
176 class POOL32A_1RAC_FMT<string instr_asm, bits<8> funct> : MMDSPInst<instr_asm> {
177   bits<5> rs;
178   bits<2> ac;
180   let Inst{31-26} = 0;
181   let Inst{25-21} = 0;
182   let Inst{20-16} = rs;
183   let Inst{15-14} = ac;
184   let Inst{13-6}  = funct;
185   let Inst{5-0}   = 0b111100;
188 class POOL32A_1RMASK7_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
189   bits<5> rt;
190   bits<7> mask;
192   let Inst{31-26} = 0b000000;
193   let Inst{25-21} = rt;
194   let Inst{20-14} = mask;
195   let Inst{13-6}  = op;
196   let Inst{5-0}   = 0b111100;
199 class POOL32A_1RIMM10_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
200   bits<5> rd;
201   bits<10> imm;
203   let Inst{31-26} = 0;
204   let Inst{25-16} = imm;
205   let Inst{15-11} = rd;
206   let Inst{10}    = 0;
207   let Inst{9-0}   = op;
210 class POOL32A_1RIMM8_FMT<string opstr, bits<6> op> : MMDSPInst<opstr> {
211   bits<5> rt;
212   bits<8> imm;
214   let Inst{31-26} = 0;
215   let Inst{25-21} = rt;
216   let Inst{20-13} = imm;
217   let Inst{12}    = 0;
218   let Inst{11-6}  = op;
219   let Inst{5-0}   = 0b111100;
222 class POOL32A_4B0SHIFT6AC4B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
223   bits<6> shift;
224   bits<2> ac;
226   let Inst{31-26} = 0b000000;
227   let Inst{25-22} = 0b0000;
228   let Inst{21-16} = shift;
229   let Inst{15-14} = ac;
230   let Inst{13-10} = 0b0000;
231   let Inst{9-0}   = op;
234 class POOL32A_5B01RAC_FMT<string opstr, bits<8> op> : MMDSPInst<opstr> {
235   bits<5> rs;
236   bits<2> ac;
238   let Inst{31-26} = 0b000000;
239   let Inst{25-21} = 0b00000;
240   let Inst{20-16} = rs;
241   let Inst{15-14} = ac;
242   let Inst{13-6}  = op;
243   let Inst{5-0}   = 0b111100;
246 class POOL32I_IMMB0_FMT<string opstr, bits<5> op> : MMDSPInst<opstr> {
247   bits<16> offset;
249   let Inst{31-26} = 0b010000;
250   let Inst{25-21} = op;
251   let Inst{20-16} = 0;
252   let Inst{15-0}  = offset;
255 class POOL32A_2RBP_FMT<string opstr> : MMDSPInst<opstr> {
256   bits<5> rt;
257   bits<5> rs;
258   bits<2> bp;
260   let Inst{31-26} = 0;
261   let Inst{25-21} = rt;
262   let Inst{20-16} = rs;
263   let Inst{15-14} = bp;
264   let Inst{13-6}  = 0b00100010;
265   let Inst{5-0}   = 0b111100;
268 class POOL32A_2RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
269   bits<5> rt;
270   bits<5> rs;
272   let Inst{31-26} = 0;
273   let Inst{25-21} = rt;
274   let Inst{20-16} = rs;
275   let Inst{15-10} = 0;
276   let Inst{9-0}   = op;
279 class POOL32S_3RB0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
280   bits<5> rt;
281   bits<5> rs;
282   bits<5> rd;
284   let Inst{31-26} = 0b010110;
285   let Inst{25-21} = rt;
286   let Inst{20-16} = rs;
287   let Inst{15-11} = rd;
288   let Inst{10}    = 0b0;
289   let Inst{9-0}   = op;
292 class POOL32A_2R2B0_FMT<string opstr, bits<10> op> : MMDSPInst<opstr> {
293   bits<5> rt;
294   bits<5> rs;
296   let Inst{31-26} = 0;
297   let Inst{25-21} = rt;
298   let Inst{20-16} = rs;
299   let Inst{15-11} = 0;
300   let Inst{10}    = 0;
301   let Inst{9-0}   = op;