1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Machine Code Emitter *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9uint64_t R600MCCodeEmitter::getBinaryCodeForInstr(const MCInst &MI,
10 SmallVectorImpl<MCFixup> &Fixups,
11 const MCSubtargetInfo &STI) const {
12 static const uint64_t InstBits[] = {
13 UINT64_C(0), // ADD
14 UINT64_C(45079976738816), // ADDC_UINT
15 UINT64_C(28587302322176), // ADD_INT
16 UINT64_C(0), // ALU_CLAUSE
17 UINT64_C(26388279066624), // AND_INT
18 UINT64_C(11544872091648), // ASHR_eg
19 UINT64_C(61572651155456), // ASHR_r600
20 UINT64_C(93458488360960), // BCNT_INT
21 UINT64_C(175921860444160), // BFE_INT_eg
22 UINT64_C(140737488355328), // BFE_UINT_eg
23 UINT64_C(211106232532992), // BFI_INT_eg
24 UINT64_C(87960930222080), // BFM_INT_eg
25 UINT64_C(422212465065984), // BIT_ALIGN_INT_eg
26 UINT64_C(9895604649984), // CEIL
27 UINT64_C(11529215046068469760), // CF_ALU
28 UINT64_C(13258597302978740224), // CF_ALU_BREAK
29 UINT64_C(12970366926827028480), // CF_ALU_CONTINUE
30 UINT64_C(13546827679130451968), // CF_ALU_ELSE_AFTER
31 UINT64_C(12105675798371893248), // CF_ALU_POP_AFTER
32 UINT64_C(11817445422220181504), // CF_ALU_PUSH_BEFORE
33 UINT64_C(9565645608534933504), // CF_CALL_FS_EG
34 UINT64_C(9907919180215091200), // CF_CALL_FS_R600
35 UINT64_C(9367487224930631680), // CF_CONTINUE_EG
36 UINT64_C(9511602413006487552), // CF_CONTINUE_R600
37 UINT64_C(9457559217478041600), // CF_ELSE_EG
38 UINT64_C(9691746398101307392), // CF_ELSE_R600
39 UINT64_C(9799832789158199296), // CF_END_CM
40 UINT64_C(9232379236109516800), // CF_END_EG
41 UINT64_C(9232379236109516800), // CF_END_R600
42 UINT64_C(9403516021949595648), // CF_JUMP_EG
43 UINT64_C(9583660007044415488), // CF_JUMP_R600
44 UINT64_C(9421530420459077632), // CF_PUSH_EG
45 UINT64_C(9655717601082343424), // CF_PUSH_ELSE_R600
46 UINT64_C(9241386435364257792), // CF_TC_EG
47 UINT64_C(9259400833873739776), // CF_TC_R600
48 UINT64_C(9259400833873739776), // CF_VC_EG
49 UINT64_C(9295429630892703744), // CF_VC_R600
50 UINT64_C(985162418487296), // CNDE_INT
51 UINT64_C(879609302220800), // CNDE_eg
52 UINT64_C(844424930131968), // CNDE_r600
53 UINT64_C(1055531162664960), // CNDGE_INT
54 UINT64_C(949978046398464), // CNDGE_eg
55 UINT64_C(914793674309632), // CNDGE_r600
56 UINT64_C(1020346790576128), // CNDGT_INT
57 UINT64_C(914793674309632), // CNDGT_eg
58 UINT64_C(879609302220800), // CNDGT_r600
59 UINT64_C(78065325572096), // COS_cm
60 UINT64_C(78065325572096), // COS_eg
61 UINT64_C(61022895341568), // COS_r600
62 UINT64_C(61022895341568), // COS_r700
63 UINT64_C(105553116266496), // CUBE_eg_real
64 UINT64_C(45079976738816), // CUBE_r600_real
65 UINT64_C(104453604638720), // DOT4_eg
66 UINT64_C(43980465111040), // DOT4_r600
67 UINT64_C(9223372036854775808), // EG_ExportBuf
68 UINT64_C(9223372040076001280), // EG_ExportSwz
69 UINT64_C(9313444029402185728), // END_LOOP_EG
70 UINT64_C(9403516021949595648), // END_LOOP_R600
71 UINT64_C(70918499991552), // EXP_IEEE_cm
72 UINT64_C(70918499991552), // EXP_IEEE_eg
73 UINT64_C(53326313947136), // EXP_IEEE_r600
74 UINT64_C(0), // FETCH_CLAUSE
75 UINT64_C(94008244174848), // FFBH_UINT
76 UINT64_C(94557999988736), // FFBL_INT
77 UINT64_C(10995116277760), // FLOOR
78 UINT64_C(89610197663744), // FLT16_TO_FLT32
79 UINT64_C(89060441849856), // FLT32_TO_FLT16
80 UINT64_C(43980465111040), // FLT_TO_INT_eg
81 UINT64_C(58823872086016), // FLT_TO_INT_r600
82 UINT64_C(84662395338752), // FLT_TO_UINT_eg
83 UINT64_C(66520453480448), // FLT_TO_UINT_r600
84 UINT64_C(246290604621824), // FMA_eg
85 UINT64_C(8796093022208), // FRACT
86 UINT64_C(46181635850240), // GROUP_BARRIER
87 UINT64_C(123145302310912), // INTERP_LOAD_P0
88 UINT64_C(4294967295), // INTERP_PAIR_XY
89 UINT64_C(4294967295), // INTERP_PAIR_ZW
90 UINT64_C(4294967295), // INTERP_VEC_LOAD
91 UINT64_C(5747147278385152), // INTERP_XY
92 UINT64_C(5747697034199040), // INTERP_ZW
93 UINT64_C(85212151152640), // INT_TO_FLT_eg
94 UINT64_C(59373627899904), // INT_TO_FLT_r600
95 UINT64_C(24739011624960), // KILLGT
96 UINT64_C(598134325510144), // LDS_ADD
97 UINT64_C(288828510477221888), // LDS_ADD_RET
98 UINT64_C(81662927618179072), // LDS_AND
99 UINT64_C(369893303769890816), // LDS_AND_RET
100 UINT64_C(486986894081523712), // LDS_BYTE_READ_RET
101 UINT64_C(162727720910848000), // LDS_BYTE_WRITE
102 UINT64_C(144713322401366016), // LDS_CMPST
103 UINT64_C(432943698553077760), // LDS_CMPST_RET
104 UINT64_C(54641329853956096), // LDS_MAX_INT
105 UINT64_C(342871706005667840), // LDS_MAX_INT_RET
106 UINT64_C(72655728363438080), // LDS_MAX_UINT
107 UINT64_C(360886104515149824), // LDS_MAX_UINT_RET
108 UINT64_C(45634130599215104), // LDS_MIN_INT
109 UINT64_C(333864506750926848), // LDS_MIN_INT_RET
110 UINT64_C(63648529108697088), // LDS_MIN_UINT
111 UINT64_C(351878905260408832), // LDS_MIN_UINT_RET
112 UINT64_C(90670126872920064), // LDS_OR
113 UINT64_C(378900503024631808), // LDS_OR_RET
114 UINT64_C(450958097062559744), // LDS_READ_RET
115 UINT64_C(505001292591005696), // LDS_SHORT_READ_RET
116 UINT64_C(171734920165588992), // LDS_SHORT_WRITE
117 UINT64_C(9605333580251136), // LDS_SUB
118 UINT64_C(297835709731962880), // LDS_SUB_RET
119 UINT64_C(495994093336264704), // LDS_UBYTE_READ_RET
120 UINT64_C(514008491845746688), // LDS_USHORT_READ_RET
121 UINT64_C(117691724637143040), // LDS_WRITE
122 UINT64_C(117691724637143040), // LDS_WRXCHG
123 UINT64_C(405922100788854784), // LDS_WRXCHG_RET
124 UINT64_C(99677326127661056), // LDS_XOR
125 UINT64_C(387907702279372800), // LDS_XOR_RET
126 UINT64_C(0), // LITERALS
127 UINT64_C(71468255805440), // LOG_CLAMPED_eg
128 UINT64_C(53876069761024), // LOG_CLAMPED_r600
129 UINT64_C(72018011619328), // LOG_IEEE_cm
130 UINT64_C(72018011619328), // LOG_IEEE_eg
131 UINT64_C(54425825574912), // LOG_IEEE_r600
132 UINT64_C(9385501623440113664), // LOOP_BREAK_EG
133 UINT64_C(9547631210025451520), // LOOP_BREAK_R600
134 UINT64_C(12644383719424), // LSHL_eg
135 UINT64_C(62672162783232), // LSHL_r600
136 UINT64_C(12094627905536), // LSHR_eg
137 UINT64_C(62122406969344), // LSHR_r600
138 UINT64_C(1649267441664), // MAX
139 UINT64_C(2748779069440), // MAX_DX10
140 UINT64_C(29686813949952), // MAX_INT
141 UINT64_C(30786325577728), // MAX_UINT
142 UINT64_C(2199023255552), // MIN
143 UINT64_C(3298534883328), // MIN_DX10
144 UINT64_C(30236569763840), // MIN_INT
145 UINT64_C(31336081391616), // MIN_UINT
146 UINT64_C(13743895347200), // MOV
147 UINT64_C(112150186033152), // MOVA_INT_eg
148 UINT64_C(549755813888), // MUL
149 UINT64_C(844424930131968), // MULADD_IEEE_eg
150 UINT64_C(703687441776640), // MULADD_IEEE_r600
151 UINT64_C(281474976710656), // MULADD_INT24_cm
152 UINT64_C(562949953421312), // MULADD_UINT24_eg
153 UINT64_C(703687441776640), // MULADD_eg
154 UINT64_C(562949953421312), // MULADD_r600
155 UINT64_C(79164837199872), // MULHI_INT_cm
156 UINT64_C(50577534877696), // MULHI_INT_cm24
157 UINT64_C(79164837199872), // MULHI_INT_eg
158 UINT64_C(63771674411008), // MULHI_INT_r600
159 UINT64_C(97856534872064), // MULHI_UINT24_eg
160 UINT64_C(80264348827648), // MULHI_UINT_cm
161 UINT64_C(97856534872064), // MULHI_UINT_cm24
162 UINT64_C(80264348827648), // MULHI_UINT_eg
163 UINT64_C(64871186038784), // MULHI_UINT_r600
164 UINT64_C(78615081385984), // MULLO_INT_cm
165 UINT64_C(78615081385984), // MULLO_INT_eg
166 UINT64_C(63221918597120), // MULLO_INT_r600
167 UINT64_C(79714593013760), // MULLO_UINT_cm
168 UINT64_C(79714593013760), // MULLO_UINT_eg
169 UINT64_C(64321430224896), // MULLO_UINT_r600
170 UINT64_C(1099511627776), // MUL_IEEE
171 UINT64_C(50027779063808), // MUL_INT24_cm
172 UINT64_C(1090715534753792), // MUL_LIT_eg
173 UINT64_C(422212465065984), // MUL_LIT_r600
174 UINT64_C(99505802313728), // MUL_UINT24_eg
175 UINT64_C(28037546508288), // NOT_INT
176 UINT64_C(26938034880512), // OR_INT
177 UINT64_C(0), // PAD
178 UINT64_C(9475573615987523584), // POP_EG
179 UINT64_C(9727775195120271360), // POP_R600
180 UINT64_C(17592186044416), // PRED_SETE
181 UINT64_C(36283883716608), // PRED_SETE_INT
182 UINT64_C(18691697672192), // PRED_SETGE
183 UINT64_C(37383395344384), // PRED_SETGE_INT
184 UINT64_C(18141941858304), // PRED_SETGT
185 UINT64_C(36833639530496), // PRED_SETGT_INT
186 UINT64_C(19241453486080), // PRED_SETNE
187 UINT64_C(37933151158272), // PRED_SETNE_INT
188 UINT64_C(9223372036854775808), // R600_ExportBuf
189 UINT64_C(9223372040076001280), // R600_ExportSwz
190 UINT64_C(10772874191460901488), // RAT_ATOMIC_ADD_NORET
191 UINT64_C(10772874191460900976), // RAT_ATOMIC_ADD_RTN
192 UINT64_C(10772874191460901600), // RAT_ATOMIC_AND_NORET
193 UINT64_C(10772874191460901088), // RAT_ATOMIC_AND_RTN
194 UINT64_C(10772874191460901440), // RAT_ATOMIC_CMPXCHG_INT_NORET
195 UINT64_C(10772874191460900928), // RAT_ATOMIC_CMPXCHG_INT_RTN
196 UINT64_C(10772874191460901680), // RAT_ATOMIC_DEC_UINT_NORET
197 UINT64_C(10772874191460901168), // RAT_ATOMIC_DEC_UINT_RTN
198 UINT64_C(10772874191460901664), // RAT_ATOMIC_INC_UINT_NORET
199 UINT64_C(10772874191460901152), // RAT_ATOMIC_INC_UINT_RTN
200 UINT64_C(10772874191460901568), // RAT_ATOMIC_MAX_INT_NORET
201 UINT64_C(10772874191460901056), // RAT_ATOMIC_MAX_INT_RTN
202 UINT64_C(10772874191460901584), // RAT_ATOMIC_MAX_UINT_NORET
203 UINT64_C(10772874191460901072), // RAT_ATOMIC_MAX_UINT_RTN
204 UINT64_C(10772874191460901536), // RAT_ATOMIC_MIN_INT_NORET
205 UINT64_C(10772874191460901024), // RAT_ATOMIC_MIN_INT_RTN
206 UINT64_C(10772874191460901552), // RAT_ATOMIC_MIN_UINT_NORET
207 UINT64_C(10772874191460901040), // RAT_ATOMIC_MIN_UINT_RTN
208 UINT64_C(10772874191460901616), // RAT_ATOMIC_OR_NORET
209 UINT64_C(10772874191460901104), // RAT_ATOMIC_OR_RTN
210 UINT64_C(10772874191460901520), // RAT_ATOMIC_RSUB_NORET
211 UINT64_C(10772874191460901008), // RAT_ATOMIC_RSUB_RTN
212 UINT64_C(10772874191460901504), // RAT_ATOMIC_SUB_NORET
213 UINT64_C(10772874191460900992), // RAT_ATOMIC_SUB_RTN
214 UINT64_C(10772874191460901408), // RAT_ATOMIC_XCHG_INT_NORET
215 UINT64_C(10772874191460900880), // RAT_ATOMIC_XCHG_INT_RTN
216 UINT64_C(10772874191460901632), // RAT_ATOMIC_XOR_NORET
217 UINT64_C(10772874191460901120), // RAT_ATOMIC_XOR_RTN
218 UINT64_C(10772874191460901136), // RAT_MSKOR
219 UINT64_C(10790888589970383168), // RAT_STORE_DWORD128
220 UINT64_C(10790642299365761344), // RAT_STORE_DWORD32
221 UINT64_C(10790677483737850176), // RAT_STORE_DWORD64
222 UINT64_C(10772874191460900880), // RAT_STORE_TYPED_cm
223 UINT64_C(10772874191460900880), // RAT_STORE_TYPED_eg
224 UINT64_C(10790888589970382880), // RAT_WRITE_CACHELESS_128_eg
225 UINT64_C(10790642299365761056), // RAT_WRITE_CACHELESS_32_eg
226 UINT64_C(10790677483737849888), // RAT_WRITE_CACHELESS_64_eg
227 UINT64_C(74217034874880), // RECIPSQRT_CLAMPED_cm
228 UINT64_C(74217034874880), // RECIPSQRT_CLAMPED_eg
229 UINT64_C(56624848830464), // RECIPSQRT_CLAMPED_r600
230 UINT64_C(75316546502656), // RECIPSQRT_IEEE_cm
231 UINT64_C(75316546502656), // RECIPSQRT_IEEE_eg
232 UINT64_C(57724360458240), // RECIPSQRT_IEEE_r600
233 UINT64_C(72567767433216), // RECIP_CLAMPED_cm
234 UINT64_C(72567767433216), // RECIP_CLAMPED_eg
235 UINT64_C(54975581388800), // RECIP_CLAMPED_r600
236 UINT64_C(73667279060992), // RECIP_IEEE_cm
237 UINT64_C(73667279060992), // RECIP_IEEE_eg
238 UINT64_C(56075093016576), // RECIP_IEEE_r600
239 UINT64_C(81363860455424), // RECIP_UINT_eg
240 UINT64_C(65970697666560), // RECIP_UINT_r600
241 UINT64_C(10445360463872), // RNDNE
242 UINT64_C(4398046511104), // SETE
243 UINT64_C(6597069766656), // SETE_DX10
244 UINT64_C(31885837205504), // SETE_INT
245 UINT64_C(7696581394432), // SETGE_DX10
246 UINT64_C(32985348833280), // SETGE_INT
247 UINT64_C(34634616274944), // SETGE_UINT
248 UINT64_C(7146825580544), // SETGT_DX10
249 UINT64_C(32435593019392), // SETGT_INT
250 UINT64_C(34084860461056), // SETGT_UINT
251 UINT64_C(8246337208320), // SETNE_DX10
252 UINT64_C(33535104647168), // SETNE_INT
253 UINT64_C(5497558138880), // SGE
254 UINT64_C(4947802324992), // SGT
255 UINT64_C(77515569758208), // SIN_cm
256 UINT64_C(77515569758208), // SIN_eg
257 UINT64_C(60473139527680), // SIN_r600
258 UINT64_C(60473139527680), // SIN_r700
259 UINT64_C(6047313952768), // SNE
260 UINT64_C(45629732552704), // SUBB_UINT
261 UINT64_C(29137058136064), // SUB_INT
262 UINT64_C(7), // TEX_GET_GRADIENTS_H
263 UINT64_C(8), // TEX_GET_GRADIENTS_V
264 UINT64_C(4), // TEX_GET_TEXTURE_RESINFO
265 UINT64_C(3), // TEX_LD
266 UINT64_C(35), // TEX_LDPTR
267 UINT64_C(16), // TEX_SAMPLE
268 UINT64_C(24), // TEX_SAMPLE_C
269 UINT64_C(28), // TEX_SAMPLE_C_G
270 UINT64_C(25), // TEX_SAMPLE_C_L
271 UINT64_C(26), // TEX_SAMPLE_C_LB
272 UINT64_C(20), // TEX_SAMPLE_G
273 UINT64_C(17), // TEX_SAMPLE_L
274 UINT64_C(18), // TEX_SAMPLE_LB
275 UINT64_C(11), // TEX_SET_GRADIENTS_H
276 UINT64_C(12), // TEX_SET_GRADIENTS_V
277 UINT64_C(16775081780284751936), // TEX_VTX_CONSTBUF
278 UINT64_C(9236056004066541632), // TEX_VTX_TEXBUF
279 UINT64_C(9345848836096), // TRUNC
280 UINT64_C(85761906966528), // UINT_TO_FLT_eg
281 UINT64_C(59923383713792), // UINT_TO_FLT_r600
282 UINT64_C(1769087820812517440), // VTX_READ_128_cm
283 UINT64_C(1769087821886259264), // VTX_READ_128_eg
284 UINT64_C(1251983104222953536), // VTX_READ_16_cm
285 UINT64_C(1251983104357171264), // VTX_READ_16_eg
286 UINT64_C(1396098292298809408), // VTX_READ_32_cm
287 UINT64_C(1396098292567244864), // VTX_READ_32_eg
288 UINT64_C(1684223115334254656), // VTX_READ_64_cm
289 UINT64_C(1684223115871125568), // VTX_READ_64_eg
290 UINT64_C(1179925510185025600), // VTX_READ_8_cm
291 UINT64_C(1179925510252134464), // VTX_READ_8_eg
292 UINT64_C(9331458427911667712), // WHILE_LOOP_EG
293 UINT64_C(9439544818968559616), // WHILE_LOOP_R600
294 UINT64_C(27487790694400), // XOR_INT
295 };
296 constexpr unsigned FirstSupportedOpcode = 381;
297
298 const unsigned opcode = MI.getOpcode();
299 if (opcode < FirstSupportedOpcode)
300 reportUnsupportedInst(Inst: MI);
301 unsigned TableIndex = opcode - FirstSupportedOpcode;
302 uint64_t Value = InstBits[TableIndex];
303 uint64_t op = 0;
304 (void)op; // suppress warning
305 switch (opcode) {
306 case R600::CF_CALL_FS_EG:
307 case R600::CF_CALL_FS_R600:
308 case R600::CF_END_CM:
309 case R600::CF_END_EG:
310 case R600::CF_END_R600:
311 case R600::GROUP_BARRIER:
312 case R600::INTERP_PAIR_XY:
313 case R600::INTERP_PAIR_ZW:
314 case R600::INTERP_VEC_LOAD:
315 case R600::PAD: {
316 break;
317 }
318 case R600::CF_ALU:
319 case R600::CF_ALU_BREAK:
320 case R600::CF_ALU_CONTINUE:
321 case R600::CF_ALU_ELSE_AFTER:
322 case R600::CF_ALU_POP_AFTER:
323 case R600::CF_ALU_PUSH_BEFORE: {
324 // op: ADDR
325 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
326 Value |= (op & 0x3fffff);
327 // op: KCACHE_BANK0
328 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
329 Value |= (op & 0xf) << 22;
330 // op: KCACHE_BANK1
331 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
332 Value |= (op & 0xf) << 26;
333 // op: KCACHE_MODE0
334 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
335 Value |= (op & 0x3) << 30;
336 // op: KCACHE_MODE1
337 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
338 Value |= (op & 0x3) << 32;
339 // op: KCACHE_ADDR0
340 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
341 Value |= (op & 0xff) << 34;
342 // op: KCACHE_ADDR1
343 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
344 Value |= (op & 0xff) << 42;
345 // op: COUNT
346 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
347 Value |= (op & 0x7f) << 50;
348 break;
349 }
350 case R600::CF_CONTINUE_EG:
351 case R600::END_LOOP_EG:
352 case R600::LOOP_BREAK_EG:
353 case R600::WHILE_LOOP_EG: {
354 // op: ADDR
355 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
356 Value |= (op & 0xffffff);
357 break;
358 }
359 case R600::CF_TC_EG:
360 case R600::CF_VC_EG: {
361 // op: ADDR
362 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
363 Value |= (op & 0xffffff);
364 // op: COUNT
365 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
366 Value |= (op & 0x3f) << 42;
367 break;
368 }
369 case R600::CF_ELSE_EG:
370 case R600::CF_JUMP_EG:
371 case R600::CF_PUSH_EG:
372 case R600::POP_EG: {
373 // op: ADDR
374 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
375 Value |= (op & 0xffffff);
376 // op: POP_COUNT
377 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
378 Value |= (op & 0x7) << 32;
379 break;
380 }
381 case R600::CF_CONTINUE_R600:
382 case R600::CF_PUSH_ELSE_R600:
383 case R600::END_LOOP_R600:
384 case R600::LOOP_BREAK_R600:
385 case R600::WHILE_LOOP_R600: {
386 // op: ADDR
387 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
388 Value |= (op & 0xffffffff);
389 break;
390 }
391 case R600::CF_TC_R600:
392 case R600::CF_VC_R600: {
393 // op: ADDR
394 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
395 Value |= (op & 0xffffffff);
396 // op: CNT
397 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
398 Value |= (op & 0x8) << 48;
399 Value |= (op & 0x7) << 42;
400 break;
401 }
402 case R600::CF_ELSE_R600:
403 case R600::CF_JUMP_R600:
404 case R600::POP_R600: {
405 // op: ADDR
406 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
407 Value |= (op & 0xffffffff);
408 // op: POP_COUNT
409 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
410 Value |= (op & 0x7) << 32;
411 break;
412 }
413 case R600::TEX_GET_GRADIENTS_H:
414 case R600::TEX_GET_GRADIENTS_V:
415 case R600::TEX_GET_TEXTURE_RESINFO:
416 case R600::TEX_LD:
417 case R600::TEX_LDPTR:
418 case R600::TEX_SAMPLE:
419 case R600::TEX_SAMPLE_C:
420 case R600::TEX_SAMPLE_C_G:
421 case R600::TEX_SAMPLE_C_L:
422 case R600::TEX_SAMPLE_C_LB:
423 case R600::TEX_SAMPLE_G:
424 case R600::TEX_SAMPLE_L:
425 case R600::TEX_SAMPLE_LB:
426 case R600::TEX_SET_GRADIENTS_H:
427 case R600::TEX_SET_GRADIENTS_V: {
428 // op: RESOURCE_ID
429 op = getMachineOpValue(MI, MO: MI.getOperand(i: 13), Fixups, STI);
430 Value |= (op & 0xff) << 8;
431 // op: SRC_GPR
432 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
433 Value |= (op & 0x7f) << 16;
434 // op: DST_GPR
435 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
436 Value |= (op & 0x7f) << 32;
437 // op: DST_SEL_X
438 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
439 Value |= (op & 0x7) << 41;
440 // op: DST_SEL_Y
441 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
442 Value |= (op & 0x7) << 44;
443 // op: DST_SEL_Z
444 op = getMachineOpValue(MI, MO: MI.getOperand(i: 11), Fixups, STI);
445 Value |= (op & 0x7) << 47;
446 // op: DST_SEL_W
447 op = getMachineOpValue(MI, MO: MI.getOperand(i: 12), Fixups, STI);
448 Value |= (op & 0x7) << 50;
449 // op: COORD_TYPE_X
450 op = getMachineOpValue(MI, MO: MI.getOperand(i: 15), Fixups, STI);
451 Value |= (op & 0x1) << 60;
452 // op: COORD_TYPE_Y
453 op = getMachineOpValue(MI, MO: MI.getOperand(i: 16), Fixups, STI);
454 Value |= (op & 0x1) << 61;
455 // op: COORD_TYPE_Z
456 op = getMachineOpValue(MI, MO: MI.getOperand(i: 17), Fixups, STI);
457 Value |= (op & 0x1) << 62;
458 // op: COORD_TYPE_W
459 op = getMachineOpValue(MI, MO: MI.getOperand(i: 18), Fixups, STI);
460 Value |= (op & 0x1) << 63;
461 break;
462 }
463 case R600::ALU_CLAUSE:
464 case R600::FETCH_CLAUSE: {
465 // op: addr
466 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
467 Value |= (op & 0xff);
468 break;
469 }
470 case R600::EG_ExportBuf: {
471 // op: arraybase
472 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
473 Value |= (op & 0x1fff);
474 // op: type
475 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
476 Value |= (op & 0x3) << 13;
477 // op: gpr
478 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
479 Value |= (op & 0x7f) << 15;
480 // op: arraySize
481 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
482 Value |= (op & 0xfff) << 32;
483 // op: compMask
484 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
485 Value |= (op & 0xf) << 44;
486 // op: eop
487 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
488 Value |= (op & 0x1) << 53;
489 // op: inst
490 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
491 Value |= (op & 0xff) << 54;
492 break;
493 }
494 case R600::R600_ExportBuf: {
495 // op: arraybase
496 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
497 Value |= (op & 0x1fff);
498 // op: type
499 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
500 Value |= (op & 0x3) << 13;
501 // op: gpr
502 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
503 Value |= (op & 0x7f) << 15;
504 // op: arraySize
505 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
506 Value |= (op & 0xfff) << 32;
507 // op: compMask
508 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
509 Value |= (op & 0xf) << 44;
510 // op: eop
511 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
512 Value |= (op & 0x1) << 53;
513 // op: inst
514 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
515 Value |= (op & 0xff) << 55;
516 break;
517 }
518 case R600::EG_ExportSwz: {
519 // op: arraybase
520 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
521 Value |= (op & 0x1fff);
522 // op: type
523 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
524 Value |= (op & 0x3) << 13;
525 // op: gpr
526 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
527 Value |= (op & 0x7f) << 15;
528 // op: sw_x
529 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
530 Value |= (op & 0x7) << 32;
531 // op: sw_y
532 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
533 Value |= (op & 0x7) << 35;
534 // op: sw_z
535 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
536 Value |= (op & 0x7) << 38;
537 // op: sw_w
538 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
539 Value |= (op & 0x7) << 41;
540 // op: eop
541 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
542 Value |= (op & 0x1) << 53;
543 // op: inst
544 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
545 Value |= (op & 0xff) << 54;
546 break;
547 }
548 case R600::R600_ExportSwz: {
549 // op: arraybase
550 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
551 Value |= (op & 0x1fff);
552 // op: type
553 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
554 Value |= (op & 0x3) << 13;
555 // op: gpr
556 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
557 Value |= (op & 0x7f) << 15;
558 // op: sw_x
559 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
560 Value |= (op & 0x7) << 32;
561 // op: sw_y
562 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
563 Value |= (op & 0x7) << 35;
564 // op: sw_z
565 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
566 Value |= (op & 0x7) << 38;
567 // op: sw_w
568 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
569 Value |= (op & 0x7) << 41;
570 // op: eop
571 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
572 Value |= (op & 0x1) << 53;
573 // op: inst
574 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
575 Value |= (op & 0xff) << 55;
576 break;
577 }
578 case R600::TEX_VTX_CONSTBUF:
579 case R600::TEX_VTX_TEXBUF: {
580 // op: dst_gpr
581 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
582 Value |= (op & 0x7f) << 32;
583 // op: src_gpr
584 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
585 Value |= (op & 0x7f) << 16;
586 // op: buffer_id
587 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
588 Value |= (op & 0xff) << 8;
589 break;
590 }
591 case R600::LITERALS: {
592 // op: literal1
593 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
594 Value |= (op & 0xffffffff);
595 // op: literal2
596 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
597 Value |= (op & 0xffffffff) << 32;
598 break;
599 }
600 case R600::RAT_STORE_TYPED_cm: {
601 // op: rat_id
602 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
603 Value |= (op & 0xf);
604 // op: rw_gpr
605 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
606 Value |= (op & 0x7f) << 15;
607 // op: index_gpr
608 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
609 Value |= (op & 0x7f) << 23;
610 break;
611 }
612 case R600::RAT_STORE_TYPED_eg: {
613 // op: rat_id
614 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
615 Value |= (op & 0xf);
616 // op: rw_gpr
617 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
618 Value |= (op & 0x7f) << 15;
619 // op: index_gpr
620 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
621 Value |= (op & 0x7f) << 23;
622 // op: eop
623 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
624 Value |= (op & 0x1) << 53;
625 break;
626 }
627 case R600::RAT_MSKOR:
628 case R600::RAT_STORE_DWORD128:
629 case R600::RAT_STORE_DWORD32:
630 case R600::RAT_STORE_DWORD64: {
631 // op: rw_gpr
632 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
633 Value |= (op & 0x7f) << 15;
634 // op: index_gpr
635 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
636 Value |= (op & 0x7f) << 23;
637 break;
638 }
639 case R600::RAT_WRITE_CACHELESS_128_eg:
640 case R600::RAT_WRITE_CACHELESS_32_eg:
641 case R600::RAT_WRITE_CACHELESS_64_eg: {
642 // op: rw_gpr
643 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
644 Value |= (op & 0x7f) << 15;
645 // op: index_gpr
646 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
647 Value |= (op & 0x7f) << 23;
648 // op: eop
649 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
650 Value |= (op & 0x1) << 53;
651 break;
652 }
653 case R600::RAT_ATOMIC_ADD_NORET:
654 case R600::RAT_ATOMIC_ADD_RTN:
655 case R600::RAT_ATOMIC_AND_NORET:
656 case R600::RAT_ATOMIC_AND_RTN:
657 case R600::RAT_ATOMIC_CMPXCHG_INT_NORET:
658 case R600::RAT_ATOMIC_CMPXCHG_INT_RTN:
659 case R600::RAT_ATOMIC_DEC_UINT_NORET:
660 case R600::RAT_ATOMIC_DEC_UINT_RTN:
661 case R600::RAT_ATOMIC_INC_UINT_NORET:
662 case R600::RAT_ATOMIC_INC_UINT_RTN:
663 case R600::RAT_ATOMIC_MAX_INT_NORET:
664 case R600::RAT_ATOMIC_MAX_INT_RTN:
665 case R600::RAT_ATOMIC_MAX_UINT_NORET:
666 case R600::RAT_ATOMIC_MAX_UINT_RTN:
667 case R600::RAT_ATOMIC_MIN_INT_NORET:
668 case R600::RAT_ATOMIC_MIN_INT_RTN:
669 case R600::RAT_ATOMIC_MIN_UINT_NORET:
670 case R600::RAT_ATOMIC_MIN_UINT_RTN:
671 case R600::RAT_ATOMIC_OR_NORET:
672 case R600::RAT_ATOMIC_OR_RTN:
673 case R600::RAT_ATOMIC_RSUB_NORET:
674 case R600::RAT_ATOMIC_RSUB_RTN:
675 case R600::RAT_ATOMIC_SUB_NORET:
676 case R600::RAT_ATOMIC_SUB_RTN:
677 case R600::RAT_ATOMIC_XCHG_INT_NORET:
678 case R600::RAT_ATOMIC_XCHG_INT_RTN:
679 case R600::RAT_ATOMIC_XOR_NORET:
680 case R600::RAT_ATOMIC_XOR_RTN: {
681 // op: rw_gpr
682 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
683 Value |= (op & 0x7f) << 15;
684 // op: index_gpr
685 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
686 Value |= (op & 0x7f) << 23;
687 break;
688 }
689 case R600::LDS_CMPST: {
690 // op: src0
691 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
692 Value |= (op & 0x600) << 1;
693 Value |= (op & 0x1ff);
694 // op: src0_rel
695 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
696 Value |= (op & 0x1) << 9;
697 // op: src1
698 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
699 Value |= (op & 0x600) << 14;
700 Value |= (op & 0x1ff) << 13;
701 // op: src1_rel
702 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
703 Value |= (op & 0x1) << 22;
704 // op: pred_sel
705 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
706 Value |= (op & 0x3) << 29;
707 // op: last
708 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
709 Value |= (op & 0x1) << 31;
710 // op: src2
711 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
712 Value |= (op & 0x600) << 33;
713 Value |= (op & 0x1ff) << 32;
714 // op: src2_rel
715 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
716 Value |= (op & 0x1) << 41;
717 // op: bank_swizzle
718 op = getMachineOpValue(MI, MO: MI.getOperand(i: 11), Fixups, STI);
719 Value |= (op & 0x7) << 50;
720 break;
721 }
722 case R600::LDS_ADD:
723 case R600::LDS_AND:
724 case R600::LDS_BYTE_WRITE:
725 case R600::LDS_MAX_INT:
726 case R600::LDS_MAX_UINT:
727 case R600::LDS_MIN_INT:
728 case R600::LDS_MIN_UINT:
729 case R600::LDS_OR:
730 case R600::LDS_SHORT_WRITE:
731 case R600::LDS_SUB:
732 case R600::LDS_WRITE:
733 case R600::LDS_WRXCHG:
734 case R600::LDS_XOR: {
735 // op: src0
736 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
737 Value |= (op & 0x600) << 1;
738 Value |= (op & 0x1ff);
739 // op: src0_rel
740 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
741 Value |= (op & 0x1) << 9;
742 // op: src1
743 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
744 Value |= (op & 0x600) << 14;
745 Value |= (op & 0x1ff) << 13;
746 // op: src1_rel
747 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
748 Value |= (op & 0x1) << 22;
749 // op: pred_sel
750 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
751 Value |= (op & 0x3) << 29;
752 // op: last
753 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
754 Value |= (op & 0x1) << 31;
755 // op: bank_swizzle
756 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
757 Value |= (op & 0x7) << 50;
758 break;
759 }
760 case R600::LDS_BYTE_READ_RET:
761 case R600::LDS_READ_RET:
762 case R600::LDS_SHORT_READ_RET:
763 case R600::LDS_UBYTE_READ_RET:
764 case R600::LDS_USHORT_READ_RET: {
765 // op: src0
766 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
767 Value |= (op & 0x600) << 1;
768 Value |= (op & 0x1ff);
769 // op: src0_rel
770 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
771 Value |= (op & 0x1) << 9;
772 // op: pred_sel
773 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
774 Value |= (op & 0x3) << 29;
775 // op: last
776 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
777 Value |= (op & 0x1) << 31;
778 // op: bank_swizzle
779 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
780 Value |= (op & 0x7) << 50;
781 break;
782 }
783 case R600::LDS_CMPST_RET: {
784 // op: src0
785 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
786 Value |= (op & 0x600) << 1;
787 Value |= (op & 0x1ff);
788 // op: src0_rel
789 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
790 Value |= (op & 0x1) << 9;
791 // op: src1
792 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
793 Value |= (op & 0x600) << 14;
794 Value |= (op & 0x1ff) << 13;
795 // op: src1_rel
796 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
797 Value |= (op & 0x1) << 22;
798 // op: pred_sel
799 op = getMachineOpValue(MI, MO: MI.getOperand(i: 11), Fixups, STI);
800 Value |= (op & 0x3) << 29;
801 // op: last
802 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
803 Value |= (op & 0x1) << 31;
804 // op: src2
805 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
806 Value |= (op & 0x600) << 33;
807 Value |= (op & 0x1ff) << 32;
808 // op: src2_rel
809 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
810 Value |= (op & 0x1) << 41;
811 // op: bank_swizzle
812 op = getMachineOpValue(MI, MO: MI.getOperand(i: 12), Fixups, STI);
813 Value |= (op & 0x7) << 50;
814 break;
815 }
816 case R600::LDS_ADD_RET:
817 case R600::LDS_AND_RET:
818 case R600::LDS_MAX_INT_RET:
819 case R600::LDS_MAX_UINT_RET:
820 case R600::LDS_MIN_INT_RET:
821 case R600::LDS_MIN_UINT_RET:
822 case R600::LDS_OR_RET:
823 case R600::LDS_SUB_RET:
824 case R600::LDS_WRXCHG_RET:
825 case R600::LDS_XOR_RET: {
826 // op: src0
827 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
828 Value |= (op & 0x600) << 1;
829 Value |= (op & 0x1ff);
830 // op: src0_rel
831 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
832 Value |= (op & 0x1) << 9;
833 // op: src1
834 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
835 Value |= (op & 0x600) << 14;
836 Value |= (op & 0x1ff) << 13;
837 // op: src1_rel
838 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
839 Value |= (op & 0x1) << 22;
840 // op: pred_sel
841 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
842 Value |= (op & 0x3) << 29;
843 // op: last
844 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
845 Value |= (op & 0x1) << 31;
846 // op: bank_swizzle
847 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
848 Value |= (op & 0x7) << 50;
849 break;
850 }
851 case R600::BFE_INT_eg:
852 case R600::BFE_UINT_eg:
853 case R600::BFI_INT_eg:
854 case R600::BIT_ALIGN_INT_eg:
855 case R600::CNDE_INT:
856 case R600::CNDE_eg:
857 case R600::CNDE_r600:
858 case R600::CNDGE_INT:
859 case R600::CNDGE_eg:
860 case R600::CNDGE_r600:
861 case R600::CNDGT_INT:
862 case R600::CNDGT_eg:
863 case R600::CNDGT_r600:
864 case R600::FMA_eg:
865 case R600::MULADD_IEEE_eg:
866 case R600::MULADD_IEEE_r600:
867 case R600::MULADD_INT24_cm:
868 case R600::MULADD_UINT24_eg:
869 case R600::MULADD_eg:
870 case R600::MULADD_r600:
871 case R600::MUL_LIT_eg:
872 case R600::MUL_LIT_r600: {
873 // op: src0
874 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
875 Value |= (op & 0x600) << 1;
876 Value |= (op & 0x1ff);
877 // op: src0_rel
878 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
879 Value |= (op & 0x1) << 9;
880 // op: src1
881 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
882 Value |= (op & 0x600) << 14;
883 Value |= (op & 0x1ff) << 13;
884 // op: src1_rel
885 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
886 Value |= (op & 0x1) << 22;
887 // op: pred_sel
888 op = getMachineOpValue(MI, MO: MI.getOperand(i: 16), Fixups, STI);
889 Value |= (op & 0x3) << 29;
890 // op: last
891 op = getMachineOpValue(MI, MO: MI.getOperand(i: 15), Fixups, STI);
892 Value |= (op & 0x1) << 31;
893 // op: src0_neg
894 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
895 Value |= (op & 0x1) << 12;
896 // op: src1_neg
897 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
898 Value |= (op & 0x1) << 25;
899 // op: dst
900 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
901 Value |= (op & 0x600) << 52;
902 Value |= (op & 0x7f) << 53;
903 // op: bank_swizzle
904 op = getMachineOpValue(MI, MO: MI.getOperand(i: 18), Fixups, STI);
905 Value |= (op & 0x7) << 50;
906 // op: dst_rel
907 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
908 Value |= (op & 0x1) << 60;
909 // op: clamp
910 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
911 Value |= (op & 0x1) << 63;
912 // op: src2
913 op = getMachineOpValue(MI, MO: MI.getOperand(i: 11), Fixups, STI);
914 Value |= (op & 0x600) << 33;
915 Value |= (op & 0x1ff) << 32;
916 // op: src2_rel
917 op = getMachineOpValue(MI, MO: MI.getOperand(i: 13), Fixups, STI);
918 Value |= (op & 0x1) << 41;
919 // op: src2_neg
920 op = getMachineOpValue(MI, MO: MI.getOperand(i: 12), Fixups, STI);
921 Value |= (op & 0x1) << 44;
922 break;
923 }
924 case R600::BCNT_INT:
925 case R600::CEIL:
926 case R600::COS_cm:
927 case R600::COS_eg:
928 case R600::COS_r600:
929 case R600::COS_r700:
930 case R600::EXP_IEEE_cm:
931 case R600::EXP_IEEE_eg:
932 case R600::EXP_IEEE_r600:
933 case R600::FFBH_UINT:
934 case R600::FFBL_INT:
935 case R600::FLOOR:
936 case R600::FLT16_TO_FLT32:
937 case R600::FLT32_TO_FLT16:
938 case R600::FLT_TO_INT_eg:
939 case R600::FLT_TO_INT_r600:
940 case R600::FLT_TO_UINT_eg:
941 case R600::FLT_TO_UINT_r600:
942 case R600::FRACT:
943 case R600::INTERP_LOAD_P0:
944 case R600::INT_TO_FLT_eg:
945 case R600::INT_TO_FLT_r600:
946 case R600::LOG_CLAMPED_eg:
947 case R600::LOG_CLAMPED_r600:
948 case R600::LOG_IEEE_cm:
949 case R600::LOG_IEEE_eg:
950 case R600::LOG_IEEE_r600:
951 case R600::MOV:
952 case R600::MOVA_INT_eg:
953 case R600::NOT_INT:
954 case R600::RECIPSQRT_CLAMPED_cm:
955 case R600::RECIPSQRT_CLAMPED_eg:
956 case R600::RECIPSQRT_CLAMPED_r600:
957 case R600::RECIPSQRT_IEEE_cm:
958 case R600::RECIPSQRT_IEEE_eg:
959 case R600::RECIPSQRT_IEEE_r600:
960 case R600::RECIP_CLAMPED_cm:
961 case R600::RECIP_CLAMPED_eg:
962 case R600::RECIP_CLAMPED_r600:
963 case R600::RECIP_IEEE_cm:
964 case R600::RECIP_IEEE_eg:
965 case R600::RECIP_IEEE_r600:
966 case R600::RECIP_UINT_eg:
967 case R600::RECIP_UINT_r600:
968 case R600::RNDNE:
969 case R600::SIN_cm:
970 case R600::SIN_eg:
971 case R600::SIN_r600:
972 case R600::SIN_r700:
973 case R600::TRUNC:
974 case R600::UINT_TO_FLT_eg:
975 case R600::UINT_TO_FLT_r600: {
976 // op: src0
977 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
978 Value |= (op & 0x600) << 1;
979 Value |= (op & 0x1ff);
980 // op: src0_rel
981 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
982 Value |= (op & 0x1) << 9;
983 // op: pred_sel
984 op = getMachineOpValue(MI, MO: MI.getOperand(i: 11), Fixups, STI);
985 Value |= (op & 0x3) << 29;
986 // op: last
987 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
988 Value |= (op & 0x1) << 31;
989 // op: src0_neg
990 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
991 Value |= (op & 0x1) << 12;
992 // op: dst
993 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
994 Value |= (op & 0x600) << 52;
995 Value |= (op & 0x7f) << 53;
996 // op: bank_swizzle
997 op = getMachineOpValue(MI, MO: MI.getOperand(i: 13), Fixups, STI);
998 Value |= (op & 0x7) << 50;
999 // op: dst_rel
1000 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
1001 Value |= (op & 0x1) << 60;
1002 // op: clamp
1003 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
1004 Value |= (op & 0x1) << 63;
1005 // op: src0_abs
1006 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
1007 Value |= (op & 0x1) << 32;
1008 // op: write
1009 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
1010 Value |= (op & 0x1) << 36;
1011 // op: omod
1012 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
1013 Value |= (op & 0x3) << 37;
1014 break;
1015 }
1016 case R600::ADD:
1017 case R600::ADDC_UINT:
1018 case R600::ADD_INT:
1019 case R600::AND_INT:
1020 case R600::ASHR_eg:
1021 case R600::ASHR_r600:
1022 case R600::BFM_INT_eg:
1023 case R600::CUBE_eg_real:
1024 case R600::CUBE_r600_real:
1025 case R600::DOT4_eg:
1026 case R600::DOT4_r600:
1027 case R600::KILLGT:
1028 case R600::LSHL_eg:
1029 case R600::LSHL_r600:
1030 case R600::LSHR_eg:
1031 case R600::LSHR_r600:
1032 case R600::MAX:
1033 case R600::MAX_DX10:
1034 case R600::MAX_INT:
1035 case R600::MAX_UINT:
1036 case R600::MIN:
1037 case R600::MIN_DX10:
1038 case R600::MIN_INT:
1039 case R600::MIN_UINT:
1040 case R600::MUL:
1041 case R600::MULHI_INT_cm:
1042 case R600::MULHI_INT_cm24:
1043 case R600::MULHI_INT_eg:
1044 case R600::MULHI_INT_r600:
1045 case R600::MULHI_UINT24_eg:
1046 case R600::MULHI_UINT_cm:
1047 case R600::MULHI_UINT_cm24:
1048 case R600::MULHI_UINT_eg:
1049 case R600::MULHI_UINT_r600:
1050 case R600::MULLO_INT_cm:
1051 case R600::MULLO_INT_eg:
1052 case R600::MULLO_INT_r600:
1053 case R600::MULLO_UINT_cm:
1054 case R600::MULLO_UINT_eg:
1055 case R600::MULLO_UINT_r600:
1056 case R600::MUL_IEEE:
1057 case R600::MUL_INT24_cm:
1058 case R600::MUL_UINT24_eg:
1059 case R600::OR_INT:
1060 case R600::PRED_SETE:
1061 case R600::PRED_SETE_INT:
1062 case R600::PRED_SETGE:
1063 case R600::PRED_SETGE_INT:
1064 case R600::PRED_SETGT:
1065 case R600::PRED_SETGT_INT:
1066 case R600::PRED_SETNE:
1067 case R600::PRED_SETNE_INT:
1068 case R600::SETE:
1069 case R600::SETE_DX10:
1070 case R600::SETE_INT:
1071 case R600::SETGE_DX10:
1072 case R600::SETGE_INT:
1073 case R600::SETGE_UINT:
1074 case R600::SETGT_DX10:
1075 case R600::SETGT_INT:
1076 case R600::SETGT_UINT:
1077 case R600::SETNE_DX10:
1078 case R600::SETNE_INT:
1079 case R600::SGE:
1080 case R600::SGT:
1081 case R600::SNE:
1082 case R600::SUBB_UINT:
1083 case R600::SUB_INT:
1084 case R600::XOR_INT: {
1085 // op: src0
1086 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
1087 Value |= (op & 0x600) << 1;
1088 Value |= (op & 0x1ff);
1089 // op: src0_rel
1090 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
1091 Value |= (op & 0x1) << 9;
1092 // op: src1
1093 op = getMachineOpValue(MI, MO: MI.getOperand(i: 12), Fixups, STI);
1094 Value |= (op & 0x600) << 14;
1095 Value |= (op & 0x1ff) << 13;
1096 // op: src1_rel
1097 op = getMachineOpValue(MI, MO: MI.getOperand(i: 14), Fixups, STI);
1098 Value |= (op & 0x1) << 22;
1099 // op: pred_sel
1100 op = getMachineOpValue(MI, MO: MI.getOperand(i: 18), Fixups, STI);
1101 Value |= (op & 0x3) << 29;
1102 // op: last
1103 op = getMachineOpValue(MI, MO: MI.getOperand(i: 17), Fixups, STI);
1104 Value |= (op & 0x1) << 31;
1105 // op: src0_neg
1106 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
1107 Value |= (op & 0x1) << 12;
1108 // op: src1_neg
1109 op = getMachineOpValue(MI, MO: MI.getOperand(i: 13), Fixups, STI);
1110 Value |= (op & 0x1) << 25;
1111 // op: dst
1112 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
1113 Value |= (op & 0x600) << 52;
1114 Value |= (op & 0x7f) << 53;
1115 // op: bank_swizzle
1116 op = getMachineOpValue(MI, MO: MI.getOperand(i: 20), Fixups, STI);
1117 Value |= (op & 0x7) << 50;
1118 // op: dst_rel
1119 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
1120 Value |= (op & 0x1) << 60;
1121 // op: clamp
1122 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
1123 Value |= (op & 0x1) << 63;
1124 // op: src0_abs
1125 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
1126 Value |= (op & 0x1) << 32;
1127 // op: src1_abs
1128 op = getMachineOpValue(MI, MO: MI.getOperand(i: 15), Fixups, STI);
1129 Value |= (op & 0x1) << 33;
1130 // op: update_exec_mask
1131 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
1132 Value |= (op & 0x1) << 34;
1133 // op: update_pred
1134 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
1135 Value |= (op & 0x1) << 35;
1136 // op: write
1137 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
1138 Value |= (op & 0x1) << 36;
1139 // op: omod
1140 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
1141 Value |= (op & 0x3) << 37;
1142 break;
1143 }
1144 case R600::INTERP_XY:
1145 case R600::INTERP_ZW: {
1146 // op: src0
1147 op = getMachineOpValue(MI, MO: MI.getOperand(i: 7), Fixups, STI);
1148 Value |= (op & 0x600) << 1;
1149 Value |= (op & 0x1ff);
1150 // op: src0_rel
1151 op = getMachineOpValue(MI, MO: MI.getOperand(i: 9), Fixups, STI);
1152 Value |= (op & 0x1) << 9;
1153 // op: src1
1154 op = getMachineOpValue(MI, MO: MI.getOperand(i: 12), Fixups, STI);
1155 Value |= (op & 0x600) << 14;
1156 Value |= (op & 0x1ff) << 13;
1157 // op: src1_rel
1158 op = getMachineOpValue(MI, MO: MI.getOperand(i: 14), Fixups, STI);
1159 Value |= (op & 0x1) << 22;
1160 // op: pred_sel
1161 op = getMachineOpValue(MI, MO: MI.getOperand(i: 18), Fixups, STI);
1162 Value |= (op & 0x3) << 29;
1163 // op: last
1164 op = getMachineOpValue(MI, MO: MI.getOperand(i: 17), Fixups, STI);
1165 Value |= (op & 0x1) << 31;
1166 // op: src0_neg
1167 op = getMachineOpValue(MI, MO: MI.getOperand(i: 8), Fixups, STI);
1168 Value |= (op & 0x1) << 12;
1169 // op: src1_neg
1170 op = getMachineOpValue(MI, MO: MI.getOperand(i: 13), Fixups, STI);
1171 Value |= (op & 0x1) << 25;
1172 // op: dst
1173 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
1174 Value |= (op & 0x600) << 52;
1175 Value |= (op & 0x7f) << 53;
1176 // op: dst_rel
1177 op = getMachineOpValue(MI, MO: MI.getOperand(i: 5), Fixups, STI);
1178 Value |= (op & 0x1) << 60;
1179 // op: clamp
1180 op = getMachineOpValue(MI, MO: MI.getOperand(i: 6), Fixups, STI);
1181 Value |= (op & 0x1) << 63;
1182 // op: src0_abs
1183 op = getMachineOpValue(MI, MO: MI.getOperand(i: 10), Fixups, STI);
1184 Value |= (op & 0x1) << 32;
1185 // op: src1_abs
1186 op = getMachineOpValue(MI, MO: MI.getOperand(i: 15), Fixups, STI);
1187 Value |= (op & 0x1) << 33;
1188 // op: update_exec_mask
1189 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
1190 Value |= (op & 0x1) << 34;
1191 // op: update_pred
1192 op = getMachineOpValue(MI, MO: MI.getOperand(i: 2), Fixups, STI);
1193 Value |= (op & 0x1) << 35;
1194 // op: write
1195 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
1196 Value |= (op & 0x1) << 36;
1197 // op: omod
1198 op = getMachineOpValue(MI, MO: MI.getOperand(i: 4), Fixups, STI);
1199 Value |= (op & 0x3) << 37;
1200 break;
1201 }
1202 case R600::VTX_READ_128_cm:
1203 case R600::VTX_READ_128_eg:
1204 case R600::VTX_READ_16_cm:
1205 case R600::VTX_READ_16_eg:
1206 case R600::VTX_READ_32_cm:
1207 case R600::VTX_READ_32_eg:
1208 case R600::VTX_READ_64_cm:
1209 case R600::VTX_READ_64_eg:
1210 case R600::VTX_READ_8_cm:
1211 case R600::VTX_READ_8_eg: {
1212 // op: src_gpr
1213 op = getMachineOpValue(MI, MO: MI.getOperand(i: 1), Fixups, STI);
1214 Value |= (op & 0x7f) << 16;
1215 // op: buffer_id
1216 op = getMachineOpValue(MI, MO: MI.getOperand(i: 3), Fixups, STI);
1217 Value |= (op & 0xff) << 8;
1218 // op: dst_gpr
1219 op = getMachineOpValue(MI, MO: MI.getOperand(i: 0), Fixups, STI);
1220 Value |= (op & 0x7f) << 32;
1221 break;
1222 }
1223 default:
1224 reportUnsupportedInst(Inst: MI);
1225 }
1226 return Value;
1227}
1228
1229#ifdef GET_OPERAND_BIT_OFFSET
1230#undef GET_OPERAND_BIT_OFFSET
1231
1232uint32_t R600MCCodeEmitter::getOperandBitOffset(const MCInst &MI,
1233 unsigned OpNum,
1234 const MCSubtargetInfo &STI) const {
1235 switch (MI.getOpcode()) {
1236 case R600::CF_CALL_FS_EG:
1237 case R600::CF_CALL_FS_R600:
1238 case R600::CF_END_CM:
1239 case R600::CF_END_EG:
1240 case R600::CF_END_R600:
1241 case R600::GROUP_BARRIER:
1242 case R600::INTERP_PAIR_XY:
1243 case R600::INTERP_PAIR_ZW:
1244 case R600::INTERP_VEC_LOAD:
1245 case R600::PAD: {
1246 break;
1247 }
1248 case R600::CF_TC_R600:
1249 case R600::CF_VC_R600: {
1250 switch (OpNum) {
1251 case 0:
1252 // op: ADDR
1253 return 0;
1254 case 1:
1255 // op: CNT
1256 return 42;
1257 }
1258 break;
1259 }
1260 case R600::CF_TC_EG:
1261 case R600::CF_VC_EG: {
1262 switch (OpNum) {
1263 case 0:
1264 // op: ADDR
1265 return 0;
1266 case 1:
1267 // op: COUNT
1268 return 42;
1269 }
1270 break;
1271 }
1272 case R600::CF_ALU:
1273 case R600::CF_ALU_BREAK:
1274 case R600::CF_ALU_CONTINUE:
1275 case R600::CF_ALU_ELSE_AFTER:
1276 case R600::CF_ALU_POP_AFTER:
1277 case R600::CF_ALU_PUSH_BEFORE: {
1278 switch (OpNum) {
1279 case 0:
1280 // op: ADDR
1281 return 0;
1282 case 1:
1283 // op: KCACHE_BANK0
1284 return 22;
1285 case 2:
1286 // op: KCACHE_BANK1
1287 return 26;
1288 case 3:
1289 // op: KCACHE_MODE0
1290 return 30;
1291 case 4:
1292 // op: KCACHE_MODE1
1293 return 32;
1294 case 5:
1295 // op: KCACHE_ADDR0
1296 return 34;
1297 case 6:
1298 // op: KCACHE_ADDR1
1299 return 42;
1300 case 7:
1301 // op: COUNT
1302 return 50;
1303 }
1304 break;
1305 }
1306 case R600::CF_ELSE_EG:
1307 case R600::CF_ELSE_R600:
1308 case R600::CF_JUMP_EG:
1309 case R600::CF_JUMP_R600:
1310 case R600::CF_PUSH_EG:
1311 case R600::POP_EG:
1312 case R600::POP_R600: {
1313 switch (OpNum) {
1314 case 0:
1315 // op: ADDR
1316 return 0;
1317 case 1:
1318 // op: POP_COUNT
1319 return 32;
1320 }
1321 break;
1322 }
1323 case R600::CF_CONTINUE_EG:
1324 case R600::CF_CONTINUE_R600:
1325 case R600::CF_PUSH_ELSE_R600:
1326 case R600::END_LOOP_EG:
1327 case R600::END_LOOP_R600:
1328 case R600::LOOP_BREAK_EG:
1329 case R600::LOOP_BREAK_R600:
1330 case R600::WHILE_LOOP_EG:
1331 case R600::WHILE_LOOP_R600: {
1332 switch (OpNum) {
1333 case 0:
1334 // op: ADDR
1335 return 0;
1336 }
1337 break;
1338 }
1339 case R600::ALU_CLAUSE:
1340 case R600::FETCH_CLAUSE: {
1341 switch (OpNum) {
1342 case 0:
1343 // op: addr
1344 return 0;
1345 }
1346 break;
1347 }
1348 case R600::TEX_VTX_CONSTBUF:
1349 case R600::TEX_VTX_TEXBUF: {
1350 switch (OpNum) {
1351 case 0:
1352 // op: dst_gpr
1353 return 32;
1354 case 1:
1355 // op: src_gpr
1356 return 16;
1357 case 3:
1358 // op: buffer_id
1359 return 8;
1360 }
1361 break;
1362 }
1363 case R600::LITERALS: {
1364 switch (OpNum) {
1365 case 0:
1366 // op: literal1
1367 return 0;
1368 case 1:
1369 // op: literal2
1370 return 32;
1371 }
1372 break;
1373 }
1374 case R600::RAT_WRITE_CACHELESS_128_eg:
1375 case R600::RAT_WRITE_CACHELESS_32_eg:
1376 case R600::RAT_WRITE_CACHELESS_64_eg: {
1377 switch (OpNum) {
1378 case 0:
1379 // op: rw_gpr
1380 return 15;
1381 case 1:
1382 // op: index_gpr
1383 return 23;
1384 case 2:
1385 // op: eop
1386 return 53;
1387 }
1388 break;
1389 }
1390 case R600::RAT_MSKOR:
1391 case R600::RAT_STORE_DWORD128:
1392 case R600::RAT_STORE_DWORD32:
1393 case R600::RAT_STORE_DWORD64: {
1394 switch (OpNum) {
1395 case 0:
1396 // op: rw_gpr
1397 return 15;
1398 case 1:
1399 // op: index_gpr
1400 return 23;
1401 }
1402 break;
1403 }
1404 case R600::LDS_CMPST: {
1405 switch (OpNum) {
1406 case 0:
1407 // op: src0
1408 return 0;
1409 case 1:
1410 // op: src0_rel
1411 return 9;
1412 case 3:
1413 // op: src1
1414 return 13;
1415 case 4:
1416 // op: src1_rel
1417 return 22;
1418 case 10:
1419 // op: pred_sel
1420 return 29;
1421 case 9:
1422 // op: last
1423 return 31;
1424 case 6:
1425 // op: src2
1426 return 32;
1427 case 7:
1428 // op: src2_rel
1429 return 41;
1430 case 11:
1431 // op: bank_swizzle
1432 return 50;
1433 }
1434 break;
1435 }
1436 case R600::LDS_ADD:
1437 case R600::LDS_AND:
1438 case R600::LDS_BYTE_WRITE:
1439 case R600::LDS_MAX_INT:
1440 case R600::LDS_MAX_UINT:
1441 case R600::LDS_MIN_INT:
1442 case R600::LDS_MIN_UINT:
1443 case R600::LDS_OR:
1444 case R600::LDS_SHORT_WRITE:
1445 case R600::LDS_SUB:
1446 case R600::LDS_WRITE:
1447 case R600::LDS_WRXCHG:
1448 case R600::LDS_XOR: {
1449 switch (OpNum) {
1450 case 0:
1451 // op: src0
1452 return 0;
1453 case 1:
1454 // op: src0_rel
1455 return 9;
1456 case 3:
1457 // op: src1
1458 return 13;
1459 case 4:
1460 // op: src1_rel
1461 return 22;
1462 case 7:
1463 // op: pred_sel
1464 return 29;
1465 case 6:
1466 // op: last
1467 return 31;
1468 case 8:
1469 // op: bank_swizzle
1470 return 50;
1471 }
1472 break;
1473 }
1474 case R600::TEX_GET_GRADIENTS_H:
1475 case R600::TEX_GET_GRADIENTS_V:
1476 case R600::TEX_GET_TEXTURE_RESINFO:
1477 case R600::TEX_LD:
1478 case R600::TEX_LDPTR:
1479 case R600::TEX_SAMPLE:
1480 case R600::TEX_SAMPLE_C:
1481 case R600::TEX_SAMPLE_C_G:
1482 case R600::TEX_SAMPLE_C_L:
1483 case R600::TEX_SAMPLE_C_LB:
1484 case R600::TEX_SAMPLE_G:
1485 case R600::TEX_SAMPLE_L:
1486 case R600::TEX_SAMPLE_LB:
1487 case R600::TEX_SET_GRADIENTS_H:
1488 case R600::TEX_SET_GRADIENTS_V: {
1489 switch (OpNum) {
1490 case 13:
1491 // op: RESOURCE_ID
1492 return 8;
1493 case 1:
1494 // op: SRC_GPR
1495 return 16;
1496 case 0:
1497 // op: DST_GPR
1498 return 32;
1499 case 9:
1500 // op: DST_SEL_X
1501 return 41;
1502 case 10:
1503 // op: DST_SEL_Y
1504 return 44;
1505 case 11:
1506 // op: DST_SEL_Z
1507 return 47;
1508 case 12:
1509 // op: DST_SEL_W
1510 return 50;
1511 case 15:
1512 // op: COORD_TYPE_X
1513 return 60;
1514 case 16:
1515 // op: COORD_TYPE_Y
1516 return 61;
1517 case 17:
1518 // op: COORD_TYPE_Z
1519 return 62;
1520 case 18:
1521 // op: COORD_TYPE_W
1522 return 63;
1523 }
1524 break;
1525 }
1526 case R600::RAT_ATOMIC_ADD_NORET:
1527 case R600::RAT_ATOMIC_ADD_RTN:
1528 case R600::RAT_ATOMIC_AND_NORET:
1529 case R600::RAT_ATOMIC_AND_RTN:
1530 case R600::RAT_ATOMIC_CMPXCHG_INT_NORET:
1531 case R600::RAT_ATOMIC_CMPXCHG_INT_RTN:
1532 case R600::RAT_ATOMIC_DEC_UINT_NORET:
1533 case R600::RAT_ATOMIC_DEC_UINT_RTN:
1534 case R600::RAT_ATOMIC_INC_UINT_NORET:
1535 case R600::RAT_ATOMIC_INC_UINT_RTN:
1536 case R600::RAT_ATOMIC_MAX_INT_NORET:
1537 case R600::RAT_ATOMIC_MAX_INT_RTN:
1538 case R600::RAT_ATOMIC_MAX_UINT_NORET:
1539 case R600::RAT_ATOMIC_MAX_UINT_RTN:
1540 case R600::RAT_ATOMIC_MIN_INT_NORET:
1541 case R600::RAT_ATOMIC_MIN_INT_RTN:
1542 case R600::RAT_ATOMIC_MIN_UINT_NORET:
1543 case R600::RAT_ATOMIC_MIN_UINT_RTN:
1544 case R600::RAT_ATOMIC_OR_NORET:
1545 case R600::RAT_ATOMIC_OR_RTN:
1546 case R600::RAT_ATOMIC_RSUB_NORET:
1547 case R600::RAT_ATOMIC_RSUB_RTN:
1548 case R600::RAT_ATOMIC_SUB_NORET:
1549 case R600::RAT_ATOMIC_SUB_RTN:
1550 case R600::RAT_ATOMIC_XCHG_INT_NORET:
1551 case R600::RAT_ATOMIC_XCHG_INT_RTN:
1552 case R600::RAT_ATOMIC_XOR_NORET:
1553 case R600::RAT_ATOMIC_XOR_RTN: {
1554 switch (OpNum) {
1555 case 1:
1556 // op: rw_gpr
1557 return 15;
1558 case 2:
1559 // op: index_gpr
1560 return 23;
1561 }
1562 break;
1563 }
1564 case R600::LDS_CMPST_RET: {
1565 switch (OpNum) {
1566 case 1:
1567 // op: src0
1568 return 0;
1569 case 2:
1570 // op: src0_rel
1571 return 9;
1572 case 4:
1573 // op: src1
1574 return 13;
1575 case 5:
1576 // op: src1_rel
1577 return 22;
1578 case 11:
1579 // op: pred_sel
1580 return 29;
1581 case 10:
1582 // op: last
1583 return 31;
1584 case 7:
1585 // op: src2
1586 return 32;
1587 case 8:
1588 // op: src2_rel
1589 return 41;
1590 case 12:
1591 // op: bank_swizzle
1592 return 50;
1593 }
1594 break;
1595 }
1596 case R600::LDS_ADD_RET:
1597 case R600::LDS_AND_RET:
1598 case R600::LDS_MAX_INT_RET:
1599 case R600::LDS_MAX_UINT_RET:
1600 case R600::LDS_MIN_INT_RET:
1601 case R600::LDS_MIN_UINT_RET:
1602 case R600::LDS_OR_RET:
1603 case R600::LDS_SUB_RET:
1604 case R600::LDS_WRXCHG_RET:
1605 case R600::LDS_XOR_RET: {
1606 switch (OpNum) {
1607 case 1:
1608 // op: src0
1609 return 0;
1610 case 2:
1611 // op: src0_rel
1612 return 9;
1613 case 4:
1614 // op: src1
1615 return 13;
1616 case 5:
1617 // op: src1_rel
1618 return 22;
1619 case 8:
1620 // op: pred_sel
1621 return 29;
1622 case 7:
1623 // op: last
1624 return 31;
1625 case 9:
1626 // op: bank_swizzle
1627 return 50;
1628 }
1629 break;
1630 }
1631 case R600::LDS_BYTE_READ_RET:
1632 case R600::LDS_READ_RET:
1633 case R600::LDS_SHORT_READ_RET:
1634 case R600::LDS_UBYTE_READ_RET:
1635 case R600::LDS_USHORT_READ_RET: {
1636 switch (OpNum) {
1637 case 1:
1638 // op: src0
1639 return 0;
1640 case 2:
1641 // op: src0_rel
1642 return 9;
1643 case 5:
1644 // op: pred_sel
1645 return 29;
1646 case 4:
1647 // op: last
1648 return 31;
1649 case 6:
1650 // op: bank_swizzle
1651 return 50;
1652 }
1653 break;
1654 }
1655 case R600::VTX_READ_128_cm:
1656 case R600::VTX_READ_128_eg:
1657 case R600::VTX_READ_16_cm:
1658 case R600::VTX_READ_16_eg:
1659 case R600::VTX_READ_32_cm:
1660 case R600::VTX_READ_32_eg:
1661 case R600::VTX_READ_64_cm:
1662 case R600::VTX_READ_64_eg:
1663 case R600::VTX_READ_8_cm:
1664 case R600::VTX_READ_8_eg: {
1665 switch (OpNum) {
1666 case 1:
1667 // op: src_gpr
1668 return 16;
1669 case 3:
1670 // op: buffer_id
1671 return 8;
1672 case 0:
1673 // op: dst_gpr
1674 return 32;
1675 }
1676 break;
1677 }
1678 case R600::EG_ExportBuf: {
1679 switch (OpNum) {
1680 case 2:
1681 // op: arraybase
1682 return 0;
1683 case 1:
1684 // op: type
1685 return 13;
1686 case 0:
1687 // op: gpr
1688 return 15;
1689 case 3:
1690 // op: arraySize
1691 return 32;
1692 case 4:
1693 // op: compMask
1694 return 44;
1695 case 6:
1696 // op: eop
1697 return 53;
1698 case 5:
1699 // op: inst
1700 return 54;
1701 }
1702 break;
1703 }
1704 case R600::R600_ExportBuf: {
1705 switch (OpNum) {
1706 case 2:
1707 // op: arraybase
1708 return 0;
1709 case 1:
1710 // op: type
1711 return 13;
1712 case 0:
1713 // op: gpr
1714 return 15;
1715 case 3:
1716 // op: arraySize
1717 return 32;
1718 case 4:
1719 // op: compMask
1720 return 44;
1721 case 6:
1722 // op: eop
1723 return 53;
1724 case 5:
1725 // op: inst
1726 return 55;
1727 }
1728 break;
1729 }
1730 case R600::EG_ExportSwz: {
1731 switch (OpNum) {
1732 case 2:
1733 // op: arraybase
1734 return 0;
1735 case 1:
1736 // op: type
1737 return 13;
1738 case 0:
1739 // op: gpr
1740 return 15;
1741 case 3:
1742 // op: sw_x
1743 return 32;
1744 case 4:
1745 // op: sw_y
1746 return 35;
1747 case 5:
1748 // op: sw_z
1749 return 38;
1750 case 6:
1751 // op: sw_w
1752 return 41;
1753 case 8:
1754 // op: eop
1755 return 53;
1756 case 7:
1757 // op: inst
1758 return 54;
1759 }
1760 break;
1761 }
1762 case R600::R600_ExportSwz: {
1763 switch (OpNum) {
1764 case 2:
1765 // op: arraybase
1766 return 0;
1767 case 1:
1768 // op: type
1769 return 13;
1770 case 0:
1771 // op: gpr
1772 return 15;
1773 case 3:
1774 // op: sw_x
1775 return 32;
1776 case 4:
1777 // op: sw_y
1778 return 35;
1779 case 5:
1780 // op: sw_z
1781 return 38;
1782 case 6:
1783 // op: sw_w
1784 return 41;
1785 case 8:
1786 // op: eop
1787 return 53;
1788 case 7:
1789 // op: inst
1790 return 55;
1791 }
1792 break;
1793 }
1794 case R600::RAT_STORE_TYPED_eg: {
1795 switch (OpNum) {
1796 case 2:
1797 // op: rat_id
1798 return 0;
1799 case 0:
1800 // op: rw_gpr
1801 return 15;
1802 case 1:
1803 // op: index_gpr
1804 return 23;
1805 case 3:
1806 // op: eop
1807 return 53;
1808 }
1809 break;
1810 }
1811 case R600::RAT_STORE_TYPED_cm: {
1812 switch (OpNum) {
1813 case 2:
1814 // op: rat_id
1815 return 0;
1816 case 0:
1817 // op: rw_gpr
1818 return 15;
1819 case 1:
1820 // op: index_gpr
1821 return 23;
1822 }
1823 break;
1824 }
1825 case R600::BFE_INT_eg:
1826 case R600::BFE_UINT_eg:
1827 case R600::BFI_INT_eg:
1828 case R600::BIT_ALIGN_INT_eg:
1829 case R600::CNDE_INT:
1830 case R600::CNDE_eg:
1831 case R600::CNDE_r600:
1832 case R600::CNDGE_INT:
1833 case R600::CNDGE_eg:
1834 case R600::CNDGE_r600:
1835 case R600::CNDGT_INT:
1836 case R600::CNDGT_eg:
1837 case R600::CNDGT_r600:
1838 case R600::FMA_eg:
1839 case R600::MULADD_IEEE_eg:
1840 case R600::MULADD_IEEE_r600:
1841 case R600::MULADD_INT24_cm:
1842 case R600::MULADD_UINT24_eg:
1843 case R600::MULADD_eg:
1844 case R600::MULADD_r600:
1845 case R600::MUL_LIT_eg:
1846 case R600::MUL_LIT_r600: {
1847 switch (OpNum) {
1848 case 3:
1849 // op: src0
1850 return 0;
1851 case 5:
1852 // op: src0_rel
1853 return 9;
1854 case 7:
1855 // op: src1
1856 return 13;
1857 case 9:
1858 // op: src1_rel
1859 return 22;
1860 case 16:
1861 // op: pred_sel
1862 return 29;
1863 case 15:
1864 // op: last
1865 return 31;
1866 case 4:
1867 // op: src0_neg
1868 return 12;
1869 case 8:
1870 // op: src1_neg
1871 return 25;
1872 case 0:
1873 // op: dst
1874 return 53;
1875 case 18:
1876 // op: bank_swizzle
1877 return 50;
1878 case 1:
1879 // op: dst_rel
1880 return 60;
1881 case 2:
1882 // op: clamp
1883 return 63;
1884 case 11:
1885 // op: src2
1886 return 32;
1887 case 13:
1888 // op: src2_rel
1889 return 41;
1890 case 12:
1891 // op: src2_neg
1892 return 44;
1893 }
1894 break;
1895 }
1896 case R600::BCNT_INT:
1897 case R600::CEIL:
1898 case R600::COS_cm:
1899 case R600::COS_eg:
1900 case R600::COS_r600:
1901 case R600::COS_r700:
1902 case R600::EXP_IEEE_cm:
1903 case R600::EXP_IEEE_eg:
1904 case R600::EXP_IEEE_r600:
1905 case R600::FFBH_UINT:
1906 case R600::FFBL_INT:
1907 case R600::FLOOR:
1908 case R600::FLT16_TO_FLT32:
1909 case R600::FLT32_TO_FLT16:
1910 case R600::FLT_TO_INT_eg:
1911 case R600::FLT_TO_INT_r600:
1912 case R600::FLT_TO_UINT_eg:
1913 case R600::FLT_TO_UINT_r600:
1914 case R600::FRACT:
1915 case R600::INTERP_LOAD_P0:
1916 case R600::INT_TO_FLT_eg:
1917 case R600::INT_TO_FLT_r600:
1918 case R600::LOG_CLAMPED_eg:
1919 case R600::LOG_CLAMPED_r600:
1920 case R600::LOG_IEEE_cm:
1921 case R600::LOG_IEEE_eg:
1922 case R600::LOG_IEEE_r600:
1923 case R600::MOV:
1924 case R600::MOVA_INT_eg:
1925 case R600::NOT_INT:
1926 case R600::RECIPSQRT_CLAMPED_cm:
1927 case R600::RECIPSQRT_CLAMPED_eg:
1928 case R600::RECIPSQRT_CLAMPED_r600:
1929 case R600::RECIPSQRT_IEEE_cm:
1930 case R600::RECIPSQRT_IEEE_eg:
1931 case R600::RECIPSQRT_IEEE_r600:
1932 case R600::RECIP_CLAMPED_cm:
1933 case R600::RECIP_CLAMPED_eg:
1934 case R600::RECIP_CLAMPED_r600:
1935 case R600::RECIP_IEEE_cm:
1936 case R600::RECIP_IEEE_eg:
1937 case R600::RECIP_IEEE_r600:
1938 case R600::RECIP_UINT_eg:
1939 case R600::RECIP_UINT_r600:
1940 case R600::RNDNE:
1941 case R600::SIN_cm:
1942 case R600::SIN_eg:
1943 case R600::SIN_r600:
1944 case R600::SIN_r700:
1945 case R600::TRUNC:
1946 case R600::UINT_TO_FLT_eg:
1947 case R600::UINT_TO_FLT_r600: {
1948 switch (OpNum) {
1949 case 5:
1950 // op: src0
1951 return 0;
1952 case 7:
1953 // op: src0_rel
1954 return 9;
1955 case 11:
1956 // op: pred_sel
1957 return 29;
1958 case 10:
1959 // op: last
1960 return 31;
1961 case 6:
1962 // op: src0_neg
1963 return 12;
1964 case 0:
1965 // op: dst
1966 return 53;
1967 case 13:
1968 // op: bank_swizzle
1969 return 50;
1970 case 3:
1971 // op: dst_rel
1972 return 60;
1973 case 4:
1974 // op: clamp
1975 return 63;
1976 case 8:
1977 // op: src0_abs
1978 return 32;
1979 case 1:
1980 // op: write
1981 return 36;
1982 case 2:
1983 // op: omod
1984 return 37;
1985 }
1986 break;
1987 }
1988 case R600::ADD:
1989 case R600::ADDC_UINT:
1990 case R600::ADD_INT:
1991 case R600::AND_INT:
1992 case R600::ASHR_eg:
1993 case R600::ASHR_r600:
1994 case R600::BFM_INT_eg:
1995 case R600::CUBE_eg_real:
1996 case R600::CUBE_r600_real:
1997 case R600::DOT4_eg:
1998 case R600::DOT4_r600:
1999 case R600::KILLGT:
2000 case R600::LSHL_eg:
2001 case R600::LSHL_r600:
2002 case R600::LSHR_eg:
2003 case R600::LSHR_r600:
2004 case R600::MAX:
2005 case R600::MAX_DX10:
2006 case R600::MAX_INT:
2007 case R600::MAX_UINT:
2008 case R600::MIN:
2009 case R600::MIN_DX10:
2010 case R600::MIN_INT:
2011 case R600::MIN_UINT:
2012 case R600::MUL:
2013 case R600::MULHI_INT_cm:
2014 case R600::MULHI_INT_cm24:
2015 case R600::MULHI_INT_eg:
2016 case R600::MULHI_INT_r600:
2017 case R600::MULHI_UINT24_eg:
2018 case R600::MULHI_UINT_cm:
2019 case R600::MULHI_UINT_cm24:
2020 case R600::MULHI_UINT_eg:
2021 case R600::MULHI_UINT_r600:
2022 case R600::MULLO_INT_cm:
2023 case R600::MULLO_INT_eg:
2024 case R600::MULLO_INT_r600:
2025 case R600::MULLO_UINT_cm:
2026 case R600::MULLO_UINT_eg:
2027 case R600::MULLO_UINT_r600:
2028 case R600::MUL_IEEE:
2029 case R600::MUL_INT24_cm:
2030 case R600::MUL_UINT24_eg:
2031 case R600::OR_INT:
2032 case R600::PRED_SETE:
2033 case R600::PRED_SETE_INT:
2034 case R600::PRED_SETGE:
2035 case R600::PRED_SETGE_INT:
2036 case R600::PRED_SETGT:
2037 case R600::PRED_SETGT_INT:
2038 case R600::PRED_SETNE:
2039 case R600::PRED_SETNE_INT:
2040 case R600::SETE:
2041 case R600::SETE_DX10:
2042 case R600::SETE_INT:
2043 case R600::SETGE_DX10:
2044 case R600::SETGE_INT:
2045 case R600::SETGE_UINT:
2046 case R600::SETGT_DX10:
2047 case R600::SETGT_INT:
2048 case R600::SETGT_UINT:
2049 case R600::SETNE_DX10:
2050 case R600::SETNE_INT:
2051 case R600::SGE:
2052 case R600::SGT:
2053 case R600::SNE:
2054 case R600::SUBB_UINT:
2055 case R600::SUB_INT:
2056 case R600::XOR_INT: {
2057 switch (OpNum) {
2058 case 7:
2059 // op: src0
2060 return 0;
2061 case 9:
2062 // op: src0_rel
2063 return 9;
2064 case 12:
2065 // op: src1
2066 return 13;
2067 case 14:
2068 // op: src1_rel
2069 return 22;
2070 case 18:
2071 // op: pred_sel
2072 return 29;
2073 case 17:
2074 // op: last
2075 return 31;
2076 case 8:
2077 // op: src0_neg
2078 return 12;
2079 case 13:
2080 // op: src1_neg
2081 return 25;
2082 case 0:
2083 // op: dst
2084 return 53;
2085 case 20:
2086 // op: bank_swizzle
2087 return 50;
2088 case 5:
2089 // op: dst_rel
2090 return 60;
2091 case 6:
2092 // op: clamp
2093 return 63;
2094 case 10:
2095 // op: src0_abs
2096 return 32;
2097 case 15:
2098 // op: src1_abs
2099 return 33;
2100 case 1:
2101 // op: update_exec_mask
2102 return 34;
2103 case 2:
2104 // op: update_pred
2105 return 35;
2106 case 3:
2107 // op: write
2108 return 36;
2109 case 4:
2110 // op: omod
2111 return 37;
2112 }
2113 break;
2114 }
2115 case R600::INTERP_XY:
2116 case R600::INTERP_ZW: {
2117 switch (OpNum) {
2118 case 7:
2119 // op: src0
2120 return 0;
2121 case 9:
2122 // op: src0_rel
2123 return 9;
2124 case 12:
2125 // op: src1
2126 return 13;
2127 case 14:
2128 // op: src1_rel
2129 return 22;
2130 case 18:
2131 // op: pred_sel
2132 return 29;
2133 case 17:
2134 // op: last
2135 return 31;
2136 case 8:
2137 // op: src0_neg
2138 return 12;
2139 case 13:
2140 // op: src1_neg
2141 return 25;
2142 case 0:
2143 // op: dst
2144 return 53;
2145 case 5:
2146 // op: dst_rel
2147 return 60;
2148 case 6:
2149 // op: clamp
2150 return 63;
2151 case 10:
2152 // op: src0_abs
2153 return 32;
2154 case 15:
2155 // op: src1_abs
2156 return 33;
2157 case 1:
2158 // op: update_exec_mask
2159 return 34;
2160 case 2:
2161 // op: update_pred
2162 return 35;
2163 case 3:
2164 // op: write
2165 return 36;
2166 case 4:
2167 // op: omod
2168 return 37;
2169 }
2170 break;
2171 }
2172 default:
2173 reportUnsupportedInst(MI);
2174 }
2175 reportUnsupportedOperand(MI, OpNum);
2176}
2177
2178#endif // GET_OPERAND_BIT_OFFSET
2179
2180