xref: /aosp_15_r20/external/igt-gpu-tools/assembler/brw_eu.h (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
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