blob: 77ef19084ddf5a46ddac18869eeffcf714753329 [file] [log] [blame]
Christian Konig72d5d5c2013-02-21 15:16:44 +00001//===-- SIInstrInfo.td - SI Instruction Infos -------------*- tablegen -*--===//
Tom Stellard75aadc22012-12-11 21:25:42 +00002//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Tom Stellardc721a232014-05-16 20:56:47 +000010// Execpt for the NONE field, this must be kept in sync with the SISubtarget enum
11// in AMDGPUMCInstLower.h
12def SISubtarget {
13 int NONE = -1;
14 int SI = 0;
15}
16
Tom Stellard75aadc22012-12-11 21:25:42 +000017//===----------------------------------------------------------------------===//
Tom Stellard75aadc22012-12-11 21:25:42 +000018// SI DAG Nodes
19//===----------------------------------------------------------------------===//
20
Tom Stellard9fa17912013-08-14 23:24:45 +000021def SIload_constant : SDNode<"AMDGPUISD::LOAD_CONSTANT",
Tom Stellard868fd922014-04-17 21:00:11 +000022 SDTypeProfile<1, 2, [SDTCisVT<0, f32>, SDTCisVT<1, v4i32>, SDTCisVT<2, i32>]>,
Tom Stellard9fa17912013-08-14 23:24:45 +000023 [SDNPMayLoad, SDNPMemOperand]
24>;
25
Tom Stellardafcf12f2013-09-12 02:55:14 +000026def SItbuffer_store : SDNode<"AMDGPUISD::TBUFFER_STORE_FORMAT",
27 SDTypeProfile<0, 13,
Tom Stellard868fd922014-04-17 21:00:11 +000028 [SDTCisVT<0, v4i32>, // rsrc(SGPR)
Tom Stellardafcf12f2013-09-12 02:55:14 +000029 SDTCisVT<1, iAny>, // vdata(VGPR)
30 SDTCisVT<2, i32>, // num_channels(imm)
31 SDTCisVT<3, i32>, // vaddr(VGPR)
32 SDTCisVT<4, i32>, // soffset(SGPR)
33 SDTCisVT<5, i32>, // inst_offset(imm)
34 SDTCisVT<6, i32>, // dfmt(imm)
35 SDTCisVT<7, i32>, // nfmt(imm)
36 SDTCisVT<8, i32>, // offen(imm)
37 SDTCisVT<9, i32>, // idxen(imm)
38 SDTCisVT<10, i32>, // glc(imm)
39 SDTCisVT<11, i32>, // slc(imm)
40 SDTCisVT<12, i32> // tfe(imm)
41 ]>,
42 [SDNPMayStore, SDNPMemOperand, SDNPHasChain]
43>;
44
Tom Stellard9fa17912013-08-14 23:24:45 +000045def SIload_input : SDNode<"AMDGPUISD::LOAD_INPUT",
Tom Stellard868fd922014-04-17 21:00:11 +000046 SDTypeProfile<1, 3, [SDTCisVT<0, v4f32>, SDTCisVT<1, v4i32>, SDTCisVT<2, i16>,
Tom Stellard9fa17912013-08-14 23:24:45 +000047 SDTCisVT<3, i32>]>
48>;
49
50class SDSample<string opcode> : SDNode <opcode,
Tom Stellard67850652013-08-14 23:24:53 +000051 SDTypeProfile<1, 4, [SDTCisVT<0, v4f32>, SDTCisVT<2, v32i8>,
Tom Stellard868fd922014-04-17 21:00:11 +000052 SDTCisVT<3, v4i32>, SDTCisVT<4, i32>]>
Tom Stellard9fa17912013-08-14 23:24:45 +000053>;
54
55def SIsample : SDSample<"AMDGPUISD::SAMPLE">;
56def SIsampleb : SDSample<"AMDGPUISD::SAMPLEB">;
57def SIsampled : SDSample<"AMDGPUISD::SAMPLED">;
58def SIsamplel : SDSample<"AMDGPUISD::SAMPLEL">;
59
Tom Stellard26075d52013-02-07 19:39:38 +000060// Transformation function, extract the lower 32bit of a 64bit immediate
61def LO32 : SDNodeXForm<imm, [{
62 return CurDAG->getTargetConstant(N->getZExtValue() & 0xffffffff, MVT::i32);
63}]>;
64
Tom Stellardab8a8c82013-07-12 18:15:02 +000065def LO32f : SDNodeXForm<fpimm, [{
Benjamin Kramerc22c7902013-07-12 20:18:05 +000066 APInt V = N->getValueAPF().bitcastToAPInt().trunc(32);
67 return CurDAG->getTargetConstantFP(APFloat(APFloat::IEEEsingle, V), MVT::f32);
Tom Stellardab8a8c82013-07-12 18:15:02 +000068}]>;
69
Tom Stellard26075d52013-02-07 19:39:38 +000070// Transformation function, extract the upper 32bit of a 64bit immediate
71def HI32 : SDNodeXForm<imm, [{
72 return CurDAG->getTargetConstant(N->getZExtValue() >> 32, MVT::i32);
73}]>;
74
Tom Stellardab8a8c82013-07-12 18:15:02 +000075def HI32f : SDNodeXForm<fpimm, [{
Benjamin Kramerc22c7902013-07-12 20:18:05 +000076 APInt V = N->getValueAPF().bitcastToAPInt().lshr(32).trunc(32);
77 return CurDAG->getTargetConstantFP(APFloat(APFloat::IEEEsingle, V), MVT::f32);
Tom Stellardab8a8c82013-07-12 18:15:02 +000078}]>;
79
Tom Stellard044e4182014-02-06 18:36:34 +000080def IMM8bitDWORD : PatLeaf <(imm),
81 [{return (N->getZExtValue() & ~0x3FC) == 0;}]
Tom Stellard89093802013-02-07 19:39:40 +000082>;
83
Tom Stellard044e4182014-02-06 18:36:34 +000084def as_dword_i32imm : SDNodeXForm<imm, [{
85 return CurDAG->getTargetConstant(N->getZExtValue() >> 2, MVT::i32);
86}]>;
87
Tom Stellardafcf12f2013-09-12 02:55:14 +000088def as_i1imm : SDNodeXForm<imm, [{
89 return CurDAG->getTargetConstant(N->getZExtValue(), MVT::i1);
90}]>;
91
92def as_i8imm : SDNodeXForm<imm, [{
93 return CurDAG->getTargetConstant(N->getZExtValue(), MVT::i8);
94}]>;
95
Tom Stellard07a10a32013-06-03 17:39:43 +000096def as_i16imm : SDNodeXForm<imm, [{
97 return CurDAG->getTargetConstant(N->getSExtValue(), MVT::i16);
98}]>;
99
Tom Stellard044e4182014-02-06 18:36:34 +0000100def as_i32imm: SDNodeXForm<imm, [{
101 return CurDAG->getTargetConstant(N->getSExtValue(), MVT::i32);
102}]>;
103
Matt Arsenault99ed7892014-03-19 22:19:49 +0000104def IMM8bit : PatLeaf <(imm),
105 [{return isUInt<8>(N->getZExtValue());}]
106>;
107
Tom Stellard07a10a32013-06-03 17:39:43 +0000108def IMM12bit : PatLeaf <(imm),
109 [{return isUInt<12>(N->getZExtValue());}]
Tom Stellard89093802013-02-07 19:39:40 +0000110>;
111
Matt Arsenault99ed7892014-03-19 22:19:49 +0000112def IMM16bit : PatLeaf <(imm),
113 [{return isUInt<16>(N->getZExtValue());}]
114>;
115
Tom Stellardd6cb8e82014-05-09 16:42:21 +0000116def IMM32bit : PatLeaf <(imm),
117 [{return isUInt<32>(N->getZExtValue());}]
118>;
119
Tom Stellarde2367942014-02-06 18:36:41 +0000120def mubuf_vaddr_offset : PatFrag<
121 (ops node:$ptr, node:$offset, node:$imm_offset),
122 (add (add node:$ptr, node:$offset), node:$imm_offset)
123>;
124
Christian Konigf82901a2013-02-26 17:52:23 +0000125class InlineImm <ValueType vt> : PatLeaf <(vt imm), [{
Tom Stellard7ed0b522014-04-03 20:19:27 +0000126 return isInlineImmediate(N);
Christian Konigb559b072013-02-16 11:28:36 +0000127}]>;
128
Tom Stellarddf94dc32013-08-14 23:24:24 +0000129class SGPRImm <dag frag> : PatLeaf<frag, [{
130 if (TM.getSubtarget<AMDGPUSubtarget>().getGeneration() <
131 AMDGPUSubtarget::SOUTHERN_ISLANDS) {
132 return false;
133 }
134 const SIRegisterInfo *SIRI =
135 static_cast<const SIRegisterInfo*>(TM.getRegisterInfo());
136 for (SDNode::use_iterator U = N->use_begin(), E = SDNode::use_end();
137 U != E; ++U) {
138 if (SIRI->isSGPRClass(getOperandRegClass(*U, U.getOperandNo()))) {
139 return true;
140 }
141 }
142 return false;
143}]>;
144
Matt Arsenaulta98cd6a2013-12-19 05:32:55 +0000145def FRAMEri32 : Operand<iPTR> {
Matt Arsenault06028dd2014-05-01 16:37:52 +0000146 let MIOperandInfo = (ops i32:$ptr, i32imm:$index);
Tom Stellard81d871d2013-11-13 23:36:50 +0000147}
148
Christian Konig72d5d5c2013-02-21 15:16:44 +0000149//===----------------------------------------------------------------------===//
150// SI assembler operands
151//===----------------------------------------------------------------------===//
Tom Stellard75aadc22012-12-11 21:25:42 +0000152
Christian Konigeabf8332013-02-21 15:16:49 +0000153def SIOperand {
154 int ZERO = 0x80;
Christian Konigd3039962013-02-26 17:52:09 +0000155 int VCC = 0x6A;
Tom Stellard75aadc22012-12-11 21:25:42 +0000156}
157
Christian Konig72d5d5c2013-02-21 15:16:44 +0000158include "SIInstrFormats.td"
Tom Stellard75aadc22012-12-11 21:25:42 +0000159
Christian Konig72d5d5c2013-02-21 15:16:44 +0000160//===----------------------------------------------------------------------===//
161//
162// SI Instruction multiclass helpers.
163//
164// Instructions with _32 take 32-bit operands.
165// Instructions with _64 take 64-bit operands.
166//
167// VOP_* instructions can use either a 32-bit or 64-bit encoding. The 32-bit
168// encoding is the standard encoding, but instruction that make use of
169// any of the instruction modifiers must use the 64-bit encoding.
170//
171// Instructions with _e32 use the 32-bit encoding.
172// Instructions with _e64 use the 64-bit encoding.
173//
174//===----------------------------------------------------------------------===//
175
176//===----------------------------------------------------------------------===//
177// Scalar classes
178//===----------------------------------------------------------------------===//
179
Christian Konige0130a22013-02-21 15:17:13 +0000180class SOP1_32 <bits<8> op, string opName, list<dag> pattern> : SOP1 <
181 op, (outs SReg_32:$dst), (ins SSrc_32:$src0),
182 opName#" $dst, $src0", pattern
183>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000184
Christian Konige0130a22013-02-21 15:17:13 +0000185class SOP1_64 <bits<8> op, string opName, list<dag> pattern> : SOP1 <
186 op, (outs SReg_64:$dst), (ins SSrc_64:$src0),
187 opName#" $dst, $src0", pattern
188>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000189
Matt Arsenault8333e432014-06-10 19:18:24 +0000190// 64-bit input, 32-bit output.
191class SOP1_32_64 <bits<8> op, string opName, list<dag> pattern> : SOP1 <
192 op, (outs SReg_32:$dst), (ins SSrc_64:$src0),
193 opName#" $dst, $src0", pattern
194>;
195
Christian Konige0130a22013-02-21 15:17:13 +0000196class SOP2_32 <bits<7> op, string opName, list<dag> pattern> : SOP2 <
197 op, (outs SReg_32:$dst), (ins SSrc_32:$src0, SSrc_32:$src1),
198 opName#" $dst, $src0, $src1", pattern
199>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000200
Christian Konige0130a22013-02-21 15:17:13 +0000201class SOP2_64 <bits<7> op, string opName, list<dag> pattern> : SOP2 <
202 op, (outs SReg_64:$dst), (ins SSrc_64:$src0, SSrc_64:$src1),
203 opName#" $dst, $src0, $src1", pattern
204>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000205
Tom Stellard82166022013-11-13 23:36:37 +0000206class SOP2_SHIFT_64 <bits<7> op, string opName, list<dag> pattern> : SOP2 <
207 op, (outs SReg_64:$dst), (ins SSrc_64:$src0, SSrc_32:$src1),
208 opName#" $dst, $src0, $src1", pattern
209>;
210
Christian Konig72d5d5c2013-02-21 15:16:44 +0000211
Matt Arsenault0cb92e12014-04-11 19:25:18 +0000212class SOPC_Helper <bits<7> op, RegisterClass rc, ValueType vt,
213 string opName, PatLeaf cond> : SOPC <
214 op, (outs SCCReg:$dst), (ins rc:$src0, rc:$src1),
215 opName#" $dst, $src0, $src1", []>;
216
217class SOPC_32<bits<7> op, string opName, PatLeaf cond = COND_NULL>
218 : SOPC_Helper<op, SSrc_32, i32, opName, cond>;
219
220class SOPC_64<bits<7> op, string opName, PatLeaf cond = COND_NULL>
221 : SOPC_Helper<op, SSrc_64, i64, opName, cond>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000222
Christian Konige0130a22013-02-21 15:17:13 +0000223class SOPK_32 <bits<5> op, string opName, list<dag> pattern> : SOPK <
224 op, (outs SReg_32:$dst), (ins i16imm:$src0),
225 opName#" $dst, $src0", pattern
226>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000227
Christian Konige0130a22013-02-21 15:17:13 +0000228class SOPK_64 <bits<5> op, string opName, list<dag> pattern> : SOPK <
229 op, (outs SReg_64:$dst), (ins i16imm:$src0),
230 opName#" $dst, $src0", pattern
231>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000232
Christian Konig9c7afd12013-03-18 11:33:50 +0000233multiclass SMRD_Helper <bits<5> op, string asm, RegisterClass baseClass,
234 RegisterClass dstClass> {
Christian Konig72d5d5c2013-02-21 15:16:44 +0000235 def _IMM : SMRD <
236 op, 1, (outs dstClass:$dst),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000237 (ins baseClass:$sbase, u32imm:$offset),
Christian Konige0130a22013-02-21 15:17:13 +0000238 asm#" $dst, $sbase, $offset", []
Christian Konig72d5d5c2013-02-21 15:16:44 +0000239 >;
240
241 def _SGPR : SMRD <
242 op, 0, (outs dstClass:$dst),
Christian Konig9c7afd12013-03-18 11:33:50 +0000243 (ins baseClass:$sbase, SReg_32:$soff),
Christian Konige0130a22013-02-21 15:17:13 +0000244 asm#" $dst, $sbase, $soff", []
Christian Konig72d5d5c2013-02-21 15:16:44 +0000245 >;
246}
247
248//===----------------------------------------------------------------------===//
249// Vector ALU classes
250//===----------------------------------------------------------------------===//
251
Christian Konigf741fbf2013-02-26 17:52:42 +0000252class VOP <string opName> {
253 string OpName = opName;
254}
255
Christian Konig3c145802013-03-27 09:12:59 +0000256class VOP2_REV <string revOp, bit isOrig> {
257 string RevOp = revOp;
258 bit IsOrig = isOrig;
259}
260
Tom Stellardc721a232014-05-16 20:56:47 +0000261class SIMCInstr <string pseudo, int subtarget> {
262 string PseudoInstr = pseudo;
263 int Subtarget = subtarget;
264}
265
266multiclass VOP3_m <bits<9> op, dag outs, dag ins, string asm, list<dag> pattern,
267 string opName> {
268
269 def "" : InstSI <outs, ins, "", pattern>, VOP <opName>,
270 SIMCInstr<OpName, SISubtarget.NONE> {
271 let isPseudo = 1;
272 }
273
274 def _si : VOP3 <op, outs, ins, asm, []>, SIMCInstr<opName, SISubtarget.SI>;
275
276}
277
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000278// This must always be right before the operand being input modified.
279def InputMods : OperandWithDefaultOps <i32, (ops (i32 0))> {
280 let PrintMethod = "printOperandAndMods";
281}
282
Christian Konig3da70172013-02-21 15:16:53 +0000283multiclass VOP1_Helper <bits<8> op, RegisterClass drc, RegisterClass src,
284 string opName, list<dag> pattern> {
285
Christian Konigf741fbf2013-02-26 17:52:42 +0000286 def _e32 : VOP1 <
Christian Konig3da70172013-02-21 15:16:53 +0000287 op, (outs drc:$dst), (ins src:$src0),
288 opName#"_e32 $dst, $src0", pattern
Christian Konigf741fbf2013-02-26 17:52:42 +0000289 >, VOP <opName>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000290
Christian Konig3da70172013-02-21 15:16:53 +0000291 def _e64 : VOP3 <
Christian Konig72d5d5c2013-02-21 15:16:44 +0000292 {1, 1, op{6}, op{5}, op{4}, op{3}, op{2}, op{1}, op{0}},
Christian Konig3da70172013-02-21 15:16:53 +0000293 (outs drc:$dst),
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000294 (ins InputMods:$src0_modifiers, src:$src0, i32imm:$clamp, i32imm:$omod),
295 opName#"_e64 $dst, $src0_modifiers, $clamp, $omod", []
Christian Konigf741fbf2013-02-26 17:52:42 +0000296 >, VOP <opName> {
Tom Stellard459a79a2013-05-20 15:02:08 +0000297 let src1 = SIOperand.ZERO;
298 let src2 = SIOperand.ZERO;
Christian Konig3da70172013-02-21 15:16:53 +0000299 }
Christian Konig72d5d5c2013-02-21 15:16:44 +0000300}
301
Christian Konig3da70172013-02-21 15:16:53 +0000302multiclass VOP1_32 <bits<8> op, string opName, list<dag> pattern>
303 : VOP1_Helper <op, VReg_32, VSrc_32, opName, pattern>;
304
305multiclass VOP1_64 <bits<8> op, string opName, list<dag> pattern>
306 : VOP1_Helper <op, VReg_64, VSrc_64, opName, pattern>;
307
Niels Ole Salscheider4715d882013-08-08 16:06:08 +0000308multiclass VOP1_32_64 <bits<8> op, string opName, list<dag> pattern>
309 : VOP1_Helper <op, VReg_32, VSrc_64, opName, pattern>;
310
311multiclass VOP1_64_32 <bits<8> op, string opName, list<dag> pattern>
312 : VOP1_Helper <op, VReg_64, VSrc_32, opName, pattern>;
313
Christian Konigae034e62013-02-21 15:16:58 +0000314multiclass VOP2_Helper <bits<6> op, RegisterClass vrc, RegisterClass arc,
Christian Konig3c145802013-03-27 09:12:59 +0000315 string opName, list<dag> pattern, string revOp> {
Christian Konigae034e62013-02-21 15:16:58 +0000316 def _e32 : VOP2 <
317 op, (outs vrc:$dst), (ins arc:$src0, vrc:$src1),
318 opName#"_e32 $dst, $src0, $src1", pattern
Christian Konig3c145802013-03-27 09:12:59 +0000319 >, VOP <opName>, VOP2_REV<revOp#"_e32", !eq(revOp, opName)>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000320
Christian Konigae034e62013-02-21 15:16:58 +0000321 def _e64 : VOP3 <
Christian Konig72d5d5c2013-02-21 15:16:44 +0000322 {1, 0, 0, op{5}, op{4}, op{3}, op{2}, op{1}, op{0}},
Christian Konigae034e62013-02-21 15:16:58 +0000323 (outs vrc:$dst),
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000324 (ins InputMods:$src0_modifiers, arc:$src0,
325 InputMods:$src1_modifiers, arc:$src1,
326 i32imm:$clamp, i32imm:$omod),
327 opName#"_e64 $dst, $src0_modifiers, $src1_modifiers, $clamp, $omod", []
Christian Konig3c145802013-03-27 09:12:59 +0000328 >, VOP <opName>, VOP2_REV<revOp#"_e64", !eq(revOp, opName)> {
Tom Stellard459a79a2013-05-20 15:02:08 +0000329 let src2 = SIOperand.ZERO;
Christian Konigae034e62013-02-21 15:16:58 +0000330 }
Christian Konig72d5d5c2013-02-21 15:16:44 +0000331}
332
Christian Konig3c145802013-03-27 09:12:59 +0000333multiclass VOP2_32 <bits<6> op, string opName, list<dag> pattern,
334 string revOp = opName>
335 : VOP2_Helper <op, VReg_32, VSrc_32, opName, pattern, revOp>;
Christian Konigae034e62013-02-21 15:16:58 +0000336
Christian Konig3c145802013-03-27 09:12:59 +0000337multiclass VOP2_64 <bits<6> op, string opName, list<dag> pattern,
338 string revOp = opName>
339 : VOP2_Helper <op, VReg_64, VSrc_64, opName, pattern, revOp>;
Christian Konigae034e62013-02-21 15:16:58 +0000340
Christian Konig3c145802013-03-27 09:12:59 +0000341multiclass VOP2b_32 <bits<6> op, string opName, list<dag> pattern,
Tom Stellarde28859f2014-03-07 20:12:39 +0000342 RegisterClass src0_rc, string revOp = opName> {
Christian Konigd3039962013-02-26 17:52:09 +0000343
344 def _e32 : VOP2 <
Tom Stellarde28859f2014-03-07 20:12:39 +0000345 op, (outs VReg_32:$dst), (ins src0_rc:$src0, VReg_32:$src1),
Christian Konigd3039962013-02-26 17:52:09 +0000346 opName#"_e32 $dst, $src0, $src1", pattern
Christian Konig3c145802013-03-27 09:12:59 +0000347 >, VOP <opName>, VOP2_REV<revOp#"_e32", !eq(revOp, opName)>;
Christian Konigd3039962013-02-26 17:52:09 +0000348
349 def _e64 : VOP3b <
350 {1, 0, 0, op{5}, op{4}, op{3}, op{2}, op{1}, op{0}},
351 (outs VReg_32:$dst),
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000352 (ins InputMods: $src0_modifiers, VSrc_32:$src0,
353 InputMods:$src1_modifiers, VSrc_32:$src1,
354 i32imm:$clamp, i32imm:$omod),
355 opName#"_e64 $dst, $src0_modifiers, $src1_modifiers, $clamp, $omod", []
Christian Konig3c145802013-03-27 09:12:59 +0000356 >, VOP <opName>, VOP2_REV<revOp#"_e64", !eq(revOp, opName)> {
Tom Stellard459a79a2013-05-20 15:02:08 +0000357 let src2 = SIOperand.ZERO;
Christian Konigd3039962013-02-26 17:52:09 +0000358 /* the VOP2 variant puts the carry out into VCC, the VOP3 variant
359 can write it into any SGPR. We currently don't use the carry out,
360 so for now hardcode it to VCC as well */
Tom Stellard459a79a2013-05-20 15:02:08 +0000361 let sdst = SIOperand.VCC;
Christian Konigd3039962013-02-26 17:52:09 +0000362 }
363}
364
Christian Konig72d5d5c2013-02-21 15:16:44 +0000365multiclass VOPC_Helper <bits<8> op, RegisterClass vrc, RegisterClass arc,
Christian Konigb19849a2013-02-21 15:17:04 +0000366 string opName, ValueType vt, PatLeaf cond> {
Christian Konig72d5d5c2013-02-21 15:16:44 +0000367
Christian Konigb19849a2013-02-21 15:17:04 +0000368 def _e32 : VOPC <
369 op, (ins arc:$src0, vrc:$src1),
370 opName#"_e32 $dst, $src0, $src1", []
Christian Konigf741fbf2013-02-26 17:52:42 +0000371 >, VOP <opName>;
Christian Konigb19849a2013-02-21 15:17:04 +0000372
Christian Konig72d5d5c2013-02-21 15:16:44 +0000373 def _e64 : VOP3 <
374 {0, op{7}, op{6}, op{5}, op{4}, op{3}, op{2}, op{1}, op{0}},
375 (outs SReg_64:$dst),
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000376 (ins InputMods:$src0_modifiers, arc:$src0,
377 InputMods:$src1_modifiers, arc:$src1,
378 InstFlag:$clamp, InstFlag:$omod),
379 opName#"_e64 $dst, $src0_modifiers, $src1_modifiers, $clamp, $omod",
Christian Konigb19849a2013-02-21 15:17:04 +0000380 !if(!eq(!cast<string>(cond), "COND_NULL"), []<dag>,
Christian Konigf82901a2013-02-26 17:52:23 +0000381 [(set SReg_64:$dst, (i1 (setcc (vt arc:$src0), arc:$src1, cond)))]
Christian Konigb19849a2013-02-21 15:17:04 +0000382 )
Christian Konigf741fbf2013-02-26 17:52:42 +0000383 >, VOP <opName> {
Tom Stellard459a79a2013-05-20 15:02:08 +0000384 let src2 = SIOperand.ZERO;
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000385 let src2_modifiers = 0;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000386 }
387}
388
Christian Konigb19849a2013-02-21 15:17:04 +0000389multiclass VOPC_32 <bits<8> op, string opName,
390 ValueType vt = untyped, PatLeaf cond = COND_NULL>
391 : VOPC_Helper <op, VReg_32, VSrc_32, opName, vt, cond>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000392
Christian Konigb19849a2013-02-21 15:17:04 +0000393multiclass VOPC_64 <bits<8> op, string opName,
394 ValueType vt = untyped, PatLeaf cond = COND_NULL>
395 : VOPC_Helper <op, VReg_64, VSrc_64, opName, vt, cond>;
Christian Konig72d5d5c2013-02-21 15:16:44 +0000396
Tom Stellardc721a232014-05-16 20:56:47 +0000397multiclass VOP3_32 <bits<9> op, string opName, list<dag> pattern> : VOP3_m <
Christian Konigf5754a02013-02-21 15:17:09 +0000398 op, (outs VReg_32:$dst),
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000399 (ins InputMods: $src0_modifiers, VSrc_32:$src0, InputMods:$src1_modifiers,
400 VSrc_32:$src1, InputMods:$src2_modifiers, VSrc_32:$src2,
401 InstFlag:$clamp, InstFlag:$omod),
Tom Stellardc721a232014-05-16 20:56:47 +0000402 opName#" $dst, $src0_modifiers, $src1, $src2, $clamp, $omod", pattern, opName
403>;
Christian Konigf5754a02013-02-21 15:17:09 +0000404
Matt Arsenault93840c02014-06-09 17:00:46 +0000405class VOP3_64_32 <bits <9> op, string opName, list<dag> pattern> : VOP3 <
Tom Stellard1cfd7a52013-05-20 15:02:12 +0000406 op, (outs VReg_64:$dst),
407 (ins VSrc_64:$src0, VSrc_32:$src1),
408 opName#" $dst, $src0, $src1", pattern
409>, VOP <opName> {
410
411 let src2 = SIOperand.ZERO;
Vincent Lejeune94af31f2014-05-10 19:18:33 +0000412 let src0_modifiers = 0;
Tom Stellard1cfd7a52013-05-20 15:02:12 +0000413 let clamp = 0;
414 let omod = 0;
Tom Stellard1cfd7a52013-05-20 15:02:12 +0000415}
416
Christian Konigf5754a02013-02-21 15:17:09 +0000417class VOP3_64 <bits<9> op, string opName, list<dag> pattern> : VOP3 <
418 op, (outs VReg_64:$dst),
Christian Konigf82901a2013-02-26 17:52:23 +0000419 (ins VSrc_64:$src0, VSrc_64:$src1, VSrc_64:$src2,
Tom Stellardea977bc2013-04-19 02:11:00 +0000420 InstFlag:$abs, InstFlag:$clamp, InstFlag:$omod, InstFlag:$neg),
Christian Konigf5754a02013-02-21 15:17:09 +0000421 opName#" $dst, $src0, $src1, $src2, $abs, $clamp, $omod, $neg", pattern
Christian Konigf741fbf2013-02-26 17:52:42 +0000422>, VOP <opName>;
Christian Konigf5754a02013-02-21 15:17:09 +0000423
Christian Konig72d5d5c2013-02-21 15:16:44 +0000424//===----------------------------------------------------------------------===//
425// Vector I/O classes
426//===----------------------------------------------------------------------===//
427
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000428class DS_1A <bits<8> op, dag outs, dag ins, string asm, list<dag> pat> :
429 DS <op, outs, ins, asm, pat> {
430 bits<16> offset;
431
Matt Arsenault99ed7892014-03-19 22:19:49 +0000432 // Single load interpret the 2 i8imm operands as a single i16 offset.
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000433 let offset0 = offset{7-0};
434 let offset1 = offset{15-8};
435}
436
437class DS_Load_Helper <bits<8> op, string asm, RegisterClass regClass> : DS_1A <
Michel Danzer1c454302013-07-10 16:36:43 +0000438 op,
439 (outs regClass:$vdst),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000440 (ins i1imm:$gds, VReg_32:$addr, u16imm:$offset),
Matt Arsenault547aff22014-03-19 22:19:43 +0000441 asm#" $vdst, $addr, $offset, [M0]",
Michel Danzer1c454302013-07-10 16:36:43 +0000442 []> {
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000443 let data0 = 0;
444 let data1 = 0;
Michel Danzer1c454302013-07-10 16:36:43 +0000445 let mayLoad = 1;
446 let mayStore = 0;
447}
448
Matt Arsenaultdd78b802014-03-19 22:19:56 +0000449class DS_Load2_Helper <bits<8> op, string asm, RegisterClass regClass> : DS <
450 op,
451 (outs regClass:$vdst),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000452 (ins i1imm:$gds, VReg_32:$addr, u8imm:$offset0, u8imm:$offset1),
Matt Arsenaultdd78b802014-03-19 22:19:56 +0000453 asm#" $gds, $vdst, $addr, $offset0, $offset1, [M0]",
454 []> {
455 let data0 = 0;
456 let data1 = 0;
457 let mayLoad = 1;
458 let mayStore = 0;
459}
460
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000461class DS_Store_Helper <bits<8> op, string asm, RegisterClass regClass> : DS_1A <
Michel Danzer1c454302013-07-10 16:36:43 +0000462 op,
463 (outs),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000464 (ins i1imm:$gds, VReg_32:$addr, regClass:$data0, u16imm:$offset),
Matt Arsenault547aff22014-03-19 22:19:43 +0000465 asm#" $addr, $data0, $offset [M0]",
Michel Danzer1c454302013-07-10 16:36:43 +0000466 []> {
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000467 let data1 = 0;
Michel Danzer1c454302013-07-10 16:36:43 +0000468 let mayStore = 1;
469 let mayLoad = 0;
470 let vdst = 0;
471}
472
Matt Arsenaultdd78b802014-03-19 22:19:56 +0000473class DS_Store2_Helper <bits<8> op, string asm, RegisterClass regClass> : DS_1A <
474 op,
475 (outs),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000476 (ins i1imm:$gds, VReg_32:$addr, regClass:$data0, u8imm:$offset0, u8imm:$offset1),
Matt Arsenaultdd78b802014-03-19 22:19:56 +0000477 asm#" $addr, $data0, $data1, $offset0, $offset1 [M0]",
478 []> {
479 let mayStore = 1;
480 let mayLoad = 0;
481 let vdst = 0;
482}
483
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000484class DS_1A1D_RET <bits<8> op, string asm, RegisterClass rc> : DS_1A <
Tom Stellard13c68ef2013-09-05 18:38:09 +0000485 op,
486 (outs rc:$vdst),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000487 (ins i1imm:$gds, VReg_32:$addr, VReg_32:$data0, u16imm:$offset),
Matt Arsenault547aff22014-03-19 22:19:43 +0000488 asm#" $vdst, $addr, $data0, $offset, [M0]",
Tom Stellard13c68ef2013-09-05 18:38:09 +0000489 []> {
Matt Arsenault9cd8c382014-03-19 22:19:39 +0000490
491 let data1 = 0;
Tom Stellard13c68ef2013-09-05 18:38:09 +0000492 let mayStore = 1;
493 let mayLoad = 1;
Tom Stellard13c68ef2013-09-05 18:38:09 +0000494}
495
Christian Konig72d5d5c2013-02-21 15:16:44 +0000496class MTBUF_Store_Helper <bits<3> op, string asm, RegisterClass regClass> : MTBUF <
497 op,
Tom Stellard75aadc22012-12-11 21:25:42 +0000498 (outs),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000499 (ins regClass:$vdata, u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc,
Christian Konig72d5d5c2013-02-21 15:16:44 +0000500 i1imm:$addr64, i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr,
Christian Konig84652962013-03-01 09:46:17 +0000501 SReg_128:$srsrc, i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
Christian Konig08e768b2013-02-21 15:17:17 +0000502 asm#" $vdata, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
503 #" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset",
Christian Konig72d5d5c2013-02-21 15:16:44 +0000504 []> {
505 let mayStore = 1;
Tom Stellard75aadc22012-12-11 21:25:42 +0000506 let mayLoad = 0;
Tom Stellard75aadc22012-12-11 21:25:42 +0000507}
Tom Stellard75aadc22012-12-11 21:25:42 +0000508
Tom Stellardf1ee7162013-05-20 15:02:31 +0000509multiclass MUBUF_Load_Helper <bits<7> op, string asm, RegisterClass regClass> {
510
Michel Danzer13736222014-01-27 07:20:51 +0000511 let lds = 0, mayLoad = 1 in {
Tom Stellardf1ee7162013-05-20 15:02:31 +0000512
Michel Danzer13736222014-01-27 07:20:51 +0000513 let addr64 = 0 in {
Tom Stellardf1ee7162013-05-20 15:02:31 +0000514
Michel Danzer13736222014-01-27 07:20:51 +0000515 let offen = 0, idxen = 0 in {
516 def _OFFSET : MUBUF <op, (outs regClass:$vdata),
517 (ins SReg_128:$srsrc, VReg_32:$vaddr,
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000518 u16imm:$offset, SSrc_32:$soffset, i1imm:$glc,
Michel Danzer13736222014-01-27 07:20:51 +0000519 i1imm:$slc, i1imm:$tfe),
520 asm#" $vdata, $srsrc + $offset + $soffset, glc=$glc, slc=$slc, tfe=$tfe", []>;
521 }
Tom Stellardf1ee7162013-05-20 15:02:31 +0000522
Michel Danzer13736222014-01-27 07:20:51 +0000523 let offen = 1, idxen = 0, offset = 0 in {
524 def _OFFEN : MUBUF <op, (outs regClass:$vdata),
525 (ins SReg_128:$srsrc, VReg_32:$vaddr,
526 SSrc_32:$soffset, i1imm:$glc, i1imm:$slc,
527 i1imm:$tfe),
528 asm#" $vdata, $srsrc + $vaddr + $soffset, glc=$glc, slc=$slc, tfe=$tfe", []>;
529 }
530
531 let offen = 0, idxen = 1 in {
532 def _IDXEN : MUBUF <op, (outs regClass:$vdata),
533 (ins SReg_128:$srsrc, VReg_32:$vaddr,
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000534 u16imm:$offset, SSrc_32:$soffset, i1imm:$glc,
Michel Danzer13736222014-01-27 07:20:51 +0000535 i1imm:$slc, i1imm:$tfe),
536 asm#" $vdata, $srsrc[$vaddr] + $offset + $soffset, glc=$glc, slc=$slc, tfe=$tfe", []>;
537 }
538
539 let offen = 1, idxen = 1 in {
540 def _BOTHEN : MUBUF <op, (outs regClass:$vdata),
541 (ins SReg_128:$srsrc, VReg_64:$vaddr,
542 SSrc_32:$soffset, i1imm:$glc,
543 i1imm:$slc, i1imm:$tfe),
544 asm#" $vdata, $srsrc[$vaddr[0]] + $vaddr[1] + $soffset, glc=$glc, slc=$slc, tfe=$tfe", []>;
545 }
546 }
547
548 let offen = 0, idxen = 0, addr64 = 1, glc = 0, slc = 0, tfe = 0, soffset = 128 /* ZERO */ in {
549 def _ADDR64 : MUBUF <op, (outs regClass:$vdata),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000550 (ins SReg_128:$srsrc, VReg_64:$vaddr, u16imm:$offset),
Michel Danzer13736222014-01-27 07:20:51 +0000551 asm#" $vdata, $srsrc + $vaddr + $offset", []>;
552 }
Tom Stellardf1ee7162013-05-20 15:02:31 +0000553 }
Tom Stellard75aadc22012-12-11 21:25:42 +0000554}
555
Tom Stellardd3ee8c12013-08-16 01:12:06 +0000556class MUBUF_Store_Helper <bits<7> op, string name, RegisterClass vdataClass> :
557 MUBUF <op, (outs), (ins vdataClass:$vdata, SReg_128:$srsrc, VReg_64:$vaddr,
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000558 u16imm:$offset),
Tom Stellard556d9aa2013-06-03 17:39:37 +0000559 name#" $vdata, $srsrc + $vaddr + $offset",
560 []> {
Tom Stellard754f80f2013-04-05 23:31:51 +0000561
562 let mayLoad = 0;
563 let mayStore = 1;
564
565 // Encoding
Tom Stellard754f80f2013-04-05 23:31:51 +0000566 let offen = 0;
567 let idxen = 0;
568 let glc = 0;
569 let addr64 = 1;
570 let lds = 0;
571 let slc = 0;
572 let tfe = 0;
573 let soffset = 128; // ZERO
574}
575
Christian Konig72d5d5c2013-02-21 15:16:44 +0000576class MTBUF_Load_Helper <bits<3> op, string asm, RegisterClass regClass> : MTBUF <
577 op,
578 (outs regClass:$dst),
Matt Arsenault4d7d3832014-04-15 22:32:49 +0000579 (ins u16imm:$offset, i1imm:$offen, i1imm:$idxen, i1imm:$glc, i1imm:$addr64,
Christian Konig84652962013-03-01 09:46:17 +0000580 i8imm:$dfmt, i8imm:$nfmt, VReg_32:$vaddr, SReg_128:$srsrc,
Christian Konig72d5d5c2013-02-21 15:16:44 +0000581 i1imm:$slc, i1imm:$tfe, SSrc_32:$soffset),
Christian Konig08e768b2013-02-21 15:17:17 +0000582 asm#" $dst, $offset, $offen, $idxen, $glc, $addr64, $dfmt,"
583 #" $nfmt, $vaddr, $srsrc, $slc, $tfe, $soffset",
Christian Konig72d5d5c2013-02-21 15:16:44 +0000584 []> {
585 let mayLoad = 1;
Tom Stellard75aadc22012-12-11 21:25:42 +0000586 let mayStore = 0;
Tom Stellard75aadc22012-12-11 21:25:42 +0000587}
588
Tom Stellard682bfbc2013-10-10 17:11:24 +0000589class MIMG_Mask <string op, int channels> {
590 string Op = op;
591 int Channels = channels;
592}
593
Tom Stellard16a9a202013-08-14 23:24:17 +0000594class MIMG_NoSampler_Helper <bits<7> op, string asm,
Tom Stellard682bfbc2013-10-10 17:11:24 +0000595 RegisterClass dst_rc,
Tom Stellard16a9a202013-08-14 23:24:17 +0000596 RegisterClass src_rc> : MIMG <
Tom Stellard353b3362013-05-06 23:02:12 +0000597 op,
Tom Stellard682bfbc2013-10-10 17:11:24 +0000598 (outs dst_rc:$vdata),
Tom Stellard353b3362013-05-06 23:02:12 +0000599 (ins i32imm:$dmask, i1imm:$unorm, i1imm:$glc, i1imm:$da, i1imm:$r128,
Tom Stellard16a9a202013-08-14 23:24:17 +0000600 i1imm:$tfe, i1imm:$lwe, i1imm:$slc, src_rc:$vaddr,
Tom Stellard353b3362013-05-06 23:02:12 +0000601 SReg_256:$srsrc),
602 asm#" $vdata, $dmask, $unorm, $glc, $da, $r128,"
603 #" $tfe, $lwe, $slc, $vaddr, $srsrc",
604 []> {
605 let SSAMP = 0;
606 let mayLoad = 1;
607 let mayStore = 0;
608 let hasPostISelHook = 1;
609}
610
Tom Stellard682bfbc2013-10-10 17:11:24 +0000611multiclass MIMG_NoSampler_Src_Helper <bits<7> op, string asm,
612 RegisterClass dst_rc,
613 int channels> {
614 def _V1 : MIMG_NoSampler_Helper <op, asm, dst_rc, VReg_32>,
615 MIMG_Mask<asm#"_V1", channels>;
616 def _V2 : MIMG_NoSampler_Helper <op, asm, dst_rc, VReg_64>,
617 MIMG_Mask<asm#"_V2", channels>;
618 def _V4 : MIMG_NoSampler_Helper <op, asm, dst_rc, VReg_128>,
619 MIMG_Mask<asm#"_V4", channels>;
620}
621
Tom Stellard16a9a202013-08-14 23:24:17 +0000622multiclass MIMG_NoSampler <bits<7> op, string asm> {
Tom Stellard682bfbc2013-10-10 17:11:24 +0000623 defm _V1 : MIMG_NoSampler_Src_Helper <op, asm, VReg_32, 1>;
624 defm _V2 : MIMG_NoSampler_Src_Helper <op, asm, VReg_64, 2>;
625 defm _V3 : MIMG_NoSampler_Src_Helper <op, asm, VReg_96, 3>;
626 defm _V4 : MIMG_NoSampler_Src_Helper <op, asm, VReg_128, 4>;
Tom Stellard16a9a202013-08-14 23:24:17 +0000627}
628
629class MIMG_Sampler_Helper <bits<7> op, string asm,
Tom Stellard682bfbc2013-10-10 17:11:24 +0000630 RegisterClass dst_rc,
Tom Stellard16a9a202013-08-14 23:24:17 +0000631 RegisterClass src_rc> : MIMG <
Christian Konig72d5d5c2013-02-21 15:16:44 +0000632 op,
Tom Stellard682bfbc2013-10-10 17:11:24 +0000633 (outs dst_rc:$vdata),
Christian Konig72d5d5c2013-02-21 15:16:44 +0000634 (ins i32imm:$dmask, i1imm:$unorm, i1imm:$glc, i1imm:$da, i1imm:$r128,
Tom Stellard16a9a202013-08-14 23:24:17 +0000635 i1imm:$tfe, i1imm:$lwe, i1imm:$slc, src_rc:$vaddr,
Christian Konig84652962013-03-01 09:46:17 +0000636 SReg_256:$srsrc, SReg_128:$ssamp),
Christian Konig08e768b2013-02-21 15:17:17 +0000637 asm#" $vdata, $dmask, $unorm, $glc, $da, $r128,"
638 #" $tfe, $lwe, $slc, $vaddr, $srsrc, $ssamp",
Christian Konig72d5d5c2013-02-21 15:16:44 +0000639 []> {
640 let mayLoad = 1;
Tom Stellard75aadc22012-12-11 21:25:42 +0000641 let mayStore = 0;
Christian Konig8b1ed282013-04-10 08:39:16 +0000642 let hasPostISelHook = 1;
Tom Stellard75aadc22012-12-11 21:25:42 +0000643}
644
Tom Stellard682bfbc2013-10-10 17:11:24 +0000645multiclass MIMG_Sampler_Src_Helper <bits<7> op, string asm,
646 RegisterClass dst_rc,
647 int channels> {
648 def _V1 : MIMG_Sampler_Helper <op, asm, dst_rc, VReg_32>,
649 MIMG_Mask<asm#"_V1", channels>;
650 def _V2 : MIMG_Sampler_Helper <op, asm, dst_rc, VReg_64>,
651 MIMG_Mask<asm#"_V2", channels>;
652 def _V4 : MIMG_Sampler_Helper <op, asm, dst_rc, VReg_128>,
653 MIMG_Mask<asm#"_V4", channels>;
654 def _V8 : MIMG_Sampler_Helper <op, asm, dst_rc, VReg_256>,
655 MIMG_Mask<asm#"_V8", channels>;
656 def _V16 : MIMG_Sampler_Helper <op, asm, dst_rc, VReg_512>,
657 MIMG_Mask<asm#"_V16", channels>;
658}
659
Tom Stellard16a9a202013-08-14 23:24:17 +0000660multiclass MIMG_Sampler <bits<7> op, string asm> {
Tom Stellard682bfbc2013-10-10 17:11:24 +0000661 defm _V1 : MIMG_Sampler_Src_Helper<op, asm, VReg_32, 1>;
662 defm _V2 : MIMG_Sampler_Src_Helper<op, asm, VReg_64, 2>;
663 defm _V3 : MIMG_Sampler_Src_Helper<op, asm, VReg_96, 3>;
664 defm _V4 : MIMG_Sampler_Src_Helper<op, asm, VReg_128, 4>;
Tom Stellard16a9a202013-08-14 23:24:17 +0000665}
666
Christian Konigf741fbf2013-02-26 17:52:42 +0000667//===----------------------------------------------------------------------===//
668// Vector instruction mappings
669//===----------------------------------------------------------------------===//
670
671// Maps an opcode in e32 form to its e64 equivalent
672def getVOPe64 : InstrMapping {
673 let FilterClass = "VOP";
674 let RowFields = ["OpName"];
675 let ColFields = ["Size"];
676 let KeyCol = ["4"];
677 let ValueCols = [["8"]];
678}
679
Christian Konig3c145802013-03-27 09:12:59 +0000680// Maps an original opcode to its commuted version
681def getCommuteRev : InstrMapping {
682 let FilterClass = "VOP2_REV";
683 let RowFields = ["RevOp"];
684 let ColFields = ["IsOrig"];
685 let KeyCol = ["1"];
686 let ValueCols = [["0"]];
687}
688
Tom Stellard682bfbc2013-10-10 17:11:24 +0000689def getMaskedMIMGOp : InstrMapping {
690 let FilterClass = "MIMG_Mask";
691 let RowFields = ["Op"];
692 let ColFields = ["Channels"];
693 let KeyCol = ["4"];
694 let ValueCols = [["1"], ["2"], ["3"] ];
695}
696
Christian Konig3c145802013-03-27 09:12:59 +0000697// Maps an commuted opcode to its original version
698def getCommuteOrig : InstrMapping {
699 let FilterClass = "VOP2_REV";
700 let RowFields = ["RevOp"];
701 let ColFields = ["IsOrig"];
702 let KeyCol = ["0"];
703 let ValueCols = [["1"]];
704}
705
Tom Stellard5d7aaae2014-02-10 16:58:30 +0000706def isDS : InstrMapping {
707 let FilterClass = "DS";
708 let RowFields = ["Inst"];
709 let ColFields = ["Size"];
710 let KeyCol = ["8"];
711 let ValueCols = [["8"]];
712}
713
Tom Stellardc721a232014-05-16 20:56:47 +0000714def getMCOpcode : InstrMapping {
715 let FilterClass = "SIMCInstr";
716 let RowFields = ["PseudoInstr"];
717 let ColFields = ["Subtarget"];
718 let KeyCol = [!cast<string>(SISubtarget.NONE)];
719 let ValueCols = [[!cast<string>(SISubtarget.SI)]];
720}
721
Tom Stellard75aadc22012-12-11 21:25:42 +0000722include "SIInstructions.td"