1*d83cc019SAndroid Build Coastguard Worker /*
2*d83cc019SAndroid Build Coastguard Worker Copyright (C) Intel Corp. 2006. All Rights Reserved.
3*d83cc019SAndroid Build Coastguard Worker Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
4*d83cc019SAndroid Build Coastguard Worker develop this 3D driver.
5*d83cc019SAndroid Build Coastguard Worker
6*d83cc019SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining
7*d83cc019SAndroid Build Coastguard Worker a copy of this software and associated documentation files (the
8*d83cc019SAndroid Build Coastguard Worker "Software"), to deal in the Software without restriction, including
9*d83cc019SAndroid Build Coastguard Worker without limitation the rights to use, copy, modify, merge, publish,
10*d83cc019SAndroid Build Coastguard Worker distribute, sublicense, and/or sell copies of the Software, and to
11*d83cc019SAndroid Build Coastguard Worker permit persons to whom the Software is furnished to do so, subject to
12*d83cc019SAndroid Build Coastguard Worker the following conditions:
13*d83cc019SAndroid Build Coastguard Worker
14*d83cc019SAndroid Build Coastguard Worker The above copyright notice and this permission notice (including the
15*d83cc019SAndroid Build Coastguard Worker next paragraph) shall be included in all copies or substantial
16*d83cc019SAndroid Build Coastguard Worker portions of the Software.
17*d83cc019SAndroid Build Coastguard Worker
18*d83cc019SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19*d83cc019SAndroid Build Coastguard Worker EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*d83cc019SAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21*d83cc019SAndroid Build Coastguard Worker IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
22*d83cc019SAndroid Build Coastguard Worker LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23*d83cc019SAndroid Build Coastguard Worker OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24*d83cc019SAndroid Build Coastguard Worker WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25*d83cc019SAndroid Build Coastguard Worker
26*d83cc019SAndroid Build Coastguard Worker **********************************************************************/
27*d83cc019SAndroid Build Coastguard Worker /*
28*d83cc019SAndroid Build Coastguard Worker * Authors:
29*d83cc019SAndroid Build Coastguard Worker * Keith Whitwell <[email protected]>
30*d83cc019SAndroid Build Coastguard Worker */
31*d83cc019SAndroid Build Coastguard Worker
32*d83cc019SAndroid Build Coastguard Worker
33*d83cc019SAndroid Build Coastguard Worker #ifndef BRW_EU_H
34*d83cc019SAndroid Build Coastguard Worker #define BRW_EU_H
35*d83cc019SAndroid Build Coastguard Worker
36*d83cc019SAndroid Build Coastguard Worker #include <stdbool.h>
37*d83cc019SAndroid Build Coastguard Worker #include <stdio.h>
38*d83cc019SAndroid Build Coastguard Worker #include "brw_context.h"
39*d83cc019SAndroid Build Coastguard Worker #include "brw_structs.h"
40*d83cc019SAndroid Build Coastguard Worker #include "brw_defines.h"
41*d83cc019SAndroid Build Coastguard Worker #include "brw_reg.h"
42*d83cc019SAndroid Build Coastguard Worker
43*d83cc019SAndroid Build Coastguard Worker #ifdef __cplusplus
44*d83cc019SAndroid Build Coastguard Worker extern "C" {
45*d83cc019SAndroid Build Coastguard Worker #endif
46*d83cc019SAndroid Build Coastguard Worker
47*d83cc019SAndroid Build Coastguard Worker #define BRW_EU_MAX_INSN_STACK 5
48*d83cc019SAndroid Build Coastguard Worker
49*d83cc019SAndroid Build Coastguard Worker struct brw_compile {
50*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *store;
51*d83cc019SAndroid Build Coastguard Worker int store_size;
52*d83cc019SAndroid Build Coastguard Worker unsigned nr_insn;
53*d83cc019SAndroid Build Coastguard Worker unsigned int next_insn_offset;
54*d83cc019SAndroid Build Coastguard Worker
55*d83cc019SAndroid Build Coastguard Worker void *mem_ctx;
56*d83cc019SAndroid Build Coastguard Worker
57*d83cc019SAndroid Build Coastguard Worker /* Allow clients to push/pop instruction state:
58*d83cc019SAndroid Build Coastguard Worker */
59*d83cc019SAndroid Build Coastguard Worker struct brw_instruction stack[BRW_EU_MAX_INSN_STACK];
60*d83cc019SAndroid Build Coastguard Worker bool compressed_stack[BRW_EU_MAX_INSN_STACK];
61*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *current;
62*d83cc019SAndroid Build Coastguard Worker
63*d83cc019SAndroid Build Coastguard Worker unsigned flag_value;
64*d83cc019SAndroid Build Coastguard Worker bool single_program_flow;
65*d83cc019SAndroid Build Coastguard Worker bool compressed;
66*d83cc019SAndroid Build Coastguard Worker struct brw_context *brw;
67*d83cc019SAndroid Build Coastguard Worker
68*d83cc019SAndroid Build Coastguard Worker /* Control flow stacks:
69*d83cc019SAndroid Build Coastguard Worker * - if_stack contains IF and ELSE instructions which must be patched
70*d83cc019SAndroid Build Coastguard Worker * (and popped) once the matching ENDIF instruction is encountered.
71*d83cc019SAndroid Build Coastguard Worker *
72*d83cc019SAndroid Build Coastguard Worker * Just store the instruction pointer(an index).
73*d83cc019SAndroid Build Coastguard Worker */
74*d83cc019SAndroid Build Coastguard Worker int *if_stack;
75*d83cc019SAndroid Build Coastguard Worker int if_stack_depth;
76*d83cc019SAndroid Build Coastguard Worker int if_stack_array_size;
77*d83cc019SAndroid Build Coastguard Worker
78*d83cc019SAndroid Build Coastguard Worker /**
79*d83cc019SAndroid Build Coastguard Worker * loop_stack contains the instruction pointers of the starts of loops which
80*d83cc019SAndroid Build Coastguard Worker * must be patched (and popped) once the matching WHILE instruction is
81*d83cc019SAndroid Build Coastguard Worker * encountered.
82*d83cc019SAndroid Build Coastguard Worker */
83*d83cc019SAndroid Build Coastguard Worker int *loop_stack;
84*d83cc019SAndroid Build Coastguard Worker /**
85*d83cc019SAndroid Build Coastguard Worker * pre-gen6, the BREAK and CONT instructions had to tell how many IF/ENDIF
86*d83cc019SAndroid Build Coastguard Worker * blocks they were popping out of, to fix up the mask stack. This tracks
87*d83cc019SAndroid Build Coastguard Worker * the IF/ENDIF nesting in each current nested loop level.
88*d83cc019SAndroid Build Coastguard Worker */
89*d83cc019SAndroid Build Coastguard Worker int *if_depth_in_loop;
90*d83cc019SAndroid Build Coastguard Worker int loop_stack_depth;
91*d83cc019SAndroid Build Coastguard Worker int loop_stack_array_size;
92*d83cc019SAndroid Build Coastguard Worker };
93*d83cc019SAndroid Build Coastguard Worker
current_insn(struct brw_compile * p)94*d83cc019SAndroid Build Coastguard Worker static inline struct brw_instruction *current_insn( struct brw_compile *p)
95*d83cc019SAndroid Build Coastguard Worker {
96*d83cc019SAndroid Build Coastguard Worker return &p->store[p->nr_insn];
97*d83cc019SAndroid Build Coastguard Worker }
98*d83cc019SAndroid Build Coastguard Worker
99*d83cc019SAndroid Build Coastguard Worker void brw_pop_insn_state( struct brw_compile *p );
100*d83cc019SAndroid Build Coastguard Worker void brw_push_insn_state( struct brw_compile *p );
101*d83cc019SAndroid Build Coastguard Worker void brw_set_mask_control( struct brw_compile *p, unsigned value );
102*d83cc019SAndroid Build Coastguard Worker void brw_set_saturate( struct brw_compile *p, bool enable );
103*d83cc019SAndroid Build Coastguard Worker void brw_set_access_mode( struct brw_compile *p, unsigned access_mode );
104*d83cc019SAndroid Build Coastguard Worker void brw_set_compression_control(struct brw_compile *p, enum brw_compression c);
105*d83cc019SAndroid Build Coastguard Worker void brw_set_predicate_control_flag_value( struct brw_compile *p, unsigned value );
106*d83cc019SAndroid Build Coastguard Worker void brw_set_predicate_control( struct brw_compile *p, unsigned pc );
107*d83cc019SAndroid Build Coastguard Worker void brw_set_predicate_inverse(struct brw_compile *p, bool predicate_inverse);
108*d83cc019SAndroid Build Coastguard Worker void brw_set_conditionalmod( struct brw_compile *p, unsigned conditional );
109*d83cc019SAndroid Build Coastguard Worker void brw_set_flag_reg(struct brw_compile *p, int reg, int subreg);
110*d83cc019SAndroid Build Coastguard Worker void brw_set_acc_write_control(struct brw_compile *p, unsigned value);
111*d83cc019SAndroid Build Coastguard Worker
112*d83cc019SAndroid Build Coastguard Worker void brw_init_compile(struct brw_context *, struct brw_compile *p,
113*d83cc019SAndroid Build Coastguard Worker void *mem_ctx);
114*d83cc019SAndroid Build Coastguard Worker void brw_dump_compile(struct brw_compile *p, FILE *out, int start, int end);
115*d83cc019SAndroid Build Coastguard Worker const unsigned *brw_get_program( struct brw_compile *p, unsigned *sz );
116*d83cc019SAndroid Build Coastguard Worker
117*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_next_insn(struct brw_compile *p, unsigned opcode);
118*d83cc019SAndroid Build Coastguard Worker void brw_set_dest(struct brw_compile *p, struct brw_instruction *insn,
119*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest);
120*d83cc019SAndroid Build Coastguard Worker void brw_set_src0(struct brw_compile *p, struct brw_instruction *insn,
121*d83cc019SAndroid Build Coastguard Worker struct brw_reg reg);
122*d83cc019SAndroid Build Coastguard Worker
123*d83cc019SAndroid Build Coastguard Worker void gen6_resolve_implied_move(struct brw_compile *p,
124*d83cc019SAndroid Build Coastguard Worker struct brw_reg *src,
125*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr);
126*d83cc019SAndroid Build Coastguard Worker
127*d83cc019SAndroid Build Coastguard Worker /* Helpers for regular instructions:
128*d83cc019SAndroid Build Coastguard Worker */
129*d83cc019SAndroid Build Coastguard Worker #define ALU1(OP) \
130*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_##OP(struct brw_compile *p, \
131*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest, \
132*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0);
133*d83cc019SAndroid Build Coastguard Worker
134*d83cc019SAndroid Build Coastguard Worker #define ALU2(OP) \
135*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_##OP(struct brw_compile *p, \
136*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest, \
137*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0, \
138*d83cc019SAndroid Build Coastguard Worker struct brw_reg src1);
139*d83cc019SAndroid Build Coastguard Worker
140*d83cc019SAndroid Build Coastguard Worker #define ALU3(OP) \
141*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_##OP(struct brw_compile *p, \
142*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest, \
143*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0, \
144*d83cc019SAndroid Build Coastguard Worker struct brw_reg src1, \
145*d83cc019SAndroid Build Coastguard Worker struct brw_reg src2);
146*d83cc019SAndroid Build Coastguard Worker
147*d83cc019SAndroid Build Coastguard Worker #define ROUND(OP) \
148*d83cc019SAndroid Build Coastguard Worker void brw_##OP(struct brw_compile *p, struct brw_reg dest, struct brw_reg src0);
149*d83cc019SAndroid Build Coastguard Worker
150*d83cc019SAndroid Build Coastguard Worker ALU1(MOV)
151*d83cc019SAndroid Build Coastguard Worker ALU2(SEL)
152*d83cc019SAndroid Build Coastguard Worker ALU1(NOT)
153*d83cc019SAndroid Build Coastguard Worker ALU2(AND)
154*d83cc019SAndroid Build Coastguard Worker ALU2(OR)
155*d83cc019SAndroid Build Coastguard Worker ALU2(XOR)
156*d83cc019SAndroid Build Coastguard Worker ALU2(SHR)
157*d83cc019SAndroid Build Coastguard Worker ALU2(SHL)
158*d83cc019SAndroid Build Coastguard Worker ALU2(RSR)
159*d83cc019SAndroid Build Coastguard Worker ALU2(RSL)
160*d83cc019SAndroid Build Coastguard Worker ALU2(ASR)
161*d83cc019SAndroid Build Coastguard Worker ALU2(JMPI)
162*d83cc019SAndroid Build Coastguard Worker ALU2(ADD)
163*d83cc019SAndroid Build Coastguard Worker ALU2(AVG)
164*d83cc019SAndroid Build Coastguard Worker ALU2(MUL)
165*d83cc019SAndroid Build Coastguard Worker ALU1(FRC)
166*d83cc019SAndroid Build Coastguard Worker ALU1(RNDD)
167*d83cc019SAndroid Build Coastguard Worker ALU2(MAC)
168*d83cc019SAndroid Build Coastguard Worker ALU2(MACH)
169*d83cc019SAndroid Build Coastguard Worker ALU1(LZD)
170*d83cc019SAndroid Build Coastguard Worker ALU2(DP4)
171*d83cc019SAndroid Build Coastguard Worker ALU2(DPH)
172*d83cc019SAndroid Build Coastguard Worker ALU2(DP3)
173*d83cc019SAndroid Build Coastguard Worker ALU2(DP2)
174*d83cc019SAndroid Build Coastguard Worker ALU2(LINE)
175*d83cc019SAndroid Build Coastguard Worker ALU2(PLN)
176*d83cc019SAndroid Build Coastguard Worker ALU3(MAD)
177*d83cc019SAndroid Build Coastguard Worker
178*d83cc019SAndroid Build Coastguard Worker ROUND(RNDZ)
179*d83cc019SAndroid Build Coastguard Worker ROUND(RNDE)
180*d83cc019SAndroid Build Coastguard Worker
181*d83cc019SAndroid Build Coastguard Worker #undef ALU1
182*d83cc019SAndroid Build Coastguard Worker #undef ALU2
183*d83cc019SAndroid Build Coastguard Worker #undef ALU3
184*d83cc019SAndroid Build Coastguard Worker #undef ROUND
185*d83cc019SAndroid Build Coastguard Worker
186*d83cc019SAndroid Build Coastguard Worker
187*d83cc019SAndroid Build Coastguard Worker /* Helpers for SEND instruction:
188*d83cc019SAndroid Build Coastguard Worker */
189*d83cc019SAndroid Build Coastguard Worker void brw_set_sampler_message(struct brw_compile *p,
190*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
191*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
192*d83cc019SAndroid Build Coastguard Worker unsigned sampler,
193*d83cc019SAndroid Build Coastguard Worker unsigned msg_type,
194*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
195*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
196*d83cc019SAndroid Build Coastguard Worker unsigned header_present,
197*d83cc019SAndroid Build Coastguard Worker unsigned simd_mode,
198*d83cc019SAndroid Build Coastguard Worker unsigned return_format);
199*d83cc019SAndroid Build Coastguard Worker
200*d83cc019SAndroid Build Coastguard Worker void brw_set_dp_read_message(struct brw_compile *p,
201*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
202*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
203*d83cc019SAndroid Build Coastguard Worker unsigned msg_control,
204*d83cc019SAndroid Build Coastguard Worker unsigned msg_type,
205*d83cc019SAndroid Build Coastguard Worker unsigned target_cache,
206*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
207*d83cc019SAndroid Build Coastguard Worker bool header_present,
208*d83cc019SAndroid Build Coastguard Worker unsigned response_length);
209*d83cc019SAndroid Build Coastguard Worker
210*d83cc019SAndroid Build Coastguard Worker void brw_set_dp_write_message(struct brw_compile *p,
211*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
212*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
213*d83cc019SAndroid Build Coastguard Worker unsigned msg_control,
214*d83cc019SAndroid Build Coastguard Worker unsigned msg_type,
215*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
216*d83cc019SAndroid Build Coastguard Worker bool header_present,
217*d83cc019SAndroid Build Coastguard Worker unsigned last_render_target,
218*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
219*d83cc019SAndroid Build Coastguard Worker unsigned end_of_thread,
220*d83cc019SAndroid Build Coastguard Worker unsigned send_commit_msg);
221*d83cc019SAndroid Build Coastguard Worker
222*d83cc019SAndroid Build Coastguard Worker void brw_urb_WRITE(struct brw_compile *p,
223*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
224*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
225*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
226*d83cc019SAndroid Build Coastguard Worker bool allocate,
227*d83cc019SAndroid Build Coastguard Worker bool used,
228*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
229*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
230*d83cc019SAndroid Build Coastguard Worker bool eot,
231*d83cc019SAndroid Build Coastguard Worker bool writes_complete,
232*d83cc019SAndroid Build Coastguard Worker unsigned offset,
233*d83cc019SAndroid Build Coastguard Worker unsigned swizzle);
234*d83cc019SAndroid Build Coastguard Worker
235*d83cc019SAndroid Build Coastguard Worker void brw_ff_sync(struct brw_compile *p,
236*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
237*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
238*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
239*d83cc019SAndroid Build Coastguard Worker bool allocate,
240*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
241*d83cc019SAndroid Build Coastguard Worker bool eot);
242*d83cc019SAndroid Build Coastguard Worker
243*d83cc019SAndroid Build Coastguard Worker void brw_svb_write(struct brw_compile *p,
244*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
245*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
246*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
247*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
248*d83cc019SAndroid Build Coastguard Worker bool send_commit_msg);
249*d83cc019SAndroid Build Coastguard Worker
250*d83cc019SAndroid Build Coastguard Worker void brw_fb_WRITE(struct brw_compile *p,
251*d83cc019SAndroid Build Coastguard Worker int dispatch_width,
252*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
253*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
254*d83cc019SAndroid Build Coastguard Worker unsigned msg_control,
255*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
256*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
257*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
258*d83cc019SAndroid Build Coastguard Worker bool eot,
259*d83cc019SAndroid Build Coastguard Worker bool header_present);
260*d83cc019SAndroid Build Coastguard Worker
261*d83cc019SAndroid Build Coastguard Worker void brw_SAMPLE(struct brw_compile *p,
262*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
263*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
264*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
265*d83cc019SAndroid Build Coastguard Worker unsigned binding_table_index,
266*d83cc019SAndroid Build Coastguard Worker unsigned sampler,
267*d83cc019SAndroid Build Coastguard Worker unsigned writemask,
268*d83cc019SAndroid Build Coastguard Worker unsigned msg_type,
269*d83cc019SAndroid Build Coastguard Worker unsigned response_length,
270*d83cc019SAndroid Build Coastguard Worker unsigned msg_length,
271*d83cc019SAndroid Build Coastguard Worker unsigned header_present,
272*d83cc019SAndroid Build Coastguard Worker unsigned simd_mode,
273*d83cc019SAndroid Build Coastguard Worker unsigned return_format);
274*d83cc019SAndroid Build Coastguard Worker
275*d83cc019SAndroid Build Coastguard Worker void brw_math( struct brw_compile *p,
276*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
277*d83cc019SAndroid Build Coastguard Worker unsigned function,
278*d83cc019SAndroid Build Coastguard Worker unsigned msg_reg_nr,
279*d83cc019SAndroid Build Coastguard Worker struct brw_reg src,
280*d83cc019SAndroid Build Coastguard Worker unsigned data_type,
281*d83cc019SAndroid Build Coastguard Worker unsigned precision );
282*d83cc019SAndroid Build Coastguard Worker
283*d83cc019SAndroid Build Coastguard Worker void brw_math2(struct brw_compile *p,
284*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
285*d83cc019SAndroid Build Coastguard Worker unsigned function,
286*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
287*d83cc019SAndroid Build Coastguard Worker struct brw_reg src1);
288*d83cc019SAndroid Build Coastguard Worker
289*d83cc019SAndroid Build Coastguard Worker void brw_oword_block_read(struct brw_compile *p,
290*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
291*d83cc019SAndroid Build Coastguard Worker struct brw_reg mrf,
292*d83cc019SAndroid Build Coastguard Worker uint32_t offset,
293*d83cc019SAndroid Build Coastguard Worker uint32_t bind_table_index);
294*d83cc019SAndroid Build Coastguard Worker
295*d83cc019SAndroid Build Coastguard Worker void brw_oword_block_read_scratch(struct brw_compile *p,
296*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
297*d83cc019SAndroid Build Coastguard Worker struct brw_reg mrf,
298*d83cc019SAndroid Build Coastguard Worker int num_regs,
299*d83cc019SAndroid Build Coastguard Worker unsigned offset);
300*d83cc019SAndroid Build Coastguard Worker
301*d83cc019SAndroid Build Coastguard Worker void brw_oword_block_write_scratch(struct brw_compile *p,
302*d83cc019SAndroid Build Coastguard Worker struct brw_reg mrf,
303*d83cc019SAndroid Build Coastguard Worker int num_regs,
304*d83cc019SAndroid Build Coastguard Worker unsigned offset);
305*d83cc019SAndroid Build Coastguard Worker
306*d83cc019SAndroid Build Coastguard Worker void brw_shader_time_add(struct brw_compile *p,
307*d83cc019SAndroid Build Coastguard Worker int mrf,
308*d83cc019SAndroid Build Coastguard Worker uint32_t surf_index);
309*d83cc019SAndroid Build Coastguard Worker
310*d83cc019SAndroid Build Coastguard Worker /* If/else/endif. Works by manipulating the execution flags on each
311*d83cc019SAndroid Build Coastguard Worker * channel.
312*d83cc019SAndroid Build Coastguard Worker */
313*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_IF(struct brw_compile *p,
314*d83cc019SAndroid Build Coastguard Worker unsigned execute_size);
315*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *gen6_IF(struct brw_compile *p, uint32_t conditional,
316*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0, struct brw_reg src1);
317*d83cc019SAndroid Build Coastguard Worker
318*d83cc019SAndroid Build Coastguard Worker void brw_ELSE(struct brw_compile *p);
319*d83cc019SAndroid Build Coastguard Worker void brw_ENDIF(struct brw_compile *p);
320*d83cc019SAndroid Build Coastguard Worker
321*d83cc019SAndroid Build Coastguard Worker /* DO/WHILE loops:
322*d83cc019SAndroid Build Coastguard Worker */
323*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_DO(struct brw_compile *p,
324*d83cc019SAndroid Build Coastguard Worker unsigned execute_size);
325*d83cc019SAndroid Build Coastguard Worker
326*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_WHILE(struct brw_compile *p);
327*d83cc019SAndroid Build Coastguard Worker
328*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_BREAK(struct brw_compile *p);
329*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *brw_CONT(struct brw_compile *p);
330*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *gen6_CONT(struct brw_compile *p);
331*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *gen6_HALT(struct brw_compile *p);
332*d83cc019SAndroid Build Coastguard Worker /* Forward jumps:
333*d83cc019SAndroid Build Coastguard Worker */
334*d83cc019SAndroid Build Coastguard Worker void brw_land_fwd_jump(struct brw_compile *p, int jmp_insn_idx);
335*d83cc019SAndroid Build Coastguard Worker
336*d83cc019SAndroid Build Coastguard Worker
337*d83cc019SAndroid Build Coastguard Worker
338*d83cc019SAndroid Build Coastguard Worker void brw_NOP(struct brw_compile *p);
339*d83cc019SAndroid Build Coastguard Worker
340*d83cc019SAndroid Build Coastguard Worker void brw_WAIT(struct brw_compile *p);
341*d83cc019SAndroid Build Coastguard Worker
342*d83cc019SAndroid Build Coastguard Worker /* Special case: there is never a destination, execution size will be
343*d83cc019SAndroid Build Coastguard Worker * taken from src0:
344*d83cc019SAndroid Build Coastguard Worker */
345*d83cc019SAndroid Build Coastguard Worker void brw_CMP(struct brw_compile *p,
346*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest,
347*d83cc019SAndroid Build Coastguard Worker unsigned conditional,
348*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0,
349*d83cc019SAndroid Build Coastguard Worker struct brw_reg src1);
350*d83cc019SAndroid Build Coastguard Worker
351*d83cc019SAndroid Build Coastguard Worker /***********************************************************************
352*d83cc019SAndroid Build Coastguard Worker * brw_eu_util.c:
353*d83cc019SAndroid Build Coastguard Worker */
354*d83cc019SAndroid Build Coastguard Worker
355*d83cc019SAndroid Build Coastguard Worker void brw_copy_indirect_to_indirect(struct brw_compile *p,
356*d83cc019SAndroid Build Coastguard Worker struct brw_indirect dst_ptr,
357*d83cc019SAndroid Build Coastguard Worker struct brw_indirect src_ptr,
358*d83cc019SAndroid Build Coastguard Worker unsigned count);
359*d83cc019SAndroid Build Coastguard Worker
360*d83cc019SAndroid Build Coastguard Worker void brw_copy_from_indirect(struct brw_compile *p,
361*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
362*d83cc019SAndroid Build Coastguard Worker struct brw_indirect ptr,
363*d83cc019SAndroid Build Coastguard Worker unsigned count);
364*d83cc019SAndroid Build Coastguard Worker
365*d83cc019SAndroid Build Coastguard Worker void brw_copy4(struct brw_compile *p,
366*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
367*d83cc019SAndroid Build Coastguard Worker struct brw_reg src,
368*d83cc019SAndroid Build Coastguard Worker unsigned count);
369*d83cc019SAndroid Build Coastguard Worker
370*d83cc019SAndroid Build Coastguard Worker void brw_copy8(struct brw_compile *p,
371*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
372*d83cc019SAndroid Build Coastguard Worker struct brw_reg src,
373*d83cc019SAndroid Build Coastguard Worker unsigned count);
374*d83cc019SAndroid Build Coastguard Worker
375*d83cc019SAndroid Build Coastguard Worker void brw_math_invert( struct brw_compile *p,
376*d83cc019SAndroid Build Coastguard Worker struct brw_reg dst,
377*d83cc019SAndroid Build Coastguard Worker struct brw_reg src);
378*d83cc019SAndroid Build Coastguard Worker
379*d83cc019SAndroid Build Coastguard Worker void brw_set_src1(struct brw_compile *p,
380*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
381*d83cc019SAndroid Build Coastguard Worker struct brw_reg reg);
382*d83cc019SAndroid Build Coastguard Worker
383*d83cc019SAndroid Build Coastguard Worker void brw_set_uip_jip(struct brw_compile *p);
384*d83cc019SAndroid Build Coastguard Worker
385*d83cc019SAndroid Build Coastguard Worker uint32_t brw_swap_cmod(uint32_t cmod);
386*d83cc019SAndroid Build Coastguard Worker
387*d83cc019SAndroid Build Coastguard Worker void
388*d83cc019SAndroid Build Coastguard Worker brw_set_3src_dest(struct brw_compile *p,
389*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
390*d83cc019SAndroid Build Coastguard Worker struct brw_reg dest);
391*d83cc019SAndroid Build Coastguard Worker void
392*d83cc019SAndroid Build Coastguard Worker brw_set_3src_src0(struct brw_compile *p,
393*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
394*d83cc019SAndroid Build Coastguard Worker struct brw_reg src0);
395*d83cc019SAndroid Build Coastguard Worker void
396*d83cc019SAndroid Build Coastguard Worker brw_set_3src_src1(struct brw_compile *p,
397*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
398*d83cc019SAndroid Build Coastguard Worker struct brw_reg src1);
399*d83cc019SAndroid Build Coastguard Worker void
400*d83cc019SAndroid Build Coastguard Worker brw_set_3src_src2(struct brw_compile *p,
401*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *insn,
402*d83cc019SAndroid Build Coastguard Worker struct brw_reg src2);
403*d83cc019SAndroid Build Coastguard Worker
404*d83cc019SAndroid Build Coastguard Worker /* brw_eu_compact.c */
405*d83cc019SAndroid Build Coastguard Worker void brw_init_compaction_tables(struct intel_context *intel);
406*d83cc019SAndroid Build Coastguard Worker void brw_compact_instructions(struct brw_compile *p);
407*d83cc019SAndroid Build Coastguard Worker void brw_uncompact_instruction(struct intel_context *intel,
408*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *dst,
409*d83cc019SAndroid Build Coastguard Worker struct brw_compact_instruction *src);
410*d83cc019SAndroid Build Coastguard Worker bool brw_try_compact_instruction(struct brw_compile *p,
411*d83cc019SAndroid Build Coastguard Worker struct brw_compact_instruction *dst,
412*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *src);
413*d83cc019SAndroid Build Coastguard Worker
414*d83cc019SAndroid Build Coastguard Worker void brw_debug_compact_uncompact(struct intel_context *intel,
415*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *orig,
416*d83cc019SAndroid Build Coastguard Worker struct brw_instruction *uncompacted);
417*d83cc019SAndroid Build Coastguard Worker
418*d83cc019SAndroid Build Coastguard Worker /* brw_optimize.c */
419*d83cc019SAndroid Build Coastguard Worker void brw_optimize(struct brw_compile *p);
420*d83cc019SAndroid Build Coastguard Worker void brw_remove_duplicate_mrf_moves(struct brw_compile *p);
421*d83cc019SAndroid Build Coastguard Worker void brw_remove_grf_to_mrf_moves(struct brw_compile *p);
422*d83cc019SAndroid Build Coastguard Worker
423*d83cc019SAndroid Build Coastguard Worker #ifdef __cplusplus
424*d83cc019SAndroid Build Coastguard Worker }
425*d83cc019SAndroid Build Coastguard Worker #endif
426*d83cc019SAndroid Build Coastguard Worker
427*d83cc019SAndroid Build Coastguard Worker #endif
428