1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2010 Intel Corporation
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker #include "brw_cfg.h"
7*61046927SAndroid Build Coastguard Worker #include "brw_disasm.h"
8*61046927SAndroid Build Coastguard Worker #include "brw_fs.h"
9*61046927SAndroid Build Coastguard Worker #include "brw_private.h"
10*61046927SAndroid Build Coastguard Worker #include "dev/intel_debug.h"
11*61046927SAndroid Build Coastguard Worker #include "util/half_float.h"
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker using namespace brw;
14*61046927SAndroid Build Coastguard Worker
15*61046927SAndroid Build Coastguard Worker void
brw_print_instructions_to_file(const fs_visitor & s,FILE * file)16*61046927SAndroid Build Coastguard Worker brw_print_instructions_to_file(const fs_visitor &s, FILE *file)
17*61046927SAndroid Build Coastguard Worker {
18*61046927SAndroid Build Coastguard Worker if (s.cfg && s.grf_used == 0) {
19*61046927SAndroid Build Coastguard Worker const brw::def_analysis &defs = s.def_analysis.require();
20*61046927SAndroid Build Coastguard Worker const register_pressure *rp =
21*61046927SAndroid Build Coastguard Worker INTEL_DEBUG(DEBUG_REG_PRESSURE) ? &s.regpressure_analysis.require() : NULL;
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker unsigned ip = 0, max_pressure = 0;
24*61046927SAndroid Build Coastguard Worker unsigned cf_count = 0;
25*61046927SAndroid Build Coastguard Worker foreach_block(block, s.cfg) {
26*61046927SAndroid Build Coastguard Worker fprintf(file, "START B%d", block->num);
27*61046927SAndroid Build Coastguard Worker foreach_list_typed(bblock_link, link, link, &block->parents) {
28*61046927SAndroid Build Coastguard Worker fprintf(file, " <%cB%d",
29*61046927SAndroid Build Coastguard Worker link->kind == bblock_link_logical ? '-' : '~',
30*61046927SAndroid Build Coastguard Worker link->block->num);
31*61046927SAndroid Build Coastguard Worker }
32*61046927SAndroid Build Coastguard Worker fprintf(file, "\n");
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker foreach_inst_in_block(fs_inst, inst, block) {
35*61046927SAndroid Build Coastguard Worker if (inst->is_control_flow_end())
36*61046927SAndroid Build Coastguard Worker cf_count -= 1;
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker if (rp) {
39*61046927SAndroid Build Coastguard Worker max_pressure = MAX2(max_pressure, rp->regs_live_at_ip[ip]);
40*61046927SAndroid Build Coastguard Worker fprintf(file, "{%3d} ", rp->regs_live_at_ip[ip]);
41*61046927SAndroid Build Coastguard Worker }
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker for (unsigned i = 0; i < cf_count; i++)
44*61046927SAndroid Build Coastguard Worker fprintf(file, " ");
45*61046927SAndroid Build Coastguard Worker brw_print_instruction(s, inst, file, &defs);
46*61046927SAndroid Build Coastguard Worker ip++;
47*61046927SAndroid Build Coastguard Worker
48*61046927SAndroid Build Coastguard Worker if (inst->is_control_flow_begin())
49*61046927SAndroid Build Coastguard Worker cf_count += 1;
50*61046927SAndroid Build Coastguard Worker }
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard Worker fprintf(file, "END B%d", block->num);
53*61046927SAndroid Build Coastguard Worker foreach_list_typed(bblock_link, link, link, &block->children) {
54*61046927SAndroid Build Coastguard Worker fprintf(file, " %c>B%d",
55*61046927SAndroid Build Coastguard Worker link->kind == bblock_link_logical ? '-' : '~',
56*61046927SAndroid Build Coastguard Worker link->block->num);
57*61046927SAndroid Build Coastguard Worker }
58*61046927SAndroid Build Coastguard Worker fprintf(file, "\n");
59*61046927SAndroid Build Coastguard Worker }
60*61046927SAndroid Build Coastguard Worker if (rp)
61*61046927SAndroid Build Coastguard Worker fprintf(file, "Maximum %3d registers live at once.\n", max_pressure);
62*61046927SAndroid Build Coastguard Worker } else if (s.cfg && exec_list_is_empty(&s.instructions)) {
63*61046927SAndroid Build Coastguard Worker foreach_block_and_inst(block, fs_inst, inst, s.cfg) {
64*61046927SAndroid Build Coastguard Worker brw_print_instruction(s, inst, file);
65*61046927SAndroid Build Coastguard Worker }
66*61046927SAndroid Build Coastguard Worker } else {
67*61046927SAndroid Build Coastguard Worker foreach_in_list(fs_inst, inst, &s.instructions) {
68*61046927SAndroid Build Coastguard Worker brw_print_instruction(s, inst, file);
69*61046927SAndroid Build Coastguard Worker }
70*61046927SAndroid Build Coastguard Worker }
71*61046927SAndroid Build Coastguard Worker }
72*61046927SAndroid Build Coastguard Worker
73*61046927SAndroid Build Coastguard Worker void
brw_print_instructions(const fs_visitor & s,const char * name)74*61046927SAndroid Build Coastguard Worker brw_print_instructions(const fs_visitor &s, const char *name)
75*61046927SAndroid Build Coastguard Worker {
76*61046927SAndroid Build Coastguard Worker FILE *file = stderr;
77*61046927SAndroid Build Coastguard Worker if (name && __normal_user()) {
78*61046927SAndroid Build Coastguard Worker file = fopen(name, "w");
79*61046927SAndroid Build Coastguard Worker if (!file)
80*61046927SAndroid Build Coastguard Worker file = stderr;
81*61046927SAndroid Build Coastguard Worker }
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker brw_print_instructions_to_file(s, file);
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard Worker if (file != stderr) {
86*61046927SAndroid Build Coastguard Worker fclose(file);
87*61046927SAndroid Build Coastguard Worker }
88*61046927SAndroid Build Coastguard Worker }
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker static const char *
brw_instruction_name(const struct brw_isa_info * isa,enum opcode op)91*61046927SAndroid Build Coastguard Worker brw_instruction_name(const struct brw_isa_info *isa, enum opcode op)
92*61046927SAndroid Build Coastguard Worker {
93*61046927SAndroid Build Coastguard Worker const struct intel_device_info *devinfo = isa->devinfo;
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker switch (op) {
96*61046927SAndroid Build Coastguard Worker case 0 ... NUM_BRW_OPCODES - 1:
97*61046927SAndroid Build Coastguard Worker /* The DO instruction doesn't exist on Gfx9+, but we use it to mark the
98*61046927SAndroid Build Coastguard Worker * start of a loop in the IR.
99*61046927SAndroid Build Coastguard Worker */
100*61046927SAndroid Build Coastguard Worker if (op == BRW_OPCODE_DO)
101*61046927SAndroid Build Coastguard Worker return "do";
102*61046927SAndroid Build Coastguard Worker
103*61046927SAndroid Build Coastguard Worker /* DPAS instructions may transiently exist on platforms that do not
104*61046927SAndroid Build Coastguard Worker * support DPAS. They will eventually be lowered, but in the meantime it
105*61046927SAndroid Build Coastguard Worker * must be possible to query the instruction name.
106*61046927SAndroid Build Coastguard Worker */
107*61046927SAndroid Build Coastguard Worker if (devinfo->verx10 < 125 && op == BRW_OPCODE_DPAS)
108*61046927SAndroid Build Coastguard Worker return "dpas";
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker assert(brw_opcode_desc(isa, op)->name);
111*61046927SAndroid Build Coastguard Worker return brw_opcode_desc(isa, op)->name;
112*61046927SAndroid Build Coastguard Worker case FS_OPCODE_FB_WRITE_LOGICAL:
113*61046927SAndroid Build Coastguard Worker return "fb_write_logical";
114*61046927SAndroid Build Coastguard Worker case FS_OPCODE_FB_READ_LOGICAL:
115*61046927SAndroid Build Coastguard Worker return "fb_read_logical";
116*61046927SAndroid Build Coastguard Worker
117*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_RCP:
118*61046927SAndroid Build Coastguard Worker return "rcp";
119*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_RSQ:
120*61046927SAndroid Build Coastguard Worker return "rsq";
121*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SQRT:
122*61046927SAndroid Build Coastguard Worker return "sqrt";
123*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_EXP2:
124*61046927SAndroid Build Coastguard Worker return "exp2";
125*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_LOG2:
126*61046927SAndroid Build Coastguard Worker return "log2";
127*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_POW:
128*61046927SAndroid Build Coastguard Worker return "pow";
129*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_INT_QUOTIENT:
130*61046927SAndroid Build Coastguard Worker return "int_quot";
131*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_INT_REMAINDER:
132*61046927SAndroid Build Coastguard Worker return "int_rem";
133*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SIN:
134*61046927SAndroid Build Coastguard Worker return "sin";
135*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_COS:
136*61046927SAndroid Build Coastguard Worker return "cos";
137*61046927SAndroid Build Coastguard Worker
138*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SEND:
139*61046927SAndroid Build Coastguard Worker return "send";
140*61046927SAndroid Build Coastguard Worker
141*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_UNDEF:
142*61046927SAndroid Build Coastguard Worker return "undef";
143*61046927SAndroid Build Coastguard Worker
144*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TEX_LOGICAL:
145*61046927SAndroid Build Coastguard Worker return "tex_logical";
146*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXD_LOGICAL:
147*61046927SAndroid Build Coastguard Worker return "txd_logical";
148*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXF_LOGICAL:
149*61046927SAndroid Build Coastguard Worker return "txf_logical";
150*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXL_LOGICAL:
151*61046927SAndroid Build Coastguard Worker return "txl_logical";
152*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXS_LOGICAL:
153*61046927SAndroid Build Coastguard Worker return "txs_logical";
154*61046927SAndroid Build Coastguard Worker case FS_OPCODE_TXB_LOGICAL:
155*61046927SAndroid Build Coastguard Worker return "txb_logical";
156*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXF_CMS_W_LOGICAL:
157*61046927SAndroid Build Coastguard Worker return "txf_cms_w_logical";
158*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXF_CMS_W_GFX12_LOGICAL:
159*61046927SAndroid Build Coastguard Worker return "txf_cms_w_gfx12_logical";
160*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TXF_MCS_LOGICAL:
161*61046927SAndroid Build Coastguard Worker return "txf_mcs_logical";
162*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_LOD_LOGICAL:
163*61046927SAndroid Build Coastguard Worker return "lod_logical";
164*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_LOGICAL:
165*61046927SAndroid Build Coastguard Worker return "tg4_logical";
166*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_OFFSET_LOGICAL:
167*61046927SAndroid Build Coastguard Worker return "tg4_offset_logical";
168*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_OFFSET_LOD_LOGICAL:
169*61046927SAndroid Build Coastguard Worker return "tg4_offset_lod_logical";
170*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_OFFSET_BIAS_LOGICAL:
171*61046927SAndroid Build Coastguard Worker return "tg4_offset_bias_logical";
172*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_BIAS_LOGICAL:
173*61046927SAndroid Build Coastguard Worker return "tg4_b_logical";
174*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_EXPLICIT_LOD_LOGICAL:
175*61046927SAndroid Build Coastguard Worker return "tg4_l_logical";
176*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_TG4_IMPLICIT_LOD_LOGICAL:
177*61046927SAndroid Build Coastguard Worker return "tg4_i_logical";
178*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SAMPLEINFO_LOGICAL:
179*61046927SAndroid Build Coastguard Worker return "sampleinfo_logical";
180*61046927SAndroid Build Coastguard Worker
181*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_IMAGE_SIZE_LOGICAL:
182*61046927SAndroid Build Coastguard Worker return "image_size_logical";
183*61046927SAndroid Build Coastguard Worker
184*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MEMORY_FENCE:
185*61046927SAndroid Build Coastguard Worker return "memory_fence";
186*61046927SAndroid Build Coastguard Worker case FS_OPCODE_SCHEDULING_FENCE:
187*61046927SAndroid Build Coastguard Worker return "scheduling_fence";
188*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_INTERLOCK:
189*61046927SAndroid Build Coastguard Worker /* For an interlock we actually issue a memory fence via sendc. */
190*61046927SAndroid Build Coastguard Worker return "interlock";
191*61046927SAndroid Build Coastguard Worker
192*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_LOAD_PAYLOAD:
193*61046927SAndroid Build Coastguard Worker return "load_payload";
194*61046927SAndroid Build Coastguard Worker case FS_OPCODE_PACK:
195*61046927SAndroid Build Coastguard Worker return "pack";
196*61046927SAndroid Build Coastguard Worker
197*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SCRATCH_HEADER:
198*61046927SAndroid Build Coastguard Worker return "scratch_header";
199*61046927SAndroid Build Coastguard Worker
200*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_URB_WRITE_LOGICAL:
201*61046927SAndroid Build Coastguard Worker return "urb_write_logical";
202*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_URB_READ_LOGICAL:
203*61046927SAndroid Build Coastguard Worker return "urb_read_logical";
204*61046927SAndroid Build Coastguard Worker
205*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_FIND_LIVE_CHANNEL:
206*61046927SAndroid Build Coastguard Worker return "find_live_channel";
207*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_FIND_LAST_LIVE_CHANNEL:
208*61046927SAndroid Build Coastguard Worker return "find_last_live_channel";
209*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_LOAD_LIVE_CHANNELS:
210*61046927SAndroid Build Coastguard Worker return "load_live_channels";
211*61046927SAndroid Build Coastguard Worker case FS_OPCODE_LOAD_LIVE_CHANNELS:
212*61046927SAndroid Build Coastguard Worker return "fs_load_live_channels";
213*61046927SAndroid Build Coastguard Worker
214*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_BROADCAST:
215*61046927SAndroid Build Coastguard Worker return "broadcast";
216*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SHUFFLE:
217*61046927SAndroid Build Coastguard Worker return "shuffle";
218*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_SEL_EXEC:
219*61046927SAndroid Build Coastguard Worker return "sel_exec";
220*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_QUAD_SWIZZLE:
221*61046927SAndroid Build Coastguard Worker return "quad_swizzle";
222*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_CLUSTER_BROADCAST:
223*61046927SAndroid Build Coastguard Worker return "cluster_broadcast";
224*61046927SAndroid Build Coastguard Worker
225*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_GET_BUFFER_SIZE:
226*61046927SAndroid Build Coastguard Worker return "get_buffer_size";
227*61046927SAndroid Build Coastguard Worker
228*61046927SAndroid Build Coastguard Worker case FS_OPCODE_DDX_COARSE:
229*61046927SAndroid Build Coastguard Worker return "ddx_coarse";
230*61046927SAndroid Build Coastguard Worker case FS_OPCODE_DDX_FINE:
231*61046927SAndroid Build Coastguard Worker return "ddx_fine";
232*61046927SAndroid Build Coastguard Worker case FS_OPCODE_DDY_COARSE:
233*61046927SAndroid Build Coastguard Worker return "ddy_coarse";
234*61046927SAndroid Build Coastguard Worker case FS_OPCODE_DDY_FINE:
235*61046927SAndroid Build Coastguard Worker return "ddy_fine";
236*61046927SAndroid Build Coastguard Worker
237*61046927SAndroid Build Coastguard Worker case FS_OPCODE_PIXEL_X:
238*61046927SAndroid Build Coastguard Worker return "pixel_x";
239*61046927SAndroid Build Coastguard Worker case FS_OPCODE_PIXEL_Y:
240*61046927SAndroid Build Coastguard Worker return "pixel_y";
241*61046927SAndroid Build Coastguard Worker
242*61046927SAndroid Build Coastguard Worker case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD:
243*61046927SAndroid Build Coastguard Worker return "uniform_pull_const";
244*61046927SAndroid Build Coastguard Worker case FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_LOGICAL:
245*61046927SAndroid Build Coastguard Worker return "varying_pull_const_logical";
246*61046927SAndroid Build Coastguard Worker
247*61046927SAndroid Build Coastguard Worker case FS_OPCODE_PACK_HALF_2x16_SPLIT:
248*61046927SAndroid Build Coastguard Worker return "pack_half_2x16_split";
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_HALT_TARGET:
251*61046927SAndroid Build Coastguard Worker return "halt_target";
252*61046927SAndroid Build Coastguard Worker
253*61046927SAndroid Build Coastguard Worker case FS_OPCODE_INTERPOLATE_AT_SAMPLE:
254*61046927SAndroid Build Coastguard Worker return "interp_sample";
255*61046927SAndroid Build Coastguard Worker case FS_OPCODE_INTERPOLATE_AT_SHARED_OFFSET:
256*61046927SAndroid Build Coastguard Worker return "interp_shared_offset";
257*61046927SAndroid Build Coastguard Worker case FS_OPCODE_INTERPOLATE_AT_PER_SLOT_OFFSET:
258*61046927SAndroid Build Coastguard Worker return "interp_per_slot_offset";
259*61046927SAndroid Build Coastguard Worker
260*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_BARRIER:
261*61046927SAndroid Build Coastguard Worker return "barrier";
262*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MULH:
263*61046927SAndroid Build Coastguard Worker return "mulh";
264*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_ISUB_SAT:
265*61046927SAndroid Build Coastguard Worker return "isub_sat";
266*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_USUB_SAT:
267*61046927SAndroid Build Coastguard Worker return "usub_sat";
268*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MOV_INDIRECT:
269*61046927SAndroid Build Coastguard Worker return "mov_indirect";
270*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MOV_RELOC_IMM:
271*61046927SAndroid Build Coastguard Worker return "mov_reloc_imm";
272*61046927SAndroid Build Coastguard Worker
273*61046927SAndroid Build Coastguard Worker case RT_OPCODE_TRACE_RAY_LOGICAL:
274*61046927SAndroid Build Coastguard Worker return "rt_trace_ray_logical";
275*61046927SAndroid Build Coastguard Worker
276*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_RND_MODE:
277*61046927SAndroid Build Coastguard Worker return "rnd_mode";
278*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_FLOAT_CONTROL_MODE:
279*61046927SAndroid Build Coastguard Worker return "float_control_mode";
280*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_BTD_SPAWN_LOGICAL:
281*61046927SAndroid Build Coastguard Worker return "btd_spawn_logical";
282*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_BTD_RETIRE_LOGICAL:
283*61046927SAndroid Build Coastguard Worker return "btd_retire_logical";
284*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_READ_ARCH_REG:
285*61046927SAndroid Build Coastguard Worker return "read_arch_reg";
286*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_LOAD_SUBGROUP_INVOCATION:
287*61046927SAndroid Build Coastguard Worker return "load_subgroup_invocation";
288*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MEMORY_LOAD_LOGICAL:
289*61046927SAndroid Build Coastguard Worker return "memory_load";
290*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MEMORY_STORE_LOGICAL:
291*61046927SAndroid Build Coastguard Worker return "memory_store";
292*61046927SAndroid Build Coastguard Worker case SHADER_OPCODE_MEMORY_ATOMIC_LOGICAL:
293*61046927SAndroid Build Coastguard Worker return "memory_atomic";
294*61046927SAndroid Build Coastguard Worker }
295*61046927SAndroid Build Coastguard Worker
296*61046927SAndroid Build Coastguard Worker unreachable("not reached");
297*61046927SAndroid Build Coastguard Worker }
298*61046927SAndroid Build Coastguard Worker
299*61046927SAndroid Build Coastguard Worker /**
300*61046927SAndroid Build Coastguard Worker * Pretty-print a source for a SHADER_OPCODE_MEMORY_LOGICAL instruction.
301*61046927SAndroid Build Coastguard Worker *
302*61046927SAndroid Build Coastguard Worker * Returns true if the value is fully printed (i.e. an enum) and false if
303*61046927SAndroid Build Coastguard Worker * we only printed a label, and the actual source value still needs printing.
304*61046927SAndroid Build Coastguard Worker */
305*61046927SAndroid Build Coastguard Worker static bool
print_memory_logical_source(FILE * file,const fs_inst * inst,unsigned i)306*61046927SAndroid Build Coastguard Worker print_memory_logical_source(FILE *file, const fs_inst *inst, unsigned i)
307*61046927SAndroid Build Coastguard Worker {
308*61046927SAndroid Build Coastguard Worker if (inst->is_control_source(i)) {
309*61046927SAndroid Build Coastguard Worker assert(inst->src[i].file == IMM && inst->src[i].type == BRW_TYPE_UD);
310*61046927SAndroid Build Coastguard Worker assert(!inst->src[i].negate);
311*61046927SAndroid Build Coastguard Worker assert(!inst->src[i].abs);
312*61046927SAndroid Build Coastguard Worker }
313*61046927SAndroid Build Coastguard Worker
314*61046927SAndroid Build Coastguard Worker switch (i) {
315*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_OPCODE:
316*61046927SAndroid Build Coastguard Worker fprintf(file, " %s", brw_lsc_op_to_string(inst->src[i].ud));
317*61046927SAndroid Build Coastguard Worker return true;
318*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_MODE: {
319*61046927SAndroid Build Coastguard Worker static const char *modes[] = {
320*61046927SAndroid Build Coastguard Worker [MEMORY_MODE_TYPED] = "typed",
321*61046927SAndroid Build Coastguard Worker [MEMORY_MODE_UNTYPED] = "untyped",
322*61046927SAndroid Build Coastguard Worker [MEMORY_MODE_SHARED_LOCAL] = "shared",
323*61046927SAndroid Build Coastguard Worker [MEMORY_MODE_SCRATCH] = "scratch",
324*61046927SAndroid Build Coastguard Worker };
325*61046927SAndroid Build Coastguard Worker assert(inst->src[i].ud < ARRAY_SIZE(modes));
326*61046927SAndroid Build Coastguard Worker fprintf(file, " %s", modes[inst->src[i].ud]);
327*61046927SAndroid Build Coastguard Worker return true;
328*61046927SAndroid Build Coastguard Worker }
329*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_BINDING_TYPE:
330*61046927SAndroid Build Coastguard Worker fprintf(file, " %s", brw_lsc_addr_surftype_to_string(inst->src[i].ud));
331*61046927SAndroid Build Coastguard Worker if (inst->src[i].ud != LSC_ADDR_SURFTYPE_FLAT)
332*61046927SAndroid Build Coastguard Worker fprintf(file, ":");
333*61046927SAndroid Build Coastguard Worker return true;
334*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_BINDING:
335*61046927SAndroid Build Coastguard Worker return inst->src[i].file == BAD_FILE;
336*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_ADDRESS:
337*61046927SAndroid Build Coastguard Worker fprintf(file, " addr: ");
338*61046927SAndroid Build Coastguard Worker return false;
339*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_COORD_COMPONENTS:
340*61046927SAndroid Build Coastguard Worker fprintf(file, " coord_comps:");
341*61046927SAndroid Build Coastguard Worker return false;
342*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_ALIGNMENT:
343*61046927SAndroid Build Coastguard Worker fprintf(file, " align:");
344*61046927SAndroid Build Coastguard Worker return false;
345*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_DATA_SIZE:
346*61046927SAndroid Build Coastguard Worker fprintf(file, " %s", brw_lsc_data_size_to_string(inst->src[i].ud));
347*61046927SAndroid Build Coastguard Worker return true;
348*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_COMPONENTS:
349*61046927SAndroid Build Coastguard Worker fprintf(file, " comps:");
350*61046927SAndroid Build Coastguard Worker return false;
351*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_FLAGS:
352*61046927SAndroid Build Coastguard Worker if (inst->src[i].ud & MEMORY_FLAG_TRANSPOSE)
353*61046927SAndroid Build Coastguard Worker fprintf(file, " transpose");
354*61046927SAndroid Build Coastguard Worker if (inst->src[i].ud & MEMORY_FLAG_INCLUDE_HELPERS)
355*61046927SAndroid Build Coastguard Worker fprintf(file, " helpers");
356*61046927SAndroid Build Coastguard Worker return true;
357*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_DATA0:
358*61046927SAndroid Build Coastguard Worker fprintf(file, " data0: ");
359*61046927SAndroid Build Coastguard Worker return false;
360*61046927SAndroid Build Coastguard Worker case MEMORY_LOGICAL_DATA1:
361*61046927SAndroid Build Coastguard Worker if (inst->src[i].file == BAD_FILE)
362*61046927SAndroid Build Coastguard Worker return true;
363*61046927SAndroid Build Coastguard Worker fprintf(file, " data1: ");
364*61046927SAndroid Build Coastguard Worker return false;
365*61046927SAndroid Build Coastguard Worker default:
366*61046927SAndroid Build Coastguard Worker unreachable("invalid source");
367*61046927SAndroid Build Coastguard Worker }
368*61046927SAndroid Build Coastguard Worker }
369*61046927SAndroid Build Coastguard Worker
370*61046927SAndroid Build Coastguard Worker void
brw_print_instruction_to_file(const fs_visitor & s,const fs_inst * inst,FILE * file,const brw::def_analysis * defs)371*61046927SAndroid Build Coastguard Worker brw_print_instruction_to_file(const fs_visitor &s, const fs_inst *inst, FILE *file, const brw::def_analysis *defs)
372*61046927SAndroid Build Coastguard Worker {
373*61046927SAndroid Build Coastguard Worker if (inst->predicate) {
374*61046927SAndroid Build Coastguard Worker fprintf(file, "(%cf%d.%d) ",
375*61046927SAndroid Build Coastguard Worker inst->predicate_inverse ? '-' : '+',
376*61046927SAndroid Build Coastguard Worker inst->flag_subreg / 2,
377*61046927SAndroid Build Coastguard Worker inst->flag_subreg % 2);
378*61046927SAndroid Build Coastguard Worker }
379*61046927SAndroid Build Coastguard Worker
380*61046927SAndroid Build Coastguard Worker fprintf(file, "%s", brw_instruction_name(&s.compiler->isa, inst->opcode));
381*61046927SAndroid Build Coastguard Worker if (inst->saturate)
382*61046927SAndroid Build Coastguard Worker fprintf(file, ".sat");
383*61046927SAndroid Build Coastguard Worker if (inst->conditional_mod) {
384*61046927SAndroid Build Coastguard Worker fprintf(file, "%s", conditional_modifier[inst->conditional_mod]);
385*61046927SAndroid Build Coastguard Worker if (!inst->predicate &&
386*61046927SAndroid Build Coastguard Worker (inst->opcode != BRW_OPCODE_SEL &&
387*61046927SAndroid Build Coastguard Worker inst->opcode != BRW_OPCODE_CSEL &&
388*61046927SAndroid Build Coastguard Worker inst->opcode != BRW_OPCODE_IF &&
389*61046927SAndroid Build Coastguard Worker inst->opcode != BRW_OPCODE_WHILE)) {
390*61046927SAndroid Build Coastguard Worker fprintf(file, ".f%d.%d", inst->flag_subreg / 2,
391*61046927SAndroid Build Coastguard Worker inst->flag_subreg % 2);
392*61046927SAndroid Build Coastguard Worker }
393*61046927SAndroid Build Coastguard Worker }
394*61046927SAndroid Build Coastguard Worker fprintf(file, "(%d) ", inst->exec_size);
395*61046927SAndroid Build Coastguard Worker
396*61046927SAndroid Build Coastguard Worker if (inst->mlen) {
397*61046927SAndroid Build Coastguard Worker fprintf(file, "(mlen: %d) ", inst->mlen);
398*61046927SAndroid Build Coastguard Worker }
399*61046927SAndroid Build Coastguard Worker
400*61046927SAndroid Build Coastguard Worker if (inst->ex_mlen) {
401*61046927SAndroid Build Coastguard Worker fprintf(file, "(ex_mlen: %d) ", inst->ex_mlen);
402*61046927SAndroid Build Coastguard Worker }
403*61046927SAndroid Build Coastguard Worker
404*61046927SAndroid Build Coastguard Worker if (inst->eot) {
405*61046927SAndroid Build Coastguard Worker fprintf(file, "(EOT) ");
406*61046927SAndroid Build Coastguard Worker }
407*61046927SAndroid Build Coastguard Worker
408*61046927SAndroid Build Coastguard Worker switch (inst->dst.file) {
409*61046927SAndroid Build Coastguard Worker case VGRF:
410*61046927SAndroid Build Coastguard Worker if (defs && defs->get(inst->dst))
411*61046927SAndroid Build Coastguard Worker fprintf(file, "%%%d", inst->dst.nr);
412*61046927SAndroid Build Coastguard Worker else
413*61046927SAndroid Build Coastguard Worker fprintf(file, "v%d", inst->dst.nr);
414*61046927SAndroid Build Coastguard Worker break;
415*61046927SAndroid Build Coastguard Worker case FIXED_GRF:
416*61046927SAndroid Build Coastguard Worker fprintf(file, "g%d", inst->dst.nr);
417*61046927SAndroid Build Coastguard Worker if (inst->dst.subnr != 0)
418*61046927SAndroid Build Coastguard Worker fprintf(file, ".%d", inst->dst.subnr / brw_type_size_bytes(inst->dst.type));
419*61046927SAndroid Build Coastguard Worker break;
420*61046927SAndroid Build Coastguard Worker case BAD_FILE:
421*61046927SAndroid Build Coastguard Worker fprintf(file, "(null)");
422*61046927SAndroid Build Coastguard Worker break;
423*61046927SAndroid Build Coastguard Worker case UNIFORM:
424*61046927SAndroid Build Coastguard Worker fprintf(file, "***u%d***", inst->dst.nr);
425*61046927SAndroid Build Coastguard Worker break;
426*61046927SAndroid Build Coastguard Worker case ATTR:
427*61046927SAndroid Build Coastguard Worker fprintf(file, "***attr%d***", inst->dst.nr);
428*61046927SAndroid Build Coastguard Worker break;
429*61046927SAndroid Build Coastguard Worker case ARF:
430*61046927SAndroid Build Coastguard Worker switch (inst->dst.nr & 0xF0) {
431*61046927SAndroid Build Coastguard Worker case BRW_ARF_NULL:
432*61046927SAndroid Build Coastguard Worker fprintf(file, "null");
433*61046927SAndroid Build Coastguard Worker break;
434*61046927SAndroid Build Coastguard Worker case BRW_ARF_ADDRESS:
435*61046927SAndroid Build Coastguard Worker fprintf(file, "a0.%d", inst->dst.subnr);
436*61046927SAndroid Build Coastguard Worker break;
437*61046927SAndroid Build Coastguard Worker case BRW_ARF_ACCUMULATOR:
438*61046927SAndroid Build Coastguard Worker if (inst->dst.subnr == 0)
439*61046927SAndroid Build Coastguard Worker fprintf(file, "acc%d", inst->dst.nr & 0x0F);
440*61046927SAndroid Build Coastguard Worker else
441*61046927SAndroid Build Coastguard Worker fprintf(file, "acc%d.%d", inst->dst.nr & 0x0F, inst->dst.subnr);
442*61046927SAndroid Build Coastguard Worker
443*61046927SAndroid Build Coastguard Worker break;
444*61046927SAndroid Build Coastguard Worker case BRW_ARF_FLAG:
445*61046927SAndroid Build Coastguard Worker fprintf(file, "f%d.%d", inst->dst.nr & 0xf, inst->dst.subnr);
446*61046927SAndroid Build Coastguard Worker break;
447*61046927SAndroid Build Coastguard Worker default:
448*61046927SAndroid Build Coastguard Worker fprintf(file, "arf%d.%d", inst->dst.nr & 0xf, inst->dst.subnr);
449*61046927SAndroid Build Coastguard Worker break;
450*61046927SAndroid Build Coastguard Worker }
451*61046927SAndroid Build Coastguard Worker break;
452*61046927SAndroid Build Coastguard Worker case IMM:
453*61046927SAndroid Build Coastguard Worker unreachable("not reached");
454*61046927SAndroid Build Coastguard Worker }
455*61046927SAndroid Build Coastguard Worker
456*61046927SAndroid Build Coastguard Worker if (inst->dst.offset ||
457*61046927SAndroid Build Coastguard Worker (!s.grf_used && inst->dst.file == VGRF &&
458*61046927SAndroid Build Coastguard Worker s.alloc.sizes[inst->dst.nr] * REG_SIZE != inst->size_written)) {
459*61046927SAndroid Build Coastguard Worker const unsigned reg_size = (inst->dst.file == UNIFORM ? 4 : REG_SIZE);
460*61046927SAndroid Build Coastguard Worker fprintf(file, "+%d.%d", inst->dst.offset / reg_size,
461*61046927SAndroid Build Coastguard Worker inst->dst.offset % reg_size);
462*61046927SAndroid Build Coastguard Worker }
463*61046927SAndroid Build Coastguard Worker
464*61046927SAndroid Build Coastguard Worker if (inst->dst.stride != 1)
465*61046927SAndroid Build Coastguard Worker fprintf(file, "<%u>", inst->dst.stride);
466*61046927SAndroid Build Coastguard Worker fprintf(file, ":%s", brw_reg_type_to_letters(inst->dst.type));
467*61046927SAndroid Build Coastguard Worker
468*61046927SAndroid Build Coastguard Worker for (int i = 0; i < inst->sources; i++) {
469*61046927SAndroid Build Coastguard Worker if (inst->opcode == SHADER_OPCODE_MEMORY_LOAD_LOGICAL ||
470*61046927SAndroid Build Coastguard Worker inst->opcode == SHADER_OPCODE_MEMORY_STORE_LOGICAL ||
471*61046927SAndroid Build Coastguard Worker inst->opcode == SHADER_OPCODE_MEMORY_ATOMIC_LOGICAL) {
472*61046927SAndroid Build Coastguard Worker if (print_memory_logical_source(file, inst, i))
473*61046927SAndroid Build Coastguard Worker continue;
474*61046927SAndroid Build Coastguard Worker } else {
475*61046927SAndroid Build Coastguard Worker fprintf(file, ", ");
476*61046927SAndroid Build Coastguard Worker }
477*61046927SAndroid Build Coastguard Worker
478*61046927SAndroid Build Coastguard Worker if (inst->src[i].negate)
479*61046927SAndroid Build Coastguard Worker fprintf(file, "-");
480*61046927SAndroid Build Coastguard Worker if (inst->src[i].abs)
481*61046927SAndroid Build Coastguard Worker fprintf(file, "|");
482*61046927SAndroid Build Coastguard Worker switch (inst->src[i].file) {
483*61046927SAndroid Build Coastguard Worker case VGRF:
484*61046927SAndroid Build Coastguard Worker if (defs && defs->get(inst->src[i]))
485*61046927SAndroid Build Coastguard Worker fprintf(file, "%%%d", inst->src[i].nr);
486*61046927SAndroid Build Coastguard Worker else
487*61046927SAndroid Build Coastguard Worker fprintf(file, "v%d", inst->src[i].nr);
488*61046927SAndroid Build Coastguard Worker break;
489*61046927SAndroid Build Coastguard Worker case FIXED_GRF:
490*61046927SAndroid Build Coastguard Worker fprintf(file, "g%d", inst->src[i].nr);
491*61046927SAndroid Build Coastguard Worker break;
492*61046927SAndroid Build Coastguard Worker case ATTR:
493*61046927SAndroid Build Coastguard Worker fprintf(file, "attr%d", inst->src[i].nr);
494*61046927SAndroid Build Coastguard Worker break;
495*61046927SAndroid Build Coastguard Worker case UNIFORM:
496*61046927SAndroid Build Coastguard Worker fprintf(file, "u%d", inst->src[i].nr);
497*61046927SAndroid Build Coastguard Worker break;
498*61046927SAndroid Build Coastguard Worker case BAD_FILE:
499*61046927SAndroid Build Coastguard Worker fprintf(file, "(null)");
500*61046927SAndroid Build Coastguard Worker break;
501*61046927SAndroid Build Coastguard Worker case IMM:
502*61046927SAndroid Build Coastguard Worker switch (inst->src[i].type) {
503*61046927SAndroid Build Coastguard Worker case BRW_TYPE_HF:
504*61046927SAndroid Build Coastguard Worker fprintf(file, "%-ghf", _mesa_half_to_float(inst->src[i].ud & 0xffff));
505*61046927SAndroid Build Coastguard Worker break;
506*61046927SAndroid Build Coastguard Worker case BRW_TYPE_F:
507*61046927SAndroid Build Coastguard Worker fprintf(file, "%-gf", inst->src[i].f);
508*61046927SAndroid Build Coastguard Worker break;
509*61046927SAndroid Build Coastguard Worker case BRW_TYPE_DF:
510*61046927SAndroid Build Coastguard Worker fprintf(file, "%fdf", inst->src[i].df);
511*61046927SAndroid Build Coastguard Worker break;
512*61046927SAndroid Build Coastguard Worker case BRW_TYPE_W:
513*61046927SAndroid Build Coastguard Worker fprintf(file, "%dw", (int)(int16_t)inst->src[i].d);
514*61046927SAndroid Build Coastguard Worker break;
515*61046927SAndroid Build Coastguard Worker case BRW_TYPE_D:
516*61046927SAndroid Build Coastguard Worker fprintf(file, "%dd", inst->src[i].d);
517*61046927SAndroid Build Coastguard Worker break;
518*61046927SAndroid Build Coastguard Worker case BRW_TYPE_UW:
519*61046927SAndroid Build Coastguard Worker fprintf(file, "%duw", inst->src[i].ud & 0xffff);
520*61046927SAndroid Build Coastguard Worker break;
521*61046927SAndroid Build Coastguard Worker case BRW_TYPE_UD:
522*61046927SAndroid Build Coastguard Worker fprintf(file, "%uu", inst->src[i].ud);
523*61046927SAndroid Build Coastguard Worker break;
524*61046927SAndroid Build Coastguard Worker case BRW_TYPE_Q:
525*61046927SAndroid Build Coastguard Worker fprintf(file, "%" PRId64 "q", inst->src[i].d64);
526*61046927SAndroid Build Coastguard Worker break;
527*61046927SAndroid Build Coastguard Worker case BRW_TYPE_UQ:
528*61046927SAndroid Build Coastguard Worker fprintf(file, "%" PRIu64 "uq", inst->src[i].u64);
529*61046927SAndroid Build Coastguard Worker break;
530*61046927SAndroid Build Coastguard Worker case BRW_TYPE_VF:
531*61046927SAndroid Build Coastguard Worker fprintf(file, "[%-gF, %-gF, %-gF, %-gF]",
532*61046927SAndroid Build Coastguard Worker brw_vf_to_float((inst->src[i].ud >> 0) & 0xff),
533*61046927SAndroid Build Coastguard Worker brw_vf_to_float((inst->src[i].ud >> 8) & 0xff),
534*61046927SAndroid Build Coastguard Worker brw_vf_to_float((inst->src[i].ud >> 16) & 0xff),
535*61046927SAndroid Build Coastguard Worker brw_vf_to_float((inst->src[i].ud >> 24) & 0xff));
536*61046927SAndroid Build Coastguard Worker break;
537*61046927SAndroid Build Coastguard Worker case BRW_TYPE_V:
538*61046927SAndroid Build Coastguard Worker case BRW_TYPE_UV:
539*61046927SAndroid Build Coastguard Worker fprintf(file, "%08x%s", inst->src[i].ud,
540*61046927SAndroid Build Coastguard Worker inst->src[i].type == BRW_TYPE_V ? "V" : "UV");
541*61046927SAndroid Build Coastguard Worker break;
542*61046927SAndroid Build Coastguard Worker default:
543*61046927SAndroid Build Coastguard Worker fprintf(file, "???");
544*61046927SAndroid Build Coastguard Worker break;
545*61046927SAndroid Build Coastguard Worker }
546*61046927SAndroid Build Coastguard Worker break;
547*61046927SAndroid Build Coastguard Worker case ARF:
548*61046927SAndroid Build Coastguard Worker switch (inst->src[i].nr & 0xF0) {
549*61046927SAndroid Build Coastguard Worker case BRW_ARF_NULL:
550*61046927SAndroid Build Coastguard Worker fprintf(file, "null");
551*61046927SAndroid Build Coastguard Worker break;
552*61046927SAndroid Build Coastguard Worker case BRW_ARF_ADDRESS:
553*61046927SAndroid Build Coastguard Worker fprintf(file, "a0.%d", inst->src[i].subnr);
554*61046927SAndroid Build Coastguard Worker break;
555*61046927SAndroid Build Coastguard Worker case BRW_ARF_ACCUMULATOR:
556*61046927SAndroid Build Coastguard Worker if (inst->src[i].subnr == 0)
557*61046927SAndroid Build Coastguard Worker fprintf(file, "acc%d", inst->src[i].nr & 0x0F);
558*61046927SAndroid Build Coastguard Worker else
559*61046927SAndroid Build Coastguard Worker fprintf(file, "acc%d.%d", inst->src[i].nr & 0x0F, inst->src[i].subnr);
560*61046927SAndroid Build Coastguard Worker
561*61046927SAndroid Build Coastguard Worker break;
562*61046927SAndroid Build Coastguard Worker case BRW_ARF_FLAG:
563*61046927SAndroid Build Coastguard Worker fprintf(file, "f%d.%d", inst->src[i].nr & 0xf, inst->src[i].subnr);
564*61046927SAndroid Build Coastguard Worker break;
565*61046927SAndroid Build Coastguard Worker default:
566*61046927SAndroid Build Coastguard Worker fprintf(file, "arf%d.%d", inst->src[i].nr & 0xf, inst->src[i].subnr);
567*61046927SAndroid Build Coastguard Worker break;
568*61046927SAndroid Build Coastguard Worker }
569*61046927SAndroid Build Coastguard Worker break;
570*61046927SAndroid Build Coastguard Worker }
571*61046927SAndroid Build Coastguard Worker
572*61046927SAndroid Build Coastguard Worker if (inst->src[i].file == FIXED_GRF && inst->src[i].subnr != 0) {
573*61046927SAndroid Build Coastguard Worker assert(inst->src[i].offset == 0);
574*61046927SAndroid Build Coastguard Worker
575*61046927SAndroid Build Coastguard Worker fprintf(file, ".%d", inst->src[i].subnr / brw_type_size_bytes(inst->src[i].type));
576*61046927SAndroid Build Coastguard Worker } else if (inst->src[i].offset ||
577*61046927SAndroid Build Coastguard Worker (!s.grf_used && inst->src[i].file == VGRF &&
578*61046927SAndroid Build Coastguard Worker s.alloc.sizes[inst->src[i].nr] * REG_SIZE != inst->size_read(i))) {
579*61046927SAndroid Build Coastguard Worker const unsigned reg_size = (inst->src[i].file == UNIFORM ? 4 : REG_SIZE);
580*61046927SAndroid Build Coastguard Worker fprintf(file, "+%d.%d", inst->src[i].offset / reg_size,
581*61046927SAndroid Build Coastguard Worker inst->src[i].offset % reg_size);
582*61046927SAndroid Build Coastguard Worker }
583*61046927SAndroid Build Coastguard Worker
584*61046927SAndroid Build Coastguard Worker if (inst->src[i].abs)
585*61046927SAndroid Build Coastguard Worker fprintf(file, "|");
586*61046927SAndroid Build Coastguard Worker
587*61046927SAndroid Build Coastguard Worker if (inst->src[i].file != IMM) {
588*61046927SAndroid Build Coastguard Worker unsigned stride;
589*61046927SAndroid Build Coastguard Worker if (inst->src[i].file == ARF || inst->src[i].file == FIXED_GRF) {
590*61046927SAndroid Build Coastguard Worker unsigned hstride = inst->src[i].hstride;
591*61046927SAndroid Build Coastguard Worker stride = (hstride == 0 ? 0 : (1 << (hstride - 1)));
592*61046927SAndroid Build Coastguard Worker } else {
593*61046927SAndroid Build Coastguard Worker stride = inst->src[i].stride;
594*61046927SAndroid Build Coastguard Worker }
595*61046927SAndroid Build Coastguard Worker if (stride != 1)
596*61046927SAndroid Build Coastguard Worker fprintf(file, "<%u>", stride);
597*61046927SAndroid Build Coastguard Worker
598*61046927SAndroid Build Coastguard Worker fprintf(file, ":%s", brw_reg_type_to_letters(inst->src[i].type));
599*61046927SAndroid Build Coastguard Worker }
600*61046927SAndroid Build Coastguard Worker }
601*61046927SAndroid Build Coastguard Worker
602*61046927SAndroid Build Coastguard Worker fprintf(file, " ");
603*61046927SAndroid Build Coastguard Worker
604*61046927SAndroid Build Coastguard Worker if (inst->force_writemask_all)
605*61046927SAndroid Build Coastguard Worker fprintf(file, "NoMask ");
606*61046927SAndroid Build Coastguard Worker
607*61046927SAndroid Build Coastguard Worker if (inst->exec_size != s.dispatch_width)
608*61046927SAndroid Build Coastguard Worker fprintf(file, "group%d ", inst->group);
609*61046927SAndroid Build Coastguard Worker
610*61046927SAndroid Build Coastguard Worker if (inst->has_no_mask_send_params)
611*61046927SAndroid Build Coastguard Worker fprintf(file, "NoMaskParams ");
612*61046927SAndroid Build Coastguard Worker
613*61046927SAndroid Build Coastguard Worker if (inst->sched.pipe != TGL_PIPE_NONE) {
614*61046927SAndroid Build Coastguard Worker fprintf(file, "{ ");
615*61046927SAndroid Build Coastguard Worker brw_print_swsb(file, s.devinfo, inst->sched);
616*61046927SAndroid Build Coastguard Worker fprintf(file, " } ");
617*61046927SAndroid Build Coastguard Worker }
618*61046927SAndroid Build Coastguard Worker
619*61046927SAndroid Build Coastguard Worker fprintf(file, "\n");
620*61046927SAndroid Build Coastguard Worker }
621*61046927SAndroid Build Coastguard Worker
622*61046927SAndroid Build Coastguard Worker
623*61046927SAndroid Build Coastguard Worker void
brw_print_swsb(FILE * f,const struct intel_device_info * devinfo,const tgl_swsb swsb)624*61046927SAndroid Build Coastguard Worker brw_print_swsb(FILE *f, const struct intel_device_info *devinfo, const tgl_swsb swsb)
625*61046927SAndroid Build Coastguard Worker {
626*61046927SAndroid Build Coastguard Worker if (swsb.pipe == TGL_PIPE_NONE)
627*61046927SAndroid Build Coastguard Worker return;
628*61046927SAndroid Build Coastguard Worker
629*61046927SAndroid Build Coastguard Worker if (swsb.regdist) {
630*61046927SAndroid Build Coastguard Worker fprintf(f, "%s@%d",
631*61046927SAndroid Build Coastguard Worker (devinfo && devinfo->verx10 < 125 ? "" :
632*61046927SAndroid Build Coastguard Worker swsb.pipe == TGL_PIPE_FLOAT ? "F" :
633*61046927SAndroid Build Coastguard Worker swsb.pipe == TGL_PIPE_INT ? "I" :
634*61046927SAndroid Build Coastguard Worker swsb.pipe == TGL_PIPE_LONG ? "L" :
635*61046927SAndroid Build Coastguard Worker swsb.pipe == TGL_PIPE_ALL ? "A" :
636*61046927SAndroid Build Coastguard Worker swsb.pipe == TGL_PIPE_MATH ? "M" : "" ),
637*61046927SAndroid Build Coastguard Worker swsb.regdist);
638*61046927SAndroid Build Coastguard Worker }
639*61046927SAndroid Build Coastguard Worker
640*61046927SAndroid Build Coastguard Worker if (swsb.mode) {
641*61046927SAndroid Build Coastguard Worker if (swsb.regdist)
642*61046927SAndroid Build Coastguard Worker fprintf(f, " ");
643*61046927SAndroid Build Coastguard Worker
644*61046927SAndroid Build Coastguard Worker fprintf(f, "$%d%s", swsb.sbid,
645*61046927SAndroid Build Coastguard Worker (swsb.mode & TGL_SBID_SET ? "" :
646*61046927SAndroid Build Coastguard Worker swsb.mode & TGL_SBID_DST ? ".dst" : ".src"));
647*61046927SAndroid Build Coastguard Worker }
648*61046927SAndroid Build Coastguard Worker }
649*61046927SAndroid Build Coastguard Worker
650