xref: /aosp_15_r20/external/llvm/lib/Target/PowerPC/PPCInstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker// PowerPC instruction formats
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerclass I<bits<6> opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin>
15*9880d681SAndroid Build Coastguard Worker        : Instruction {
16*9880d681SAndroid Build Coastguard Worker  field bits<32> Inst;
17*9880d681SAndroid Build Coastguard Worker  field bits<32> SoftFail = 0;
18*9880d681SAndroid Build Coastguard Worker  let Size = 4;
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker  bit PPC64 = 0;  // Default value, override with isPPC64
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker  let Namespace = "PPC";
23*9880d681SAndroid Build Coastguard Worker  let Inst{0-5} = opcode;
24*9880d681SAndroid Build Coastguard Worker  let OutOperandList = OOL;
25*9880d681SAndroid Build Coastguard Worker  let InOperandList = IOL;
26*9880d681SAndroid Build Coastguard Worker  let AsmString = asmstr;
27*9880d681SAndroid Build Coastguard Worker  let Itinerary = itin;
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_First = 0;
30*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_Single = 0;
31*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_Cracked = 0;
32*9880d681SAndroid Build Coastguard Worker  bits<3> PPC970_Unit = 0;
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Worker  /// These fields correspond to the fields in PPCInstrInfo.h.  Any changes to
35*9880d681SAndroid Build Coastguard Worker  /// these must be reflected there!  See comments there for what these are.
36*9880d681SAndroid Build Coastguard Worker  let TSFlags{0}   = PPC970_First;
37*9880d681SAndroid Build Coastguard Worker  let TSFlags{1}   = PPC970_Single;
38*9880d681SAndroid Build Coastguard Worker  let TSFlags{2}   = PPC970_Cracked;
39*9880d681SAndroid Build Coastguard Worker  let TSFlags{5-3} = PPC970_Unit;
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker  // Fields used for relation models.
42*9880d681SAndroid Build Coastguard Worker  string BaseName = "";
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker  // For cases where multiple instruction definitions really represent the
45*9880d681SAndroid Build Coastguard Worker  // same underlying instruction but with one definition for 64-bit arguments
46*9880d681SAndroid Build Coastguard Worker  // and one for 32-bit arguments, this bit breaks the degeneracy between
47*9880d681SAndroid Build Coastguard Worker  // the two forms and allows TableGen to generate mapping tables.
48*9880d681SAndroid Build Coastguard Worker  bit Interpretation64Bit = 0;
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_First   { bits<1> PPC970_First = 1;  }
52*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_Single  { bits<1> PPC970_Single = 1; }
53*9880d681SAndroid Build Coastguard Workerclass PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; }
54*9880d681SAndroid Build Coastguard Workerclass PPC970_MicroCode;
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_Pseudo   { bits<3> PPC970_Unit = 0;   }
57*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_FXU      { bits<3> PPC970_Unit = 1;   }
58*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_LSU      { bits<3> PPC970_Unit = 2;   }
59*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_FPU      { bits<3> PPC970_Unit = 3;   }
60*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_CRU      { bits<3> PPC970_Unit = 4;   }
61*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_VALU     { bits<3> PPC970_Unit = 5;   }
62*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_VPERM    { bits<3> PPC970_Unit = 6;   }
63*9880d681SAndroid Build Coastguard Workerclass PPC970_Unit_BRU      { bits<3> PPC970_Unit = 7;   }
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker// Two joined instructions; used to emit two adjacent instructions as one.
66*9880d681SAndroid Build Coastguard Worker// The itinerary from the first instruction is used for scheduling and
67*9880d681SAndroid Build Coastguard Worker// classification.
68*9880d681SAndroid Build Coastguard Workerclass I2<bits<6> opcode1, bits<6> opcode2, dag OOL, dag IOL, string asmstr,
69*9880d681SAndroid Build Coastguard Worker         InstrItinClass itin>
70*9880d681SAndroid Build Coastguard Worker        : Instruction {
71*9880d681SAndroid Build Coastguard Worker  field bits<64> Inst;
72*9880d681SAndroid Build Coastguard Worker  field bits<64> SoftFail = 0;
73*9880d681SAndroid Build Coastguard Worker  let Size = 8;
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker  bit PPC64 = 0;  // Default value, override with isPPC64
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker  let Namespace = "PPC";
78*9880d681SAndroid Build Coastguard Worker  let Inst{0-5} = opcode1;
79*9880d681SAndroid Build Coastguard Worker  let Inst{32-37} = opcode2;
80*9880d681SAndroid Build Coastguard Worker  let OutOperandList = OOL;
81*9880d681SAndroid Build Coastguard Worker  let InOperandList = IOL;
82*9880d681SAndroid Build Coastguard Worker  let AsmString = asmstr;
83*9880d681SAndroid Build Coastguard Worker  let Itinerary = itin;
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_First = 0;
86*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_Single = 0;
87*9880d681SAndroid Build Coastguard Worker  bits<1> PPC970_Cracked = 0;
88*9880d681SAndroid Build Coastguard Worker  bits<3> PPC970_Unit = 0;
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker  /// These fields correspond to the fields in PPCInstrInfo.h.  Any changes to
91*9880d681SAndroid Build Coastguard Worker  /// these must be reflected there!  See comments there for what these are.
92*9880d681SAndroid Build Coastguard Worker  let TSFlags{0}   = PPC970_First;
93*9880d681SAndroid Build Coastguard Worker  let TSFlags{1}   = PPC970_Single;
94*9880d681SAndroid Build Coastguard Worker  let TSFlags{2}   = PPC970_Cracked;
95*9880d681SAndroid Build Coastguard Worker  let TSFlags{5-3} = PPC970_Unit;
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker  // Fields used for relation models.
98*9880d681SAndroid Build Coastguard Worker  string BaseName = "";
99*9880d681SAndroid Build Coastguard Worker  bit Interpretation64Bit = 0;
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker// 1.7.1 I-Form
103*9880d681SAndroid Build Coastguard Workerclass IForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr,
104*9880d681SAndroid Build Coastguard Worker            InstrItinClass itin, list<dag> pattern>
105*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
106*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
107*9880d681SAndroid Build Coastguard Worker  bits<24> LI;
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker  let Inst{6-29}  = LI;
110*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
111*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker// 1.7.2 B-Form
115*9880d681SAndroid Build Coastguard Workerclass BForm<bits<6> opcode, bit aa, bit lk, dag OOL, dag IOL, string asmstr>
116*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, IIC_BrB> {
117*9880d681SAndroid Build Coastguard Worker  bits<7> BIBO;  // 2 bits of BI and 5 bits of BO.
118*9880d681SAndroid Build Coastguard Worker  bits<3>  CR;
119*9880d681SAndroid Build Coastguard Worker  bits<14> BD;
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker  bits<5> BI;
122*9880d681SAndroid Build Coastguard Worker  let BI{0-1} = BIBO{5-6};
123*9880d681SAndroid Build Coastguard Worker  let BI{2-4} = CR{0-2};
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = BIBO{4-0};
126*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = BI;
127*9880d681SAndroid Build Coastguard Worker  let Inst{16-29} = BD;
128*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
129*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerclass BForm_1<bits<6> opcode, bits<5> bo, bit aa, bit lk, dag OOL, dag IOL,
133*9880d681SAndroid Build Coastguard Worker             string asmstr>
134*9880d681SAndroid Build Coastguard Worker  : BForm<opcode, aa, lk, OOL, IOL, asmstr> {
135*9880d681SAndroid Build Coastguard Worker  let BIBO{4-0} = bo;
136*9880d681SAndroid Build Coastguard Worker  let BIBO{6-5} = 0;
137*9880d681SAndroid Build Coastguard Worker  let CR = 0;
138*9880d681SAndroid Build Coastguard Worker}
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Workerclass BForm_2<bits<6> opcode, bits<5> bo, bits<5> bi, bit aa, bit lk,
141*9880d681SAndroid Build Coastguard Worker              dag OOL, dag IOL, string asmstr>
142*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, IIC_BrB> {
143*9880d681SAndroid Build Coastguard Worker  bits<14> BD;
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = bo;
146*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = bi;
147*9880d681SAndroid Build Coastguard Worker  let Inst{16-29} = BD;
148*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
149*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerclass BForm_3<bits<6> opcode, bit aa, bit lk,
153*9880d681SAndroid Build Coastguard Worker              dag OOL, dag IOL, string asmstr>
154*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, IIC_BrB> {
155*9880d681SAndroid Build Coastguard Worker  bits<5> BO;
156*9880d681SAndroid Build Coastguard Worker  bits<5> BI;
157*9880d681SAndroid Build Coastguard Worker  bits<14> BD;
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = BO;
160*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = BI;
161*9880d681SAndroid Build Coastguard Worker  let Inst{16-29} = BD;
162*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
163*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Workerclass BForm_4<bits<6> opcode, bits<5> bo, bit aa, bit lk,
167*9880d681SAndroid Build Coastguard Worker              dag OOL, dag IOL, string asmstr>
168*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, IIC_BrB> {
169*9880d681SAndroid Build Coastguard Worker  bits<5> BI;
170*9880d681SAndroid Build Coastguard Worker  bits<14> BD;
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = bo;
173*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = BI;
174*9880d681SAndroid Build Coastguard Worker  let Inst{16-29} = BD;
175*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
176*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker// 1.7.3 SC-Form
180*9880d681SAndroid Build Coastguard Workerclass SCForm<bits<6> opcode, bits<1> xo,
181*9880d681SAndroid Build Coastguard Worker                     dag OOL, dag IOL, string asmstr, InstrItinClass itin,
182*9880d681SAndroid Build Coastguard Worker                     list<dag> pattern>
183*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
184*9880d681SAndroid Build Coastguard Worker  bits<7>  LEV;
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
187*9880d681SAndroid Build Coastguard Worker
188*9880d681SAndroid Build Coastguard Worker  let Inst{20-26} = LEV;
189*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = xo;
190*9880d681SAndroid Build Coastguard Worker}
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker// 1.7.4 D-Form
193*9880d681SAndroid Build Coastguard Workerclass DForm_base<bits<6> opcode, dag OOL, dag IOL, string asmstr,
194*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin, list<dag> pattern>
195*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
196*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
197*9880d681SAndroid Build Coastguard Worker  bits<5>  B;
198*9880d681SAndroid Build Coastguard Worker  bits<16> C;
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = A;
203*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = B;
204*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = C;
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerclass DForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
208*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
209*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
210*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
211*9880d681SAndroid Build Coastguard Worker  bits<21> Addr;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = A;
216*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = Addr{20-16}; // Base Reg
217*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = Addr{15-0};  // Displacement
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerclass DForm_1a<bits<6> opcode, dag OOL, dag IOL, string asmstr,
221*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
222*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
223*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
224*9880d681SAndroid Build Coastguard Worker  bits<16> C;
225*9880d681SAndroid Build Coastguard Worker  bits<5>  B;
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = A;
230*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = B;
231*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = C;
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Workerclass DForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
236*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
237*9880d681SAndroid Build Coastguard Worker  : DForm_base<opcode, OOL, IOL, asmstr, itin, pattern> {
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker  // Even though ADDICo does not really have an RC bit, provide
240*9880d681SAndroid Build Coastguard Worker  // the declaration of one here so that isDOT has something to set.
241*9880d681SAndroid Build Coastguard Worker  bit RC = 0;
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerclass DForm_2_r0<bits<6> opcode, dag OOL, dag IOL, string asmstr,
245*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin, list<dag> pattern>
246*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
247*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
248*9880d681SAndroid Build Coastguard Worker  bits<16> B;
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = A;
253*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
254*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = B;
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Workerclass DForm_4<bits<6> opcode, dag OOL, dag IOL, string asmstr,
258*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
259*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
260*9880d681SAndroid Build Coastguard Worker  bits<5>  B;
261*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
262*9880d681SAndroid Build Coastguard Worker  bits<16> C;
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = A;
267*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = B;
268*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = C;
269*9880d681SAndroid Build Coastguard Worker}
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Workerclass DForm_4_zero<bits<6> opcode, dag OOL, dag IOL, string asmstr,
272*9880d681SAndroid Build Coastguard Worker                   InstrItinClass itin, list<dag> pattern>
273*9880d681SAndroid Build Coastguard Worker  : DForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
274*9880d681SAndroid Build Coastguard Worker  let A = 0;
275*9880d681SAndroid Build Coastguard Worker  let Addr = 0;
276*9880d681SAndroid Build Coastguard Worker}
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerclass DForm_4_fixedreg_zero<bits<6> opcode, bits<5> R, dag OOL, dag IOL,
279*9880d681SAndroid Build Coastguard Worker                            string asmstr, InstrItinClass itin,
280*9880d681SAndroid Build Coastguard Worker                            list<dag> pattern>
281*9880d681SAndroid Build Coastguard Worker  : DForm_4<opcode, OOL, IOL, asmstr, itin, pattern> {
282*9880d681SAndroid Build Coastguard Worker  let A = R;
283*9880d681SAndroid Build Coastguard Worker  let B = R;
284*9880d681SAndroid Build Coastguard Worker  let C = 0;
285*9880d681SAndroid Build Coastguard Worker}
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerclass IForm_and_DForm_1<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2,
288*9880d681SAndroid Build Coastguard Worker            dag OOL, dag IOL, string asmstr,
289*9880d681SAndroid Build Coastguard Worker            InstrItinClass itin, list<dag> pattern>
290*9880d681SAndroid Build Coastguard Worker         : I2<opcode1, opcode2, OOL, IOL, asmstr, itin> {
291*9880d681SAndroid Build Coastguard Worker  bits<5>  A;
292*9880d681SAndroid Build Coastguard Worker  bits<21> Addr;
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
295*9880d681SAndroid Build Coastguard Worker  bits<24> LI;
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Worker  let Inst{6-29}  = LI;
298*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = aa;
299*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker  let Inst{38-42}  = A;
302*9880d681SAndroid Build Coastguard Worker  let Inst{43-47} = Addr{20-16}; // Base Reg
303*9880d681SAndroid Build Coastguard Worker  let Inst{48-63} = Addr{15-0};  // Displacement
304*9880d681SAndroid Build Coastguard Worker}
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Worker// This is used to emit BL8+NOP.
307*9880d681SAndroid Build Coastguard Workerclass IForm_and_DForm_4_zero<bits<6> opcode1, bit aa, bit lk, bits<6> opcode2,
308*9880d681SAndroid Build Coastguard Worker            dag OOL, dag IOL, string asmstr,
309*9880d681SAndroid Build Coastguard Worker            InstrItinClass itin, list<dag> pattern>
310*9880d681SAndroid Build Coastguard Worker         :  IForm_and_DForm_1<opcode1, aa, lk, opcode2,
311*9880d681SAndroid Build Coastguard Worker                              OOL, IOL, asmstr, itin, pattern> {
312*9880d681SAndroid Build Coastguard Worker  let A = 0;
313*9880d681SAndroid Build Coastguard Worker  let Addr = 0;
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerclass DForm_5<bits<6> opcode, dag OOL, dag IOL, string asmstr,
317*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin>
318*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
319*9880d681SAndroid Build Coastguard Worker  bits<3>  BF;
320*9880d681SAndroid Build Coastguard Worker  bits<1>  L;
321*9880d681SAndroid Build Coastguard Worker  bits<5>  RA;
322*9880d681SAndroid Build Coastguard Worker  bits<16> I;
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
325*9880d681SAndroid Build Coastguard Worker  let Inst{9}     = 0;
326*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = L;
327*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
328*9880d681SAndroid Build Coastguard Worker  let Inst{16-31} = I;
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Workerclass DForm_5_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
332*9880d681SAndroid Build Coastguard Worker                  InstrItinClass itin>
333*9880d681SAndroid Build Coastguard Worker  : DForm_5<opcode, OOL, IOL, asmstr, itin> {
334*9880d681SAndroid Build Coastguard Worker  let L = PPC64;
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Workerclass DForm_6<bits<6> opcode, dag OOL, dag IOL, string asmstr,
338*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin>
339*9880d681SAndroid Build Coastguard Worker  : DForm_5<opcode, OOL, IOL, asmstr, itin>;
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerclass DForm_6_ext<bits<6> opcode, dag OOL, dag IOL, string asmstr,
342*9880d681SAndroid Build Coastguard Worker                  InstrItinClass itin>
343*9880d681SAndroid Build Coastguard Worker  : DForm_6<opcode, OOL, IOL, asmstr, itin> {
344*9880d681SAndroid Build Coastguard Worker  let L = PPC64;
345*9880d681SAndroid Build Coastguard Worker}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Worker
348*9880d681SAndroid Build Coastguard Worker// 1.7.5 DS-Form
349*9880d681SAndroid Build Coastguard Workerclass DSForm_1<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
350*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
351*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
352*9880d681SAndroid Build Coastguard Worker  bits<5>  RST;
353*9880d681SAndroid Build Coastguard Worker  bits<19> DS_RA;
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RST;
358*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = DS_RA{18-14};  // Register #
359*9880d681SAndroid Build Coastguard Worker  let Inst{16-29} = DS_RA{13-0};   // Displacement.
360*9880d681SAndroid Build Coastguard Worker  let Inst{30-31} = xo;
361*9880d681SAndroid Build Coastguard Worker}
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Worker// DQ-Form: [PO T RA DQ TX XO] or [PO S RA DQ SX XO]
364*9880d681SAndroid Build Coastguard Workerclass DQ_RD6_RS5_DQ12<bits<6> opcode, bits<3> xo, dag OOL, dag IOL,
365*9880d681SAndroid Build Coastguard Worker                      string asmstr, InstrItinClass itin, list<dag> pattern>
366*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
367*9880d681SAndroid Build Coastguard Worker  bits<6>  XT;
368*9880d681SAndroid Build Coastguard Worker  bits<17> DS_RA;
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
373*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = DS_RA{16-12};  // Register #
374*9880d681SAndroid Build Coastguard Worker  let Inst{16-27} = DS_RA{11-0};   // Displacement.
375*9880d681SAndroid Build Coastguard Worker  let Inst{28}    = XT{5};
376*9880d681SAndroid Build Coastguard Worker  let Inst{29-31} = xo;
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Worker// 1.7.6 X-Form
380*9880d681SAndroid Build Coastguard Workerclass XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
381*9880d681SAndroid Build Coastguard Worker                      InstrItinClass itin, list<dag> pattern>
382*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
383*9880d681SAndroid Build Coastguard Worker  bits<5> RST;
384*9880d681SAndroid Build Coastguard Worker  bits<5> A;
385*9880d681SAndroid Build Coastguard Worker  bits<5> B;
386*9880d681SAndroid Build Coastguard Worker
387*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
390*9880d681SAndroid Build Coastguard Worker
391*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RST;
392*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
393*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
394*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
395*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerclass XForm_tlb<bits<10> xo, dag OOL, dag IOL, string asmstr,
399*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin> : XForm_base_r3xo<31, xo, OOL, IOL, asmstr, itin, []> {
400*9880d681SAndroid Build Coastguard Worker  let RST = 0;
401*9880d681SAndroid Build Coastguard Worker}
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Workerclass XForm_attn<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
404*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin>
405*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
406*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
407*9880d681SAndroid Build Coastguard Worker}
408*9880d681SAndroid Build Coastguard Worker
409*9880d681SAndroid Build Coastguard Worker// This is the same as XForm_base_r3xo, but the first two operands are swapped
410*9880d681SAndroid Build Coastguard Worker// when code is emitted.
411*9880d681SAndroid Build Coastguard Workerclass XForm_base_r3xo_swapped
412*9880d681SAndroid Build Coastguard Worker        <bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
413*9880d681SAndroid Build Coastguard Worker        InstrItinClass itin>
414*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
415*9880d681SAndroid Build Coastguard Worker  bits<5> A;
416*9880d681SAndroid Build Coastguard Worker  bits<5> RST;
417*9880d681SAndroid Build Coastguard Worker  bits<5> B;
418*9880d681SAndroid Build Coastguard Worker
419*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RST;
422*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
423*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
424*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
425*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
426*9880d681SAndroid Build Coastguard Worker}
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Workerclass XForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
430*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
431*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerclass XForm_1a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
434*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
435*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
436*9880d681SAndroid Build Coastguard Worker  let RST = 0;
437*9880d681SAndroid Build Coastguard Worker}
438*9880d681SAndroid Build Coastguard Worker
439*9880d681SAndroid Build Coastguard Workerclass XForm_rs<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
440*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
441*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
442*9880d681SAndroid Build Coastguard Worker  let A = 0;
443*9880d681SAndroid Build Coastguard Worker  let B = 0;
444*9880d681SAndroid Build Coastguard Worker}
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Workerclass XForm_tlbws<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
447*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
448*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
449*9880d681SAndroid Build Coastguard Worker  bits<5> RST;
450*9880d681SAndroid Build Coastguard Worker  bits<5> A;
451*9880d681SAndroid Build Coastguard Worker  bits<1> WS;
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RST;
456*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
457*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = WS;
458*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
459*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
460*9880d681SAndroid Build Coastguard Worker}
461*9880d681SAndroid Build Coastguard Worker
462*9880d681SAndroid Build Coastguard Workerclass XForm_6<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
463*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
464*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
465*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
466*9880d681SAndroid Build Coastguard Worker}
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Workerclass XForm_8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
469*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
470*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern>;
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Workerclass XForm_10<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
473*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
474*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
475*9880d681SAndroid Build Coastguard Worker    let Pattern = pattern;
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Workerclass XForm_11<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
479*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
480*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo_swapped<opcode, xo, OOL, IOL, asmstr, itin> {
481*9880d681SAndroid Build Coastguard Worker  let B = 0;
482*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
483*9880d681SAndroid Build Coastguard Worker}
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Workerclass XForm_16<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
486*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin>
487*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
488*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
489*9880d681SAndroid Build Coastguard Worker  bits<1> L;
490*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
491*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
494*9880d681SAndroid Build Coastguard Worker  let Inst{9}     = 0;
495*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = L;
496*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
497*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
498*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
499*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
500*9880d681SAndroid Build Coastguard Worker}
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerclass XForm_icbt<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
503*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin>
504*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
505*9880d681SAndroid Build Coastguard Worker  bits<4> CT;
506*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
507*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker  let Inst{6} = 0;
510*9880d681SAndroid Build Coastguard Worker  let Inst{7-10} = CT;
511*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
512*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
513*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
514*9880d681SAndroid Build Coastguard Worker  let Inst{31} = 0;
515*9880d681SAndroid Build Coastguard Worker}
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Workerclass XForm_sr<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
518*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
519*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
520*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
521*9880d681SAndroid Build Coastguard Worker  bits<4> SR;
522*9880d681SAndroid Build Coastguard Worker
523*9880d681SAndroid Build Coastguard Worker  let Inst{6-10} = RS;
524*9880d681SAndroid Build Coastguard Worker  let Inst{12-15} = SR;
525*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
526*9880d681SAndroid Build Coastguard Worker}
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerclass XForm_mbar<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
529*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
530*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
531*9880d681SAndroid Build Coastguard Worker  bits<5> MO;
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Worker  let Inst{6-10} = MO;
534*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
535*9880d681SAndroid Build Coastguard Worker}
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Workerclass XForm_srin<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
538*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
539*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
540*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
541*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
542*9880d681SAndroid Build Coastguard Worker
543*9880d681SAndroid Build Coastguard Worker  let Inst{6-10} = RS;
544*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
545*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerclass XForm_mtmsr<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
549*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
550*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
551*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
552*9880d681SAndroid Build Coastguard Worker  bits<1> L;
553*9880d681SAndroid Build Coastguard Worker
554*9880d681SAndroid Build Coastguard Worker  let Inst{6-10} = RS;
555*9880d681SAndroid Build Coastguard Worker  let Inst{15} = L;
556*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
557*9880d681SAndroid Build Coastguard Worker}
558*9880d681SAndroid Build Coastguard Worker
559*9880d681SAndroid Build Coastguard Workerclass XForm_16_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
560*9880d681SAndroid Build Coastguard Worker                   InstrItinClass itin>
561*9880d681SAndroid Build Coastguard Worker  : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
562*9880d681SAndroid Build Coastguard Worker  let L = PPC64;
563*9880d681SAndroid Build Coastguard Worker}
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Workerclass XForm_17<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
566*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin>
567*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
568*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
569*9880d681SAndroid Build Coastguard Worker  bits<5> FRA;
570*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
571*9880d681SAndroid Build Coastguard Worker
572*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
573*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = 0;
574*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = FRA;
575*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
576*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
577*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
578*9880d681SAndroid Build Coastguard Worker}
579*9880d681SAndroid Build Coastguard Worker
580*9880d681SAndroid Build Coastguard Worker// Used for QPX
581*9880d681SAndroid Build Coastguard Workerclass XForm_18<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
582*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
583*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
584*9880d681SAndroid Build Coastguard Worker  bits<5> FRT;
585*9880d681SAndroid Build Coastguard Worker  bits<5> FRA;
586*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
587*9880d681SAndroid Build Coastguard Worker
588*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
589*9880d681SAndroid Build Coastguard Worker
590*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FRT;
591*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = FRA;
592*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
593*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
594*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
595*9880d681SAndroid Build Coastguard Worker}
596*9880d681SAndroid Build Coastguard Worker
597*9880d681SAndroid Build Coastguard Workerclass XForm_19<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
598*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
599*9880d681SAndroid Build Coastguard Worker  : XForm_18<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
600*9880d681SAndroid Build Coastguard Worker  let FRA = 0;
601*9880d681SAndroid Build Coastguard Worker}
602*9880d681SAndroid Build Coastguard Worker
603*9880d681SAndroid Build Coastguard Workerclass XForm_20<bits<6> opcode, bits<6> xo, dag OOL, dag IOL, string asmstr,
604*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
605*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
606*9880d681SAndroid Build Coastguard Worker  bits<5> FRT;
607*9880d681SAndroid Build Coastguard Worker  bits<5> FRA;
608*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
609*9880d681SAndroid Build Coastguard Worker  bits<4> tttt;
610*9880d681SAndroid Build Coastguard Worker
611*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FRT;
614*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = FRA;
615*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
616*9880d681SAndroid Build Coastguard Worker  let Inst{21-24} = tttt;
617*9880d681SAndroid Build Coastguard Worker  let Inst{25-30} = xo;
618*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
619*9880d681SAndroid Build Coastguard Worker}
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Workerclass XForm_24<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
622*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
623*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
624*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
625*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = 31;
626*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
627*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
628*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
629*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
630*9880d681SAndroid Build Coastguard Worker}
631*9880d681SAndroid Build Coastguard Worker
632*9880d681SAndroid Build Coastguard Workerclass XForm_24_sync<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
633*9880d681SAndroid Build Coastguard Worker               string asmstr, InstrItinClass itin, list<dag> pattern>
634*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
635*9880d681SAndroid Build Coastguard Worker  bits<2> L;
636*9880d681SAndroid Build Coastguard Worker
637*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
638*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = 0;
639*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = L;
640*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
641*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
642*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
643*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Workerclass XForm_24_eieio<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
647*9880d681SAndroid Build Coastguard Worker               string asmstr, InstrItinClass itin, list<dag> pattern>
648*9880d681SAndroid Build Coastguard Worker  : XForm_24_sync<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
649*9880d681SAndroid Build Coastguard Worker  let L = 0;
650*9880d681SAndroid Build Coastguard Worker}
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerclass XForm_25<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
653*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
654*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
655*9880d681SAndroid Build Coastguard Worker}
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Workerclass XForm_26<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
658*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
659*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
660*9880d681SAndroid Build Coastguard Worker  let A = 0;
661*9880d681SAndroid Build Coastguard Worker}
662*9880d681SAndroid Build Coastguard Worker
663*9880d681SAndroid Build Coastguard Workerclass XForm_28<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
664*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
665*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
666*9880d681SAndroid Build Coastguard Worker}
667*9880d681SAndroid Build Coastguard Worker
668*9880d681SAndroid Build Coastguard Worker// This is used for MFFS, MTFSB0, MTFSB1.  42 is arbitrary; this series of
669*9880d681SAndroid Build Coastguard Worker// numbers presumably relates to some document, but I haven't found it.
670*9880d681SAndroid Build Coastguard Workerclass XForm_42<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
671*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
672*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
673*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
674*9880d681SAndroid Build Coastguard Worker
675*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
676*9880d681SAndroid Build Coastguard Worker
677*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RST;
678*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = 0;
679*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
680*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
681*9880d681SAndroid Build Coastguard Worker}
682*9880d681SAndroid Build Coastguard Workerclass XForm_43<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
683*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
684*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
685*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
686*9880d681SAndroid Build Coastguard Worker  bits<5> FM;
687*9880d681SAndroid Build Coastguard Worker
688*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
689*9880d681SAndroid Build Coastguard Worker
690*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FM;
691*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = 0;
692*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
693*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
694*9880d681SAndroid Build Coastguard Worker}
695*9880d681SAndroid Build Coastguard Worker
696*9880d681SAndroid Build Coastguard Workerclass XForm_0<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
697*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
698*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
699*9880d681SAndroid Build Coastguard Worker  let RST = 0;
700*9880d681SAndroid Build Coastguard Worker  let A = 0;
701*9880d681SAndroid Build Coastguard Worker  let B = 0;
702*9880d681SAndroid Build Coastguard Worker}
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Workerclass XForm_16b<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
705*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
706*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
707*9880d681SAndroid Build Coastguard Worker  let RST = 0;
708*9880d681SAndroid Build Coastguard Worker  let A = 0;
709*9880d681SAndroid Build Coastguard Worker}
710*9880d681SAndroid Build Coastguard Worker
711*9880d681SAndroid Build Coastguard Workerclass XForm_htm0<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
712*9880d681SAndroid Build Coastguard Worker                 string asmstr, InstrItinClass itin, list<dag> pattern>
713*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
714*9880d681SAndroid Build Coastguard Worker  bit R;
715*9880d681SAndroid Build Coastguard Worker
716*9880d681SAndroid Build Coastguard Worker  bit RC = 1;
717*9880d681SAndroid Build Coastguard Worker
718*9880d681SAndroid Build Coastguard Worker  let Inst{6-9}   = 0;
719*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = R;
720*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = 0;
721*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
722*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
723*9880d681SAndroid Build Coastguard Worker}
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Workerclass XForm_htm1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
726*9880d681SAndroid Build Coastguard Worker                 string asmstr, InstrItinClass itin, list<dag> pattern>
727*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
728*9880d681SAndroid Build Coastguard Worker  bit A;
729*9880d681SAndroid Build Coastguard Worker
730*9880d681SAndroid Build Coastguard Worker  bit RC = 1;
731*9880d681SAndroid Build Coastguard Worker
732*9880d681SAndroid Build Coastguard Worker  let Inst{6}     = A;
733*9880d681SAndroid Build Coastguard Worker  let Inst{7-20}  = 0;
734*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
735*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
736*9880d681SAndroid Build Coastguard Worker}
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Workerclass XForm_htm2<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
739*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
740*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
741*9880d681SAndroid Build Coastguard Worker  bit L;
742*9880d681SAndroid Build Coastguard Worker
743*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
744*9880d681SAndroid Build Coastguard Worker
745*9880d681SAndroid Build Coastguard Worker  let Inst{7-9}   = 0;
746*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = L;
747*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = 0;
748*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
749*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
750*9880d681SAndroid Build Coastguard Worker}
751*9880d681SAndroid Build Coastguard Worker
752*9880d681SAndroid Build Coastguard Workerclass XForm_htm3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
753*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
754*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
755*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
756*9880d681SAndroid Build Coastguard Worker
757*9880d681SAndroid Build Coastguard Worker  bit RC = 0;
758*9880d681SAndroid Build Coastguard Worker
759*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
760*9880d681SAndroid Build Coastguard Worker  let Inst{9-20}  = 0;
761*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
762*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
763*9880d681SAndroid Build Coastguard Worker}
764*9880d681SAndroid Build Coastguard Worker
765*9880d681SAndroid Build Coastguard Worker// [PO RT RA RB XO /]
766*9880d681SAndroid Build Coastguard Workerclass X_BF3_L1_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
767*9880d681SAndroid Build Coastguard Worker                       string asmstr, InstrItinClass itin, list<dag> pattern>
768*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
769*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
770*9880d681SAndroid Build Coastguard Worker  bits<1> L;
771*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
772*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
773*9880d681SAndroid Build Coastguard Worker
774*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
775*9880d681SAndroid Build Coastguard Worker
776*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
777*9880d681SAndroid Build Coastguard Worker  let Inst{9}     = 0;
778*9880d681SAndroid Build Coastguard Worker  let Inst{10}    = L;
779*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
780*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
781*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
782*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
783*9880d681SAndroid Build Coastguard Worker}
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Worker// Same as XForm_17 but with GPR's and new naming convention
786*9880d681SAndroid Build Coastguard Workerclass X_BF3_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
787*9880d681SAndroid Build Coastguard Worker                    string asmstr, InstrItinClass itin, list<dag> pattern>
788*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
789*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
790*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
791*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
792*9880d681SAndroid Build Coastguard Worker
793*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
794*9880d681SAndroid Build Coastguard Worker
795*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
796*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = 0;
797*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
798*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
799*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
800*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
801*9880d681SAndroid Build Coastguard Worker}
802*9880d681SAndroid Build Coastguard Worker
803*9880d681SAndroid Build Coastguard Worker// e.g. [PO VRT XO VRB XO /] or [PO VRT XO VRB XO RO]
804*9880d681SAndroid Build Coastguard Workerclass X_RD5_XO5_RS5<bits<6> opcode, bits<5> xo2, bits<10> xo, dag OOL, dag IOL,
805*9880d681SAndroid Build Coastguard Worker                    string asmstr, InstrItinClass itin, list<dag> pattern>
806*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
807*9880d681SAndroid Build Coastguard Worker  let A = xo2;
808*9880d681SAndroid Build Coastguard Worker}
809*9880d681SAndroid Build Coastguard Worker
810*9880d681SAndroid Build Coastguard Workerclass X_BF3_DCMX7_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
811*9880d681SAndroid Build Coastguard Worker                      string asmstr, InstrItinClass itin, list<dag> pattern>
812*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
813*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
814*9880d681SAndroid Build Coastguard Worker  bits<7> DCMX;
815*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
816*9880d681SAndroid Build Coastguard Worker
817*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}  = BF;
820*9880d681SAndroid Build Coastguard Worker  let Inst{9-15} = DCMX;
821*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
822*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
823*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
824*9880d681SAndroid Build Coastguard Worker}
825*9880d681SAndroid Build Coastguard Worker
826*9880d681SAndroid Build Coastguard Workerclass X_RD6_IMM8<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
827*9880d681SAndroid Build Coastguard Worker                 string asmstr, InstrItinClass itin, list<dag> pattern>
828*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
829*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
830*9880d681SAndroid Build Coastguard Worker  bits<8> IMM8;
831*9880d681SAndroid Build Coastguard Worker
832*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
833*9880d681SAndroid Build Coastguard Worker
834*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
835*9880d681SAndroid Build Coastguard Worker  let Inst{11-12} = 0;
836*9880d681SAndroid Build Coastguard Worker  let Inst{13-20} = IMM8;
837*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
838*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
839*9880d681SAndroid Build Coastguard Worker}
840*9880d681SAndroid Build Coastguard Worker
841*9880d681SAndroid Build Coastguard Worker// XForm_base_r3xo for instructions such as P9 atomics where we don't want
842*9880d681SAndroid Build Coastguard Worker// to specify an SDAG pattern for matching.
843*9880d681SAndroid Build Coastguard Workerclass X_RD5_RS5_IM5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
844*9880d681SAndroid Build Coastguard Worker                    string asmstr, InstrItinClass itin>
845*9880d681SAndroid Build Coastguard Worker  : XForm_base_r3xo<opcode, xo, OOL, IOL, asmstr, itin, []> {
846*9880d681SAndroid Build Coastguard Worker}
847*9880d681SAndroid Build Coastguard Worker
848*9880d681SAndroid Build Coastguard Workerclass X_BF3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
849*9880d681SAndroid Build Coastguard Worker            InstrItinClass itin>
850*9880d681SAndroid Build Coastguard Worker  : XForm_17<opcode, xo, OOL, IOL, asmstr, itin> {
851*9880d681SAndroid Build Coastguard Worker  let FRA = 0;
852*9880d681SAndroid Build Coastguard Worker  let FRB = 0;
853*9880d681SAndroid Build Coastguard Worker}
854*9880d681SAndroid Build Coastguard Worker
855*9880d681SAndroid Build Coastguard Worker// [PO /// L RA RB XO /]
856*9880d681SAndroid Build Coastguard Workerclass X_L1_RS5_RS5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
857*9880d681SAndroid Build Coastguard Worker                   string asmstr, InstrItinClass itin, list<dag> pattern>
858*9880d681SAndroid Build Coastguard Worker  : XForm_16<opcode, xo, OOL, IOL, asmstr, itin> {
859*9880d681SAndroid Build Coastguard Worker  let BF = 0;
860*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
861*9880d681SAndroid Build Coastguard Worker
862*9880d681SAndroid Build Coastguard Worker  bit RC = 0;
863*9880d681SAndroid Build Coastguard Worker  let Inst{31} = RC;
864*9880d681SAndroid Build Coastguard Worker}
865*9880d681SAndroid Build Coastguard Worker
866*9880d681SAndroid Build Coastguard Worker// XX*-Form (VSX)
867*9880d681SAndroid Build Coastguard Workerclass XX1Form<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
868*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
869*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
870*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
871*9880d681SAndroid Build Coastguard Worker  bits<5> A;
872*9880d681SAndroid Build Coastguard Worker  bits<5> B;
873*9880d681SAndroid Build Coastguard Worker
874*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
875*9880d681SAndroid Build Coastguard Worker
876*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
877*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
878*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
879*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
880*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
881*9880d681SAndroid Build Coastguard Worker}
882*9880d681SAndroid Build Coastguard Worker
883*9880d681SAndroid Build Coastguard Workerclass XX1_RS6_RD5_XO<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
884*9880d681SAndroid Build Coastguard Worker                     string asmstr, InstrItinClass itin, list<dag> pattern>
885*9880d681SAndroid Build Coastguard Worker  : XX1Form<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
886*9880d681SAndroid Build Coastguard Worker  let B = 0;
887*9880d681SAndroid Build Coastguard Worker}
888*9880d681SAndroid Build Coastguard Worker
889*9880d681SAndroid Build Coastguard Workerclass XX2Form<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
890*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
891*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
892*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
893*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
894*9880d681SAndroid Build Coastguard Worker
895*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
896*9880d681SAndroid Build Coastguard Worker
897*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
898*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
899*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
900*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
901*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
902*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
903*9880d681SAndroid Build Coastguard Worker}
904*9880d681SAndroid Build Coastguard Worker
905*9880d681SAndroid Build Coastguard Workerclass XX2Form_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
906*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
907*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
908*9880d681SAndroid Build Coastguard Worker  bits<3> CR;
909*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
912*9880d681SAndroid Build Coastguard Worker
913*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = CR;
914*9880d681SAndroid Build Coastguard Worker  let Inst{9-15}  = 0;
915*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
916*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
917*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
918*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
919*9880d681SAndroid Build Coastguard Worker}
920*9880d681SAndroid Build Coastguard Worker
921*9880d681SAndroid Build Coastguard Workerclass XX2Form_2<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
922*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
923*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
924*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
925*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
926*9880d681SAndroid Build Coastguard Worker  bits<2> D;
927*9880d681SAndroid Build Coastguard Worker
928*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
929*9880d681SAndroid Build Coastguard Worker
930*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
931*9880d681SAndroid Build Coastguard Worker  let Inst{11-13} = 0;
932*9880d681SAndroid Build Coastguard Worker  let Inst{14-15} = D;
933*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
934*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
935*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
936*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
937*9880d681SAndroid Build Coastguard Worker}
938*9880d681SAndroid Build Coastguard Worker
939*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_UIM5_RS6<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
940*9880d681SAndroid Build Coastguard Worker                       string asmstr, InstrItinClass itin, list<dag> pattern>
941*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
942*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
943*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
944*9880d681SAndroid Build Coastguard Worker  bits<5> UIM5;
945*9880d681SAndroid Build Coastguard Worker
946*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
947*9880d681SAndroid Build Coastguard Worker
948*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
949*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = UIM5;
950*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
951*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
952*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
953*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
954*9880d681SAndroid Build Coastguard Worker}
955*9880d681SAndroid Build Coastguard Worker
956*9880d681SAndroid Build Coastguard Worker// [PO T XO B XO BX /]
957*9880d681SAndroid Build Coastguard Workerclass XX2_RD5_XO5_RS6<bits<6> opcode, bits<5> xo2, bits<9> xo, dag OOL, dag IOL,
958*9880d681SAndroid Build Coastguard Worker                       string asmstr, InstrItinClass itin, list<dag> pattern>
959*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
960*9880d681SAndroid Build Coastguard Worker  bits<5> RT;
961*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
962*9880d681SAndroid Build Coastguard Worker
963*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
964*9880d681SAndroid Build Coastguard Worker
965*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
966*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = xo2;
967*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
968*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
969*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
970*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
971*9880d681SAndroid Build Coastguard Worker}
972*9880d681SAndroid Build Coastguard Worker
973*9880d681SAndroid Build Coastguard Worker// [PO T XO B XO BX TX]
974*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_XO5_RS6<bits<6> opcode, bits<5> xo2, bits<9> xo, dag OOL, dag IOL,
975*9880d681SAndroid Build Coastguard Worker                      string asmstr, InstrItinClass itin, list<dag> pattern>
976*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
977*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
978*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
979*9880d681SAndroid Build Coastguard Worker
980*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
981*9880d681SAndroid Build Coastguard Worker
982*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
983*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = xo2;
984*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
985*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
986*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
987*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
988*9880d681SAndroid Build Coastguard Worker}
989*9880d681SAndroid Build Coastguard Worker
990*9880d681SAndroid Build Coastguard Workerclass XX2_BF3_DCMX7_RS6<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
991*9880d681SAndroid Build Coastguard Worker                      string asmstr, InstrItinClass itin, list<dag> pattern>
992*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
993*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
994*9880d681SAndroid Build Coastguard Worker  bits<7> DCMX;
995*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
996*9880d681SAndroid Build Coastguard Worker
997*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
998*9880d681SAndroid Build Coastguard Worker
999*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}  = BF;
1000*9880d681SAndroid Build Coastguard Worker  let Inst{9-15} = DCMX;
1001*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1002*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
1003*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1004*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1005*9880d681SAndroid Build Coastguard Worker}
1006*9880d681SAndroid Build Coastguard Worker
1007*9880d681SAndroid Build Coastguard Workerclass XX2_RD6_DCMX7_RS6<bits<6> opcode, bits<4> xo1, bits<3> xo2,
1008*9880d681SAndroid Build Coastguard Worker                        dag OOL, dag IOL, string asmstr, InstrItinClass itin,
1009*9880d681SAndroid Build Coastguard Worker                        list<dag> pattern>
1010*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1011*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
1012*9880d681SAndroid Build Coastguard Worker  bits<7> DCMX;
1013*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1014*9880d681SAndroid Build Coastguard Worker
1015*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1016*9880d681SAndroid Build Coastguard Worker
1017*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
1018*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = DCMX{4-0};
1019*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1020*9880d681SAndroid Build Coastguard Worker  let Inst{21-24} = xo1;
1021*9880d681SAndroid Build Coastguard Worker  let Inst{25}    = DCMX{5};
1022*9880d681SAndroid Build Coastguard Worker  let Inst{26-28} = xo2;
1023*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = DCMX{6};
1024*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1025*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
1026*9880d681SAndroid Build Coastguard Worker}
1027*9880d681SAndroid Build Coastguard Worker
1028*9880d681SAndroid Build Coastguard Workerclass XX3Form<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
1029*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1030*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1031*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
1032*9880d681SAndroid Build Coastguard Worker  bits<6> XA;
1033*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1034*9880d681SAndroid Build Coastguard Worker
1035*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1036*9880d681SAndroid Build Coastguard Worker
1037*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
1038*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = XA{4-0};
1039*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1040*9880d681SAndroid Build Coastguard Worker  let Inst{21-28} = xo;
1041*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = XA{5};
1042*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1043*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
1044*9880d681SAndroid Build Coastguard Worker}
1045*9880d681SAndroid Build Coastguard Worker
1046*9880d681SAndroid Build Coastguard Workerclass XX3Form_1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
1047*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
1048*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1049*9880d681SAndroid Build Coastguard Worker  bits<3> CR;
1050*9880d681SAndroid Build Coastguard Worker  bits<6> XA;
1051*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1052*9880d681SAndroid Build Coastguard Worker
1053*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1054*9880d681SAndroid Build Coastguard Worker
1055*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = CR;
1056*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = 0;
1057*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = XA{4-0};
1058*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1059*9880d681SAndroid Build Coastguard Worker  let Inst{21-28} = xo;
1060*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = XA{5};
1061*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1062*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1063*9880d681SAndroid Build Coastguard Worker}
1064*9880d681SAndroid Build Coastguard Worker
1065*9880d681SAndroid Build Coastguard Workerclass XX3Form_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1066*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
1067*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1068*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
1069*9880d681SAndroid Build Coastguard Worker  bits<6> XA;
1070*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1071*9880d681SAndroid Build Coastguard Worker  bits<2> D;
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1074*9880d681SAndroid Build Coastguard Worker
1075*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
1076*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = XA{4-0};
1077*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1078*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = 0;
1079*9880d681SAndroid Build Coastguard Worker  let Inst{22-23} = D;
1080*9880d681SAndroid Build Coastguard Worker  let Inst{24-28} = xo;
1081*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = XA{5};
1082*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1083*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
1084*9880d681SAndroid Build Coastguard Worker}
1085*9880d681SAndroid Build Coastguard Worker
1086*9880d681SAndroid Build Coastguard Workerclass XX3Form_Rc<bits<6> opcode, bits<7> xo, dag OOL, dag IOL, string asmstr,
1087*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1088*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1089*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
1090*9880d681SAndroid Build Coastguard Worker  bits<6> XA;
1091*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1092*9880d681SAndroid Build Coastguard Worker
1093*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1094*9880d681SAndroid Build Coastguard Worker
1095*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1096*9880d681SAndroid Build Coastguard Worker
1097*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
1098*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = XA{4-0};
1099*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1100*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = RC;
1101*9880d681SAndroid Build Coastguard Worker  let Inst{22-28} = xo;
1102*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = XA{5};
1103*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1104*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
1105*9880d681SAndroid Build Coastguard Worker}
1106*9880d681SAndroid Build Coastguard Worker
1107*9880d681SAndroid Build Coastguard Workerclass XX4Form<bits<6> opcode, bits<2> xo, dag OOL, dag IOL, string asmstr,
1108*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1109*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1110*9880d681SAndroid Build Coastguard Worker  bits<6> XT;
1111*9880d681SAndroid Build Coastguard Worker  bits<6> XA;
1112*9880d681SAndroid Build Coastguard Worker  bits<6> XB;
1113*9880d681SAndroid Build Coastguard Worker  bits<6> XC;
1114*9880d681SAndroid Build Coastguard Worker
1115*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1116*9880d681SAndroid Build Coastguard Worker
1117*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = XT{4-0};
1118*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = XA{4-0};
1119*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = XB{4-0};
1120*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = XC{4-0};
1121*9880d681SAndroid Build Coastguard Worker  let Inst{26-27} = xo;
1122*9880d681SAndroid Build Coastguard Worker  let Inst{28}    = XC{5};
1123*9880d681SAndroid Build Coastguard Worker  let Inst{29}    = XA{5};
1124*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = XB{5};
1125*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = XT{5};
1126*9880d681SAndroid Build Coastguard Worker}
1127*9880d681SAndroid Build Coastguard Worker
1128*9880d681SAndroid Build Coastguard Worker// DCB_Form - Form X instruction, used for dcb* instructions.
1129*9880d681SAndroid Build Coastguard Workerclass DCB_Form<bits<10> xo, bits<5> immfield, dag OOL, dag IOL, string asmstr,
1130*9880d681SAndroid Build Coastguard Worker                      InstrItinClass itin, list<dag> pattern>
1131*9880d681SAndroid Build Coastguard Worker  : I<31, OOL, IOL, asmstr, itin> {
1132*9880d681SAndroid Build Coastguard Worker  bits<5> A;
1133*9880d681SAndroid Build Coastguard Worker  bits<5> B;
1134*9880d681SAndroid Build Coastguard Worker
1135*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1136*9880d681SAndroid Build Coastguard Worker
1137*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = immfield;
1138*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
1139*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
1140*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1141*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1142*9880d681SAndroid Build Coastguard Worker}
1143*9880d681SAndroid Build Coastguard Worker
1144*9880d681SAndroid Build Coastguard Workerclass DCB_Form_hint<bits<10> xo, dag OOL, dag IOL, string asmstr,
1145*9880d681SAndroid Build Coastguard Worker                    InstrItinClass itin, list<dag> pattern>
1146*9880d681SAndroid Build Coastguard Worker  : I<31, OOL, IOL, asmstr, itin> {
1147*9880d681SAndroid Build Coastguard Worker  bits<5> TH;
1148*9880d681SAndroid Build Coastguard Worker  bits<5> A;
1149*9880d681SAndroid Build Coastguard Worker  bits<5> B;
1150*9880d681SAndroid Build Coastguard Worker
1151*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1152*9880d681SAndroid Build Coastguard Worker
1153*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = TH;
1154*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
1155*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
1156*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1157*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1158*9880d681SAndroid Build Coastguard Worker}
1159*9880d681SAndroid Build Coastguard Worker
1160*9880d681SAndroid Build Coastguard Worker// DSS_Form - Form X instruction, used for altivec dss* instructions.
1161*9880d681SAndroid Build Coastguard Workerclass DSS_Form<bits<1> T, bits<10> xo, dag OOL, dag IOL, string asmstr,
1162*9880d681SAndroid Build Coastguard Worker                      InstrItinClass itin, list<dag> pattern>
1163*9880d681SAndroid Build Coastguard Worker  : I<31, OOL, IOL, asmstr, itin> {
1164*9880d681SAndroid Build Coastguard Worker  bits<2> STRM;
1165*9880d681SAndroid Build Coastguard Worker  bits<5> A;
1166*9880d681SAndroid Build Coastguard Worker  bits<5> B;
1167*9880d681SAndroid Build Coastguard Worker
1168*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1169*9880d681SAndroid Build Coastguard Worker
1170*9880d681SAndroid Build Coastguard Worker  let Inst{6}     = T;
1171*9880d681SAndroid Build Coastguard Worker  let Inst{7-8}   = 0;
1172*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = STRM;
1173*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
1174*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = B;
1175*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1176*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1177*9880d681SAndroid Build Coastguard Worker}
1178*9880d681SAndroid Build Coastguard Worker
1179*9880d681SAndroid Build Coastguard Worker// 1.7.7 XL-Form
1180*9880d681SAndroid Build Coastguard Workerclass XLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1181*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1182*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1183*9880d681SAndroid Build Coastguard Worker  bits<5> CRD;
1184*9880d681SAndroid Build Coastguard Worker  bits<5> CRA;
1185*9880d681SAndroid Build Coastguard Worker  bits<5> CRB;
1186*9880d681SAndroid Build Coastguard Worker
1187*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1188*9880d681SAndroid Build Coastguard Worker
1189*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = CRD;
1190*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = CRA;
1191*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = CRB;
1192*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1193*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1194*9880d681SAndroid Build Coastguard Worker}
1195*9880d681SAndroid Build Coastguard Worker
1196*9880d681SAndroid Build Coastguard Workerclass XLForm_1_ext<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1197*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1198*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1199*9880d681SAndroid Build Coastguard Worker  bits<5> CRD;
1200*9880d681SAndroid Build Coastguard Worker
1201*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1202*9880d681SAndroid Build Coastguard Worker
1203*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = CRD;
1204*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = CRD;
1205*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = CRD;
1206*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1207*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1208*9880d681SAndroid Build Coastguard Worker}
1209*9880d681SAndroid Build Coastguard Worker
1210*9880d681SAndroid Build Coastguard Workerclass XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OOL, dag IOL, string asmstr,
1211*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1212*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1213*9880d681SAndroid Build Coastguard Worker  bits<5> BO;
1214*9880d681SAndroid Build Coastguard Worker  bits<5> BI;
1215*9880d681SAndroid Build Coastguard Worker  bits<2> BH;
1216*9880d681SAndroid Build Coastguard Worker
1217*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1218*9880d681SAndroid Build Coastguard Worker
1219*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = BO;
1220*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = BI;
1221*9880d681SAndroid Build Coastguard Worker  let Inst{16-18} = 0;
1222*9880d681SAndroid Build Coastguard Worker  let Inst{19-20} = BH;
1223*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1224*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
1225*9880d681SAndroid Build Coastguard Worker}
1226*9880d681SAndroid Build Coastguard Worker
1227*9880d681SAndroid Build Coastguard Workerclass XLForm_2_br<bits<6> opcode, bits<10> xo, bit lk,
1228*9880d681SAndroid Build Coastguard Worker                  dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
1229*9880d681SAndroid Build Coastguard Worker  : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
1230*9880d681SAndroid Build Coastguard Worker  bits<7> BIBO;  // 2 bits of BI and 5 bits of BO.
1231*9880d681SAndroid Build Coastguard Worker  bits<3>  CR;
1232*9880d681SAndroid Build Coastguard Worker
1233*9880d681SAndroid Build Coastguard Worker  let BO = BIBO{4-0};
1234*9880d681SAndroid Build Coastguard Worker  let BI{0-1} = BIBO{5-6};
1235*9880d681SAndroid Build Coastguard Worker  let BI{2-4} = CR{0-2};
1236*9880d681SAndroid Build Coastguard Worker  let BH = 0;
1237*9880d681SAndroid Build Coastguard Worker}
1238*9880d681SAndroid Build Coastguard Worker
1239*9880d681SAndroid Build Coastguard Workerclass XLForm_2_br2<bits<6> opcode, bits<10> xo, bits<5> bo, bit lk,
1240*9880d681SAndroid Build Coastguard Worker                   dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
1241*9880d681SAndroid Build Coastguard Worker  : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
1242*9880d681SAndroid Build Coastguard Worker  let BO = bo;
1243*9880d681SAndroid Build Coastguard Worker  let BH = 0;
1244*9880d681SAndroid Build Coastguard Worker}
1245*9880d681SAndroid Build Coastguard Worker
1246*9880d681SAndroid Build Coastguard Workerclass XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo,  bits<5> bi, bit lk,
1247*9880d681SAndroid Build Coastguard Worker                  dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
1248*9880d681SAndroid Build Coastguard Worker  : XLForm_2<opcode, xo, lk, OOL, IOL, asmstr, itin, pattern> {
1249*9880d681SAndroid Build Coastguard Worker  let BO = bo;
1250*9880d681SAndroid Build Coastguard Worker  let BI = bi;
1251*9880d681SAndroid Build Coastguard Worker  let BH = 0;
1252*9880d681SAndroid Build Coastguard Worker}
1253*9880d681SAndroid Build Coastguard Worker
1254*9880d681SAndroid Build Coastguard Workerclass XLForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1255*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin>
1256*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1257*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
1258*9880d681SAndroid Build Coastguard Worker  bits<3> BFA;
1259*9880d681SAndroid Build Coastguard Worker
1260*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
1261*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = 0;
1262*9880d681SAndroid Build Coastguard Worker  let Inst{11-13} = BFA;
1263*9880d681SAndroid Build Coastguard Worker  let Inst{14-15} = 0;
1264*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
1265*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1266*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1267*9880d681SAndroid Build Coastguard Worker}
1268*9880d681SAndroid Build Coastguard Worker
1269*9880d681SAndroid Build Coastguard Workerclass XLForm_4<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1270*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin>
1271*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1272*9880d681SAndroid Build Coastguard Worker  bits<3> BF;
1273*9880d681SAndroid Build Coastguard Worker  bit W;
1274*9880d681SAndroid Build Coastguard Worker  bits<4> U;
1275*9880d681SAndroid Build Coastguard Worker
1276*9880d681SAndroid Build Coastguard Worker  bit RC = 0;
1277*9880d681SAndroid Build Coastguard Worker
1278*9880d681SAndroid Build Coastguard Worker  let Inst{6-8}   = BF;
1279*9880d681SAndroid Build Coastguard Worker  let Inst{9-10}  = 0;
1280*9880d681SAndroid Build Coastguard Worker  let Inst{11-14} = 0;
1281*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = W;
1282*9880d681SAndroid Build Coastguard Worker  let Inst{16-19} = U;
1283*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = 0;
1284*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1285*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1286*9880d681SAndroid Build Coastguard Worker}
1287*9880d681SAndroid Build Coastguard Worker
1288*9880d681SAndroid Build Coastguard Workerclass XLForm_S<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1289*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1290*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1291*9880d681SAndroid Build Coastguard Worker  bits<1> S;
1292*9880d681SAndroid Build Coastguard Worker
1293*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1294*9880d681SAndroid Build Coastguard Worker
1295*9880d681SAndroid Build Coastguard Worker  let Inst{6-19}  = 0;
1296*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = S;
1297*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1298*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1299*9880d681SAndroid Build Coastguard Worker}
1300*9880d681SAndroid Build Coastguard Worker
1301*9880d681SAndroid Build Coastguard Workerclass XLForm_2_and_DSForm_1<bits<6> opcode1, bits<10> xo1, bit lk,
1302*9880d681SAndroid Build Coastguard Worker                            bits<6> opcode2, bits<2> xo2,
1303*9880d681SAndroid Build Coastguard Worker                            dag OOL, dag IOL, string asmstr,
1304*9880d681SAndroid Build Coastguard Worker                            InstrItinClass itin, list<dag> pattern>
1305*9880d681SAndroid Build Coastguard Worker        : I2<opcode1, opcode2, OOL, IOL, asmstr, itin> {
1306*9880d681SAndroid Build Coastguard Worker  bits<5> BO;
1307*9880d681SAndroid Build Coastguard Worker  bits<5> BI;
1308*9880d681SAndroid Build Coastguard Worker  bits<2> BH;
1309*9880d681SAndroid Build Coastguard Worker
1310*9880d681SAndroid Build Coastguard Worker  bits<5>  RST;
1311*9880d681SAndroid Build Coastguard Worker  bits<19> DS_RA;
1312*9880d681SAndroid Build Coastguard Worker
1313*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1314*9880d681SAndroid Build Coastguard Worker
1315*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = BO;
1316*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = BI;
1317*9880d681SAndroid Build Coastguard Worker  let Inst{16-18} = 0;
1318*9880d681SAndroid Build Coastguard Worker  let Inst{19-20} = BH;
1319*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo1;
1320*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = lk;
1321*9880d681SAndroid Build Coastguard Worker
1322*9880d681SAndroid Build Coastguard Worker  let Inst{38-42} = RST;
1323*9880d681SAndroid Build Coastguard Worker  let Inst{43-47} = DS_RA{18-14};  // Register #
1324*9880d681SAndroid Build Coastguard Worker  let Inst{48-61} = DS_RA{13-0};   // Displacement.
1325*9880d681SAndroid Build Coastguard Worker  let Inst{62-63} = xo2;
1326*9880d681SAndroid Build Coastguard Worker}
1327*9880d681SAndroid Build Coastguard Worker
1328*9880d681SAndroid Build Coastguard Workerclass XLForm_2_ext_and_DSForm_1<bits<6> opcode1, bits<10> xo1,
1329*9880d681SAndroid Build Coastguard Worker                                bits<5> bo, bits<5> bi, bit lk,
1330*9880d681SAndroid Build Coastguard Worker                                bits<6> opcode2, bits<2> xo2,
1331*9880d681SAndroid Build Coastguard Worker                                dag OOL, dag IOL, string asmstr,
1332*9880d681SAndroid Build Coastguard Worker                                InstrItinClass itin, list<dag> pattern>
1333*9880d681SAndroid Build Coastguard Worker  : XLForm_2_and_DSForm_1<opcode1, xo1, lk, opcode2, xo2,
1334*9880d681SAndroid Build Coastguard Worker                          OOL, IOL, asmstr, itin, pattern> {
1335*9880d681SAndroid Build Coastguard Worker  let BO = bo;
1336*9880d681SAndroid Build Coastguard Worker  let BI = bi;
1337*9880d681SAndroid Build Coastguard Worker  let BH = 0;
1338*9880d681SAndroid Build Coastguard Worker}
1339*9880d681SAndroid Build Coastguard Worker
1340*9880d681SAndroid Build Coastguard Worker// 1.7.8 XFX-Form
1341*9880d681SAndroid Build Coastguard Workerclass XFXForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1342*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
1343*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1344*9880d681SAndroid Build Coastguard Worker  bits<5>  RT;
1345*9880d681SAndroid Build Coastguard Worker  bits<10> SPR;
1346*9880d681SAndroid Build Coastguard Worker
1347*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
1348*9880d681SAndroid Build Coastguard Worker  let Inst{11}    = SPR{4};
1349*9880d681SAndroid Build Coastguard Worker  let Inst{12}    = SPR{3};
1350*9880d681SAndroid Build Coastguard Worker  let Inst{13}    = SPR{2};
1351*9880d681SAndroid Build Coastguard Worker  let Inst{14}    = SPR{1};
1352*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = SPR{0};
1353*9880d681SAndroid Build Coastguard Worker  let Inst{16}    = SPR{9};
1354*9880d681SAndroid Build Coastguard Worker  let Inst{17}    = SPR{8};
1355*9880d681SAndroid Build Coastguard Worker  let Inst{18}    = SPR{7};
1356*9880d681SAndroid Build Coastguard Worker  let Inst{19}    = SPR{6};
1357*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = SPR{5};
1358*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1359*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1360*9880d681SAndroid Build Coastguard Worker}
1361*9880d681SAndroid Build Coastguard Worker
1362*9880d681SAndroid Build Coastguard Workerclass XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
1363*9880d681SAndroid Build Coastguard Worker                   dag OOL, dag IOL, string asmstr, InstrItinClass itin>
1364*9880d681SAndroid Build Coastguard Worker  : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin> {
1365*9880d681SAndroid Build Coastguard Worker  let SPR = spr;
1366*9880d681SAndroid Build Coastguard Worker}
1367*9880d681SAndroid Build Coastguard Worker
1368*9880d681SAndroid Build Coastguard Workerclass XFXForm_3<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1369*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
1370*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1371*9880d681SAndroid Build Coastguard Worker  bits<5>  RT;
1372*9880d681SAndroid Build Coastguard Worker
1373*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
1374*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = 0;
1375*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1376*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1377*9880d681SAndroid Build Coastguard Worker}
1378*9880d681SAndroid Build Coastguard Worker
1379*9880d681SAndroid Build Coastguard Workerclass XFXForm_3p<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1380*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin, list<dag> pattern>
1381*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1382*9880d681SAndroid Build Coastguard Worker  bits<5>  RT;
1383*9880d681SAndroid Build Coastguard Worker  bits<10> Entry;
1384*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1385*9880d681SAndroid Build Coastguard Worker
1386*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
1387*9880d681SAndroid Build Coastguard Worker  let Inst{11-20} = Entry;
1388*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1389*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1390*9880d681SAndroid Build Coastguard Worker}
1391*9880d681SAndroid Build Coastguard Worker
1392*9880d681SAndroid Build Coastguard Workerclass XFXForm_5<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1393*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
1394*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1395*9880d681SAndroid Build Coastguard Worker  bits<8>  FXM;
1396*9880d681SAndroid Build Coastguard Worker  bits<5>  rS;
1397*9880d681SAndroid Build Coastguard Worker
1398*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = rS;
1399*9880d681SAndroid Build Coastguard Worker  let Inst{11}    = 0;
1400*9880d681SAndroid Build Coastguard Worker  let Inst{12-19} = FXM;
1401*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = 0;
1402*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1403*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1404*9880d681SAndroid Build Coastguard Worker}
1405*9880d681SAndroid Build Coastguard Worker
1406*9880d681SAndroid Build Coastguard Workerclass XFXForm_5a<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1407*9880d681SAndroid Build Coastguard Worker                 InstrItinClass itin>
1408*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1409*9880d681SAndroid Build Coastguard Worker  bits<5>  ST;
1410*9880d681SAndroid Build Coastguard Worker  bits<8>  FXM;
1411*9880d681SAndroid Build Coastguard Worker
1412*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = ST;
1413*9880d681SAndroid Build Coastguard Worker  let Inst{11}    = 1;
1414*9880d681SAndroid Build Coastguard Worker  let Inst{12-19} = FXM;
1415*9880d681SAndroid Build Coastguard Worker  let Inst{20}    = 0;
1416*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1417*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1418*9880d681SAndroid Build Coastguard Worker}
1419*9880d681SAndroid Build Coastguard Worker
1420*9880d681SAndroid Build Coastguard Workerclass XFXForm_7<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1421*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin>
1422*9880d681SAndroid Build Coastguard Worker  : XFXForm_1<opcode, xo, OOL, IOL, asmstr, itin>;
1423*9880d681SAndroid Build Coastguard Worker
1424*9880d681SAndroid Build Coastguard Workerclass XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr,
1425*9880d681SAndroid Build Coastguard Worker                    dag OOL, dag IOL, string asmstr, InstrItinClass itin>
1426*9880d681SAndroid Build Coastguard Worker  : XFXForm_7<opcode, xo, OOL, IOL, asmstr, itin> {
1427*9880d681SAndroid Build Coastguard Worker  let SPR = spr;
1428*9880d681SAndroid Build Coastguard Worker}
1429*9880d681SAndroid Build Coastguard Worker
1430*9880d681SAndroid Build Coastguard Worker// XFL-Form - MTFSF
1431*9880d681SAndroid Build Coastguard Worker// This is probably 1.7.9, but I don't have the reference that uses this
1432*9880d681SAndroid Build Coastguard Worker// numbering scheme...
1433*9880d681SAndroid Build Coastguard Workerclass XFLForm<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1434*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag>pattern>
1435*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1436*9880d681SAndroid Build Coastguard Worker  bits<8> FM;
1437*9880d681SAndroid Build Coastguard Worker  bits<5> rT;
1438*9880d681SAndroid Build Coastguard Worker
1439*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1440*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1441*9880d681SAndroid Build Coastguard Worker
1442*9880d681SAndroid Build Coastguard Worker  let Inst{6} = 0;
1443*9880d681SAndroid Build Coastguard Worker  let Inst{7-14}  = FM;
1444*9880d681SAndroid Build Coastguard Worker  let Inst{15} = 0;
1445*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = rT;
1446*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1447*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1448*9880d681SAndroid Build Coastguard Worker}
1449*9880d681SAndroid Build Coastguard Worker
1450*9880d681SAndroid Build Coastguard Workerclass XFLForm_1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
1451*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag>pattern>
1452*9880d681SAndroid Build Coastguard Worker  : I<opcode, OOL, IOL, asmstr, itin> {
1453*9880d681SAndroid Build Coastguard Worker  bit L;
1454*9880d681SAndroid Build Coastguard Worker  bits<8> FLM;
1455*9880d681SAndroid Build Coastguard Worker  bit W;
1456*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
1457*9880d681SAndroid Build Coastguard Worker
1458*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1459*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1460*9880d681SAndroid Build Coastguard Worker
1461*9880d681SAndroid Build Coastguard Worker  let Inst{6}     = L;
1462*9880d681SAndroid Build Coastguard Worker  let Inst{7-14}  = FLM;
1463*9880d681SAndroid Build Coastguard Worker  let Inst{15}    = W;
1464*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
1465*9880d681SAndroid Build Coastguard Worker  let Inst{21-30} = xo;
1466*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1467*9880d681SAndroid Build Coastguard Worker}
1468*9880d681SAndroid Build Coastguard Worker
1469*9880d681SAndroid Build Coastguard Worker// 1.7.10 XS-Form - SRADI.
1470*9880d681SAndroid Build Coastguard Workerclass XSForm_1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL, string asmstr,
1471*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1472*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1473*9880d681SAndroid Build Coastguard Worker  bits<5> A;
1474*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
1475*9880d681SAndroid Build Coastguard Worker  bits<6> SH;
1476*9880d681SAndroid Build Coastguard Worker
1477*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1478*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1479*9880d681SAndroid Build Coastguard Worker
1480*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RS;
1481*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = A;
1482*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = SH{4,3,2,1,0};
1483*9880d681SAndroid Build Coastguard Worker  let Inst{21-29} = xo;
1484*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = SH{5};
1485*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1486*9880d681SAndroid Build Coastguard Worker}
1487*9880d681SAndroid Build Coastguard Worker
1488*9880d681SAndroid Build Coastguard Worker// 1.7.11 XO-Form
1489*9880d681SAndroid Build Coastguard Workerclass XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OOL, dag IOL, string asmstr,
1490*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1491*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1492*9880d681SAndroid Build Coastguard Worker  bits<5> RT;
1493*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
1494*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
1495*9880d681SAndroid Build Coastguard Worker
1496*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1497*9880d681SAndroid Build Coastguard Worker
1498*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1499*9880d681SAndroid Build Coastguard Worker
1500*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
1501*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
1502*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
1503*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = oe;
1504*9880d681SAndroid Build Coastguard Worker  let Inst{22-30} = xo;
1505*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1506*9880d681SAndroid Build Coastguard Worker}
1507*9880d681SAndroid Build Coastguard Worker
1508*9880d681SAndroid Build Coastguard Workerclass XOForm_3<bits<6> opcode, bits<9> xo, bit oe,
1509*9880d681SAndroid Build Coastguard Worker               dag OOL, dag IOL, string asmstr, InstrItinClass itin, list<dag> pattern>
1510*9880d681SAndroid Build Coastguard Worker  : XOForm_1<opcode, xo, oe, OOL, IOL, asmstr, itin, pattern> {
1511*9880d681SAndroid Build Coastguard Worker  let RB = 0;
1512*9880d681SAndroid Build Coastguard Worker}
1513*9880d681SAndroid Build Coastguard Worker
1514*9880d681SAndroid Build Coastguard Worker// 1.7.12 A-Form
1515*9880d681SAndroid Build Coastguard Workerclass AForm_1<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1516*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1517*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1518*9880d681SAndroid Build Coastguard Worker  bits<5> FRT;
1519*9880d681SAndroid Build Coastguard Worker  bits<5> FRA;
1520*9880d681SAndroid Build Coastguard Worker  bits<5> FRC;
1521*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
1522*9880d681SAndroid Build Coastguard Worker
1523*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1524*9880d681SAndroid Build Coastguard Worker
1525*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1526*9880d681SAndroid Build Coastguard Worker
1527*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FRT;
1528*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = FRA;
1529*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
1530*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = FRC;
1531*9880d681SAndroid Build Coastguard Worker  let Inst{26-30} = xo;
1532*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1533*9880d681SAndroid Build Coastguard Worker}
1534*9880d681SAndroid Build Coastguard Worker
1535*9880d681SAndroid Build Coastguard Workerclass AForm_2<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1536*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1537*9880d681SAndroid Build Coastguard Worker  : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
1538*9880d681SAndroid Build Coastguard Worker  let FRC = 0;
1539*9880d681SAndroid Build Coastguard Worker}
1540*9880d681SAndroid Build Coastguard Worker
1541*9880d681SAndroid Build Coastguard Workerclass AForm_3<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1542*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1543*9880d681SAndroid Build Coastguard Worker  : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
1544*9880d681SAndroid Build Coastguard Worker  let FRB = 0;
1545*9880d681SAndroid Build Coastguard Worker}
1546*9880d681SAndroid Build Coastguard Worker
1547*9880d681SAndroid Build Coastguard Workerclass AForm_4<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1548*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1549*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1550*9880d681SAndroid Build Coastguard Worker  bits<5> RT;
1551*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
1552*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
1553*9880d681SAndroid Build Coastguard Worker  bits<5> COND;
1554*9880d681SAndroid Build Coastguard Worker
1555*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1556*9880d681SAndroid Build Coastguard Worker
1557*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RT;
1558*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
1559*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
1560*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = COND;
1561*9880d681SAndroid Build Coastguard Worker  let Inst{26-30} = xo;
1562*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = 0;
1563*9880d681SAndroid Build Coastguard Worker}
1564*9880d681SAndroid Build Coastguard Worker
1565*9880d681SAndroid Build Coastguard Worker// Used for QPX
1566*9880d681SAndroid Build Coastguard Workerclass AForm_4a<bits<6> opcode, bits<5> xo, dag OOL, dag IOL, string asmstr,
1567*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1568*9880d681SAndroid Build Coastguard Worker  : AForm_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
1569*9880d681SAndroid Build Coastguard Worker  let FRA = 0;
1570*9880d681SAndroid Build Coastguard Worker  let FRC = 0;
1571*9880d681SAndroid Build Coastguard Worker}
1572*9880d681SAndroid Build Coastguard Worker
1573*9880d681SAndroid Build Coastguard Worker// 1.7.13 M-Form
1574*9880d681SAndroid Build Coastguard Workerclass MForm_1<bits<6> opcode, dag OOL, dag IOL, string asmstr,
1575*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1576*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1577*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
1578*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
1579*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
1580*9880d681SAndroid Build Coastguard Worker  bits<5> MB;
1581*9880d681SAndroid Build Coastguard Worker  bits<5> ME;
1582*9880d681SAndroid Build Coastguard Worker
1583*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1584*9880d681SAndroid Build Coastguard Worker
1585*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1586*9880d681SAndroid Build Coastguard Worker
1587*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RS;
1588*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
1589*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
1590*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = MB;
1591*9880d681SAndroid Build Coastguard Worker  let Inst{26-30} = ME;
1592*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1593*9880d681SAndroid Build Coastguard Worker}
1594*9880d681SAndroid Build Coastguard Worker
1595*9880d681SAndroid Build Coastguard Workerclass MForm_2<bits<6> opcode, dag OOL, dag IOL, string asmstr,
1596*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1597*9880d681SAndroid Build Coastguard Worker  : MForm_1<opcode, OOL, IOL, asmstr, itin, pattern> {
1598*9880d681SAndroid Build Coastguard Worker}
1599*9880d681SAndroid Build Coastguard Worker
1600*9880d681SAndroid Build Coastguard Worker// 1.7.14 MD-Form
1601*9880d681SAndroid Build Coastguard Workerclass MDForm_1<bits<6> opcode, bits<3> xo, dag OOL, dag IOL, string asmstr,
1602*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1603*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1604*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
1605*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
1606*9880d681SAndroid Build Coastguard Worker  bits<6> SH;
1607*9880d681SAndroid Build Coastguard Worker  bits<6> MBE;
1608*9880d681SAndroid Build Coastguard Worker
1609*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1610*9880d681SAndroid Build Coastguard Worker
1611*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1612*9880d681SAndroid Build Coastguard Worker
1613*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RS;
1614*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
1615*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = SH{4,3,2,1,0};
1616*9880d681SAndroid Build Coastguard Worker  let Inst{21-26} = MBE{4,3,2,1,0,5};
1617*9880d681SAndroid Build Coastguard Worker  let Inst{27-29} = xo;
1618*9880d681SAndroid Build Coastguard Worker  let Inst{30}    = SH{5};
1619*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1620*9880d681SAndroid Build Coastguard Worker}
1621*9880d681SAndroid Build Coastguard Worker
1622*9880d681SAndroid Build Coastguard Workerclass MDSForm_1<bits<6> opcode, bits<4> xo, dag OOL, dag IOL, string asmstr,
1623*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
1624*9880d681SAndroid Build Coastguard Worker    : I<opcode, OOL, IOL, asmstr, itin> {
1625*9880d681SAndroid Build Coastguard Worker  bits<5> RA;
1626*9880d681SAndroid Build Coastguard Worker  bits<5> RS;
1627*9880d681SAndroid Build Coastguard Worker  bits<5> RB;
1628*9880d681SAndroid Build Coastguard Worker  bits<6> MBE;
1629*9880d681SAndroid Build Coastguard Worker
1630*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1631*9880d681SAndroid Build Coastguard Worker
1632*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1633*9880d681SAndroid Build Coastguard Worker
1634*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RS;
1635*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = RA;
1636*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = RB;
1637*9880d681SAndroid Build Coastguard Worker  let Inst{21-26} = MBE{4,3,2,1,0,5};
1638*9880d681SAndroid Build Coastguard Worker  let Inst{27-30} = xo;
1639*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1640*9880d681SAndroid Build Coastguard Worker}
1641*9880d681SAndroid Build Coastguard Worker
1642*9880d681SAndroid Build Coastguard Worker
1643*9880d681SAndroid Build Coastguard Worker// E-1 VA-Form
1644*9880d681SAndroid Build Coastguard Worker
1645*9880d681SAndroid Build Coastguard Worker// VAForm_1 - DACB ordering.
1646*9880d681SAndroid Build Coastguard Workerclass VAForm_1<bits<6> xo, dag OOL, dag IOL, string asmstr,
1647*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1648*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1649*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1650*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1651*9880d681SAndroid Build Coastguard Worker  bits<5> VC;
1652*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1653*9880d681SAndroid Build Coastguard Worker
1654*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1655*9880d681SAndroid Build Coastguard Worker
1656*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1657*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1658*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1659*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = VC;
1660*9880d681SAndroid Build Coastguard Worker  let Inst{26-31} = xo;
1661*9880d681SAndroid Build Coastguard Worker}
1662*9880d681SAndroid Build Coastguard Worker
1663*9880d681SAndroid Build Coastguard Worker// VAForm_1a - DABC ordering.
1664*9880d681SAndroid Build Coastguard Workerclass VAForm_1a<bits<6> xo, dag OOL, dag IOL, string asmstr,
1665*9880d681SAndroid Build Coastguard Worker                InstrItinClass itin, list<dag> pattern>
1666*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1667*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1668*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1669*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1670*9880d681SAndroid Build Coastguard Worker  bits<5> VC;
1671*9880d681SAndroid Build Coastguard Worker
1672*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1673*9880d681SAndroid Build Coastguard Worker
1674*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1675*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1676*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1677*9880d681SAndroid Build Coastguard Worker  let Inst{21-25} = VC;
1678*9880d681SAndroid Build Coastguard Worker  let Inst{26-31} = xo;
1679*9880d681SAndroid Build Coastguard Worker}
1680*9880d681SAndroid Build Coastguard Worker
1681*9880d681SAndroid Build Coastguard Workerclass VAForm_2<bits<6> xo, dag OOL, dag IOL, string asmstr,
1682*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1683*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1684*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1685*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1686*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1687*9880d681SAndroid Build Coastguard Worker  bits<4> SH;
1688*9880d681SAndroid Build Coastguard Worker
1689*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1690*9880d681SAndroid Build Coastguard Worker
1691*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1692*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1693*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1694*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = 0;
1695*9880d681SAndroid Build Coastguard Worker  let Inst{22-25} = SH;
1696*9880d681SAndroid Build Coastguard Worker  let Inst{26-31} = xo;
1697*9880d681SAndroid Build Coastguard Worker}
1698*9880d681SAndroid Build Coastguard Worker
1699*9880d681SAndroid Build Coastguard Worker// E-2 VX-Form
1700*9880d681SAndroid Build Coastguard Workerclass VXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
1701*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1702*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1703*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1704*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1705*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1706*9880d681SAndroid Build Coastguard Worker
1707*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1708*9880d681SAndroid Build Coastguard Worker
1709*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1710*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1711*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1712*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1713*9880d681SAndroid Build Coastguard Worker}
1714*9880d681SAndroid Build Coastguard Worker
1715*9880d681SAndroid Build Coastguard Workerclass VXForm_setzero<bits<11> xo, dag OOL, dag IOL, string asmstr,
1716*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1717*9880d681SAndroid Build Coastguard Worker    : VXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
1718*9880d681SAndroid Build Coastguard Worker  let VA = VD;
1719*9880d681SAndroid Build Coastguard Worker  let VB = VD;
1720*9880d681SAndroid Build Coastguard Worker}
1721*9880d681SAndroid Build Coastguard Worker
1722*9880d681SAndroid Build Coastguard Worker
1723*9880d681SAndroid Build Coastguard Workerclass VXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
1724*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1725*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1726*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1727*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1728*9880d681SAndroid Build Coastguard Worker
1729*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1730*9880d681SAndroid Build Coastguard Worker
1731*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1732*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
1733*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1734*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1735*9880d681SAndroid Build Coastguard Worker}
1736*9880d681SAndroid Build Coastguard Worker
1737*9880d681SAndroid Build Coastguard Workerclass VXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
1738*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1739*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1740*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1741*9880d681SAndroid Build Coastguard Worker  bits<5> IMM;
1742*9880d681SAndroid Build Coastguard Worker
1743*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1744*9880d681SAndroid Build Coastguard Worker
1745*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1746*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = IMM;
1747*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
1748*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1749*9880d681SAndroid Build Coastguard Worker}
1750*9880d681SAndroid Build Coastguard Worker
1751*9880d681SAndroid Build Coastguard Worker/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr.
1752*9880d681SAndroid Build Coastguard Workerclass VXForm_4<bits<11> xo, dag OOL, dag IOL, string asmstr,
1753*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1754*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1755*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1756*9880d681SAndroid Build Coastguard Worker
1757*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1758*9880d681SAndroid Build Coastguard Worker
1759*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1760*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
1761*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
1762*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1763*9880d681SAndroid Build Coastguard Worker}
1764*9880d681SAndroid Build Coastguard Worker
1765*9880d681SAndroid Build Coastguard Worker/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr.
1766*9880d681SAndroid Build Coastguard Workerclass VXForm_5<bits<11> xo, dag OOL, dag IOL, string asmstr,
1767*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1768*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1769*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1770*9880d681SAndroid Build Coastguard Worker
1771*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1772*9880d681SAndroid Build Coastguard Worker
1773*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = 0;
1774*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = 0;
1775*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1776*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1777*9880d681SAndroid Build Coastguard Worker}
1778*9880d681SAndroid Build Coastguard Worker
1779*9880d681SAndroid Build Coastguard Worker// e.g. [PO VRT EO VRB XO]
1780*9880d681SAndroid Build Coastguard Workerclass VXForm_RD5_XO5_RS5<bits<11> xo, bits<5> eo, dag OOL, dag IOL,
1781*9880d681SAndroid Build Coastguard Worker                         string asmstr, InstrItinClass itin, list<dag> pattern>
1782*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1783*9880d681SAndroid Build Coastguard Worker  bits<5> RD;
1784*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1785*9880d681SAndroid Build Coastguard Worker
1786*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1787*9880d681SAndroid Build Coastguard Worker
1788*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = RD;
1789*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = eo;
1790*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1791*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1792*9880d681SAndroid Build Coastguard Worker}
1793*9880d681SAndroid Build Coastguard Worker
1794*9880d681SAndroid Build Coastguard Worker/// VXForm_CR - VX crypto instructions with "VRT, VRA, ST, SIX"
1795*9880d681SAndroid Build Coastguard Workerclass VXForm_CR<bits<11> xo, dag OOL, dag IOL, string asmstr,
1796*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1797*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1798*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1799*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1800*9880d681SAndroid Build Coastguard Worker  bits<1> ST;
1801*9880d681SAndroid Build Coastguard Worker  bits<4> SIX;
1802*9880d681SAndroid Build Coastguard Worker
1803*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1804*9880d681SAndroid Build Coastguard Worker
1805*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1806*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1807*9880d681SAndroid Build Coastguard Worker  let Inst{16} =  ST;
1808*9880d681SAndroid Build Coastguard Worker  let Inst{17-20} = SIX;
1809*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1810*9880d681SAndroid Build Coastguard Worker}
1811*9880d681SAndroid Build Coastguard Worker
1812*9880d681SAndroid Build Coastguard Worker/// VXForm_BX - VX crypto instructions with "VRT, VRA, 0 - like vsbox"
1813*9880d681SAndroid Build Coastguard Workerclass VXForm_BX<bits<11> xo, dag OOL, dag IOL, string asmstr,
1814*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1815*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1816*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1817*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1818*9880d681SAndroid Build Coastguard Worker
1819*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1820*9880d681SAndroid Build Coastguard Worker
1821*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1822*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1823*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = 0;
1824*9880d681SAndroid Build Coastguard Worker  let Inst{21-31} = xo;
1825*9880d681SAndroid Build Coastguard Worker}
1826*9880d681SAndroid Build Coastguard Worker
1827*9880d681SAndroid Build Coastguard Worker// E-4 VXR-Form
1828*9880d681SAndroid Build Coastguard Workerclass VXRForm_1<bits<10> xo, dag OOL, dag IOL, string asmstr,
1829*9880d681SAndroid Build Coastguard Worker               InstrItinClass itin, list<dag> pattern>
1830*9880d681SAndroid Build Coastguard Worker    : I<4, OOL, IOL, asmstr, itin> {
1831*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1832*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1833*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1834*9880d681SAndroid Build Coastguard Worker  bit RC = 0;
1835*9880d681SAndroid Build Coastguard Worker
1836*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1837*9880d681SAndroid Build Coastguard Worker
1838*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1839*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1840*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1841*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = RC;
1842*9880d681SAndroid Build Coastguard Worker  let Inst{22-31} = xo;
1843*9880d681SAndroid Build Coastguard Worker}
1844*9880d681SAndroid Build Coastguard Worker
1845*9880d681SAndroid Build Coastguard Worker// VX-Form: [PO VRT EO VRB 1 PS XO]
1846*9880d681SAndroid Build Coastguard Workerclass VX_RD5_EO5_RS5_PS1_XO9<bits<5> eo, bits<9> xo,
1847*9880d681SAndroid Build Coastguard Worker                             dag OOL, dag IOL, string asmstr,
1848*9880d681SAndroid Build Coastguard Worker                             InstrItinClass itin, list<dag> pattern>
1849*9880d681SAndroid Build Coastguard Worker  : I<4, OOL, IOL, asmstr, itin> {
1850*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1851*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1852*9880d681SAndroid Build Coastguard Worker  bit PS;
1853*9880d681SAndroid Build Coastguard Worker
1854*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1855*9880d681SAndroid Build Coastguard Worker
1856*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1857*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = eo;
1858*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1859*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = 1;
1860*9880d681SAndroid Build Coastguard Worker  let Inst{22}    = PS;
1861*9880d681SAndroid Build Coastguard Worker  let Inst{23-31} = xo;
1862*9880d681SAndroid Build Coastguard Worker}
1863*9880d681SAndroid Build Coastguard Worker
1864*9880d681SAndroid Build Coastguard Worker// VX-Form: [PO VRT VRA VRB 1 PS XO] or [PO VRT VRA VRB 1 / XO]
1865*9880d681SAndroid Build Coastguard Workerclass VX_RD5_RSp5_PS1_XO9<bits<9> xo, dag OOL, dag IOL, string asmstr,
1866*9880d681SAndroid Build Coastguard Worker                          InstrItinClass itin, list<dag> pattern>
1867*9880d681SAndroid Build Coastguard Worker  : I<4, OOL, IOL, asmstr, itin> {
1868*9880d681SAndroid Build Coastguard Worker  bits<5> VD;
1869*9880d681SAndroid Build Coastguard Worker  bits<5> VA;
1870*9880d681SAndroid Build Coastguard Worker  bits<5> VB;
1871*9880d681SAndroid Build Coastguard Worker  bit PS;
1872*9880d681SAndroid Build Coastguard Worker
1873*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1874*9880d681SAndroid Build Coastguard Worker
1875*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = VD;
1876*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = VA;
1877*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = VB;
1878*9880d681SAndroid Build Coastguard Worker  let Inst{21}    = 1;
1879*9880d681SAndroid Build Coastguard Worker  let Inst{22}    = PS;
1880*9880d681SAndroid Build Coastguard Worker  let Inst{23-31} = xo;
1881*9880d681SAndroid Build Coastguard Worker}
1882*9880d681SAndroid Build Coastguard Worker
1883*9880d681SAndroid Build Coastguard Worker// Z23-Form (used by QPX)
1884*9880d681SAndroid Build Coastguard Workerclass Z23Form_1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
1885*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1886*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1887*9880d681SAndroid Build Coastguard Worker  bits<5> FRT;
1888*9880d681SAndroid Build Coastguard Worker  bits<5> FRA;
1889*9880d681SAndroid Build Coastguard Worker  bits<5> FRB;
1890*9880d681SAndroid Build Coastguard Worker  bits<2> idx;
1891*9880d681SAndroid Build Coastguard Worker
1892*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1893*9880d681SAndroid Build Coastguard Worker
1894*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1895*9880d681SAndroid Build Coastguard Worker
1896*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FRT;
1897*9880d681SAndroid Build Coastguard Worker  let Inst{11-15} = FRA;
1898*9880d681SAndroid Build Coastguard Worker  let Inst{16-20} = FRB;
1899*9880d681SAndroid Build Coastguard Worker  let Inst{21-22} = idx;
1900*9880d681SAndroid Build Coastguard Worker  let Inst{23-30} = xo;
1901*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1902*9880d681SAndroid Build Coastguard Worker}
1903*9880d681SAndroid Build Coastguard Worker
1904*9880d681SAndroid Build Coastguard Workerclass Z23Form_2<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
1905*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1906*9880d681SAndroid Build Coastguard Worker  : Z23Form_1<opcode, xo, OOL, IOL, asmstr, itin, pattern> {
1907*9880d681SAndroid Build Coastguard Worker  let FRB = 0;
1908*9880d681SAndroid Build Coastguard Worker}
1909*9880d681SAndroid Build Coastguard Worker
1910*9880d681SAndroid Build Coastguard Workerclass Z23Form_3<bits<6> opcode, bits<8> xo, dag OOL, dag IOL, string asmstr,
1911*9880d681SAndroid Build Coastguard Worker              InstrItinClass itin, list<dag> pattern>
1912*9880d681SAndroid Build Coastguard Worker         : I<opcode, OOL, IOL, asmstr, itin> {
1913*9880d681SAndroid Build Coastguard Worker  bits<5> FRT;
1914*9880d681SAndroid Build Coastguard Worker  bits<12> idx;
1915*9880d681SAndroid Build Coastguard Worker
1916*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1917*9880d681SAndroid Build Coastguard Worker
1918*9880d681SAndroid Build Coastguard Worker  bit RC = 0;    // set by isDOT
1919*9880d681SAndroid Build Coastguard Worker
1920*9880d681SAndroid Build Coastguard Worker  let Inst{6-10}  = FRT;
1921*9880d681SAndroid Build Coastguard Worker  let Inst{11-22} = idx;
1922*9880d681SAndroid Build Coastguard Worker  let Inst{23-30} = xo;
1923*9880d681SAndroid Build Coastguard Worker  let Inst{31}    = RC;
1924*9880d681SAndroid Build Coastguard Worker}
1925*9880d681SAndroid Build Coastguard Worker
1926*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
1927*9880d681SAndroid Build Coastguard Workerclass Pseudo<dag OOL, dag IOL, string asmstr, list<dag> pattern>
1928*9880d681SAndroid Build Coastguard Worker    : I<0, OOL, IOL, asmstr, NoItinerary> {
1929*9880d681SAndroid Build Coastguard Worker  let isCodeGenOnly = 1;
1930*9880d681SAndroid Build Coastguard Worker  let PPC64 = 0;
1931*9880d681SAndroid Build Coastguard Worker  let Pattern = pattern;
1932*9880d681SAndroid Build Coastguard Worker  let Inst{31-0} = 0;
1933*9880d681SAndroid Build Coastguard Worker}
1934