1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**************************************************************************
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2009 VMware, Inc.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved.
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software.
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL VMWARE, INC AND/OR ITS SUPPLIERS BE LIABLE FOR
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef TGSI_UREG_H
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define TGSI_UREG_H
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_compiler.h"
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_shader_tokens.h"
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h"
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgextern "C" {
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_program;
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_stream_output_info;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Almost a tgsi_src_register, but we need to pull in the Absolute
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * flag from the _ext token.  Indirect flag always implies ADDR[0].
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned File             : 4;  /* TGSI_FILE_ */
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned SwizzleX         : 2;  /* TGSI_SWIZZLE_ */
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned SwizzleY         : 2;  /* TGSI_SWIZZLE_ */
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned SwizzleZ         : 2;  /* TGSI_SWIZZLE_ */
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned SwizzleW         : 2;  /* TGSI_SWIZZLE_ */
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Indirect         : 1;  /* BOOL */
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned DimIndirect      : 1;  /* BOOL */
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Dimension        : 1;  /* BOOL */
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Absolute         : 1;  /* BOOL */
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Negate           : 1;  /* BOOL */
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned IndirectFile     : 4;  /* TGSI_FILE_ */
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned IndirectSwizzle  : 2;  /* TGSI_SWIZZLE_ */
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned DimIndFile       : 4;  /* TGSI_FILE_ */
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned DimIndSwizzle    : 2;  /* TGSI_SWIZZLE_ */
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      Index            : 16; /* SINT */
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      IndirectIndex    : 16; /* SINT */
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      DimensionIndex   : 16; /* SINT */
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      DimIndIndex      : 16; /* SINT */
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Very similar to a tgsi_dst_register, removing unsupported fields
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and adding a Saturate flag.  It's easier to push saturate into the
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * destination register than to try and create a _SAT variant of each
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instruction function.
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned File        : 4;  /* TGSI_FILE_ */
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned WriteMask   : 4;  /* TGSI_WRITEMASK_ */
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Indirect    : 1;  /* BOOL */
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Saturate    : 1;  /* BOOL */
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned Predicate   : 1;
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned PredNegate  : 1;  /* BOOL */
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned PredSwizzleX: 2;  /* TGSI_SWIZZLE_ */
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned PredSwizzleY: 2;  /* TGSI_SWIZZLE_ */
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned PredSwizzleZ: 2;  /* TGSI_SWIZZLE_ */
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned PredSwizzleW: 2;  /* TGSI_SWIZZLE_ */
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      Index       : 16; /* SINT */
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      IndirectIndex   : 16; /* SINT */
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int      IndirectSwizzle : 2;  /* TGSI_SWIZZLE_ */
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_context;
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_program *
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create( unsigned processor );
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct tgsi_token *
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_finalize( struct ureg_program * );
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Create and return a shader:
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid *
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader( struct ureg_program *,
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    struct pipe_context *pipe,
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org		    const struct pipe_stream_output_info *so );
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Alternately, return the built token stream and hand ownership of
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * that memory to the caller:
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct tgsi_token *
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_get_tokens( struct ureg_program *ureg,
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned *nr_tokens );
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Free the tokens created by ureg_get_tokens() */
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid ureg_free_tokens( const struct tgsi_token *tokens );
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_destroy( struct ureg_program * );
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Convenience routine:
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void *
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader_with_so_and_destroy( struct ureg_program *p,
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			struct pipe_context *pipe,
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org			const struct pipe_stream_output_info *so )
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   void *result = ureg_create_shader( p, pipe, so );
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_destroy( p );
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return result;
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void *
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_create_shader_and_destroy( struct ureg_program *p,
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct pipe_context *pipe )
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_create_shader_with_so_and_destroy(p, pipe, NULL);
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Build shader properties:
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_input_prim(struct ureg_program *ureg,
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned input_prim);
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_output_prim(struct ureg_program *ureg,
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             unsigned output_prim);
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_gs_max_vertices(struct ureg_program *ureg,
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned max_vertices);
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_coord_origin(struct ureg_program *ureg,
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned fs_coord_origin);
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_coord_pixel_center(struct ureg_program *ureg,
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned fs_coord_pixel_center);
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_color0_writes_all_cbufs(struct ureg_program *ureg,
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                            unsigned fs_color0_writes_all_cbufs);
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_property_fs_depth_layout(struct ureg_program *ureg,
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned fs_depth_layout);
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Build shader declarations:
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input_cyl_centroid(struct ureg_program *,
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_name,
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_index,
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned interp_mode,
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned cylindrical_wrap,
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned centroid);
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input_cyl(struct ureg_program *ureg,
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_name,
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_index,
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned interp_mode,
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned cylindrical_wrap)
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_fs_input_cyl_centroid(ureg,
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 semantic_name,
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 semantic_index,
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 interp_mode,
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 cylindrical_wrap,
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 0);
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_fs_input(struct ureg_program *ureg,
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned semantic_name,
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned semantic_index,
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned interp_mode)
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_fs_input_cyl_centroid(ureg,
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 semantic_name,
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 semantic_index,
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 interp_mode,
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                 0, 0);
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_vs_input( struct ureg_program *,
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    unsigned index );
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_gs_input(struct ureg_program *,
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned index,
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned semantic_name,
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned semantic_index);
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_system_value(struct ureg_program *,
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned index,
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_name,
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned semantic_index);
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_output_masked( struct ureg_program *,
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         unsigned semantic_name,
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         unsigned semantic_index,
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         unsigned usage_mask );
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_output( struct ureg_program *,
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  unsigned semantic_name,
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  unsigned semantic_index );
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate( struct ureg_program *,
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     const float *v,
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     unsigned nr );
246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_uint( struct ureg_program *,
249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          const unsigned *v,
250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                          unsigned nr );
251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_block_uint( struct ureg_program *,
254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                const unsigned *v,
255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                unsigned nr );
256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_immediate_int( struct ureg_program *,
259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         const int *v,
260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         unsigned nr );
261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_constant2D(struct ureg_program *ureg,
264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     unsigned first,
265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     unsigned last,
266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     unsigned index2D);
267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_constant( struct ureg_program *,
270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    unsigned index );
271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_temporary( struct ureg_program * );
274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/**
276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Emit a temporary with the LOCAL declaration flag set.  For use when
277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the register value is not required to be preserved across
278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * subroutine boundaries.
279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_local_temporary( struct ureg_program * );
282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_release_temporary( struct ureg_program *ureg,
285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        struct ureg_dst tmp );
286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_address( struct ureg_program * );
289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_dst
291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_predicate(struct ureg_program *);
292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Supply an index to the sampler declaration as this is the hook to
294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the external pipe_sampler state.  Users of this function probably
295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * don't want just any sampler, but a specific one which they've set
296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * up state for in the context.
297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_sampler( struct ureg_program *,
300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                   unsigned index );
301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_src
303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_DECL_sampler_view(struct ureg_program *,
304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned index,
305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned target,
306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned return_type_x,
307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned return_type_y,
308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned return_type_z,
309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       unsigned return_type_w );
310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4f( struct ureg_program *ureg,
314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float a, float b,
315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float c, float d)
316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float v[4];
318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[3] = d;
322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate( ureg, v, 4 );
323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3f( struct ureg_program *ureg,
327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float a, float b,
328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float c)
329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float v[3];
331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate( ureg, v, 3 );
335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2f( struct ureg_program *ureg,
339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float a, float b)
340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float v[2];
342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate( ureg, v, 2 );
345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1f( struct ureg_program *ureg,
349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                       float a)
350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   float v[1];
352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate( ureg, v, 1 );
354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4u( struct ureg_program *ureg,
358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned a, unsigned b,
359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned c, unsigned d)
360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned v[4];
362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[3] = d;
366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_uint( ureg, v, 4 );
367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3u( struct ureg_program *ureg,
371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned a, unsigned b,
372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned c)
373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned v[3];
375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_uint( ureg, v, 3 );
379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2u( struct ureg_program *ureg,
383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned a, unsigned b)
384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned v[2];
386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_uint( ureg, v, 2 );
389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1u( struct ureg_program *ureg,
393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            unsigned a)
394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_uint( ureg, &a, 1 );
396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm4i( struct ureg_program *ureg,
400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int a, int b,
401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int c, int d)
402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int v[4];
404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[3] = d;
408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_int( ureg, v, 4 );
409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm3i( struct ureg_program *ureg,
413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int a, int b,
414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int c)
415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int v[3];
417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[2] = c;
420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_int( ureg, v, 3 );
421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm2i( struct ureg_program *ureg,
425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int a, int b)
426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   int v[2];
428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[0] = a;
429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   v[1] = b;
430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_int( ureg, v, 2 );
431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_imm1i( struct ureg_program *ureg,
435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            int a)
436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_DECL_immediate_int( ureg, &a, 1 );
438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Functions for patching up labels
442f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
443f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
444f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
445f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Will return a number which can be used in a label to point to the
446f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next instruction to be emitted.
447f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
448f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgunsigned
449f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_get_instruction_number( struct ureg_program *ureg );
450f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
451f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
452f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Patch a given label (expressed as a token number) to point to a
453f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * given instruction (expressed as an instruction number).
454f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
455f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Labels are obtained from instruction emitters, eg ureg_CAL().
456f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Instruction numbers are obtained from ureg_get_instruction_number(),
457f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * above.
458f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
459f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
460f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_fixup_label(struct ureg_program *ureg,
461f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned label_token,
462f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                 unsigned instruction_number );
463f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
464f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
465f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Generic instruction emitter.  Use if you need to pass the opcode as
466f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * a parameter, rather than using the emit_OP() variants below.
467f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
468f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
469f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_insn(struct ureg_program *ureg,
470f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          unsigned opcode,
471f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          const struct ureg_dst *dst,
472f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          unsigned nr_dst,
473f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          const struct ureg_src *src,
474f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org          unsigned nr_src );
475f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
476f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
477f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
478f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_tex_insn(struct ureg_program *ureg,
479f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              unsigned opcode,
480f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              const struct ureg_dst *dst,
481f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              unsigned nr_dst,
482f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              unsigned target,
483f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              const struct tgsi_texture_offset *texoffsets,
484f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              unsigned nr_offset,
485f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              const struct ureg_src *src,
486f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              unsigned nr_src );
487f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
488f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
489f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
490f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_label_insn(struct ureg_program *ureg,
491f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned opcode,
492f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                const struct ureg_src *src,
493f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned nr_src,
494f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned *label);
495f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
496f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
497f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
498f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Internal instruction helpers, don't call these directly:
499f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
500f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
501f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_emit_insn_result {
502f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn_token;       /*< Used to fixup insn size. */
503f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned extended_token;   /*< Used to set the Extended bit, usually the same as insn_token. */
504f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
505f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
506f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct ureg_emit_insn_result
507f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_insn(struct ureg_program *ureg,
508f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned opcode,
509f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               boolean saturate,
510f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               boolean predicate,
511f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               boolean pred_negate,
512f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned pred_swizzle_x,
513f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned pred_swizzle_y,
514f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned pred_swizzle_z,
515f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned pred_swizzle_w,
516f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned num_dst,
517f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned num_src );
518f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
519f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
520f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_label(struct ureg_program *ureg,
521f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned insn_token,
522f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned *label_token );
523f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
524f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
525f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_texture(struct ureg_program *ureg,
526f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  unsigned insn_token,
527f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  unsigned target, unsigned num_offsets);
528f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
529f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
530f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_texture_offset(struct ureg_program *ureg,
531f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         const struct tgsi_texture_offset *offset);
532f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
533f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
534f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_dst( struct ureg_program *ureg,
535f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               struct ureg_dst dst );
536f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
537f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
538f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_emit_src( struct ureg_program *ureg,
539f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               struct ureg_src src );
540f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
541f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid
542f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_fixup_insn_size(struct ureg_program *ureg,
543f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                     unsigned insn );
544f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
545f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
546f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP00( op )                                              \
547f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg )       \
548f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                               \
549f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                          \
550f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                         \
551f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                       \
552f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
553f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
554f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
555f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_X,               \
556f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_Y,               \
557f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_Z,               \
558f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_W,               \
559f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  0,                            \
560f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  0).insn_token;                \
561f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                          \
562f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
563f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
564f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP01( op )                                              \
565f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,        \
566f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src )             \
567f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                               \
568f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                          \
569f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                         \
570f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                       \
571f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
572f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
573f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  FALSE,                        \
574f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_X,               \
575f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_Y,               \
576f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_Z,               \
577f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  TGSI_SWIZZLE_W,               \
578f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  0,                            \
579f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1).insn_token;                \
580f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src );                                  \
581f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                          \
582f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
583f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
584f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP00_LBL( op )                                          \
585f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,        \
586f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned *label_token )           \
587f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                               \
588f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                          \
589f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_emit_insn_result insn;                           \
590f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   insn = ureg_emit_insn(ureg,                                  \
591f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         opcode,                                \
592f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
593f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
594f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
595f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_X,                        \
596f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_Y,                        \
597f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_Z,                        \
598f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_W,                        \
599f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         0,                                     \
600f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         0);                                    \
601f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_label( ureg, insn.extended_token, label_token );   \
602f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn.insn_token );               \
603f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
604f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
605f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP01_LBL( op )                                          \
606f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,        \
607f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src,              \
608f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned *label_token )          \
609f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                               \
610f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                          \
611f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_emit_insn_result insn;                           \
612f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   insn = ureg_emit_insn(ureg,                                  \
613f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         opcode,                                \
614f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
615f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
616f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         FALSE,                                 \
617f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_X,                        \
618f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_Y,                        \
619f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_Z,                        \
620f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         TGSI_SWIZZLE_W,                        \
621f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         0,                                     \
622f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         1);                                    \
623f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_label( ureg, insn.extended_token, label_token );   \
624f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src );                                  \
625f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn.insn_token );               \
626f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
627f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
628f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP10( op )                                                      \
629f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
630f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst )                     \
631f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
632f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
633f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
634f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
635f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
636f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
637f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
638f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
639f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
640f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
641f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
642f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
643f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  0).insn_token;                        \
644f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
645f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
646f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
647f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
648f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
649f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP11( op )                                                      \
650f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
651f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
652f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src )                     \
653f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
654f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
655f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
656f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
657f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
658f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
659f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
660f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
661f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
662f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
663f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
664f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
665f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1).insn_token;                        \
666f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
667f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src );                                          \
668f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
669f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
670f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
671f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP12( op )                                                      \
672f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
673f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
674f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
675f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1 )                    \
676f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
677f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
678f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
679f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
680f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
681f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
682f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
683f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
684f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
685f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
686f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
687f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
688f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  2).insn_token;                        \
689f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
690f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
691f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
692f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
693f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
694f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
695f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP12_TEX( op )                                                  \
696f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
697f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
698f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned target,                          \
699f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
700f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1 )                    \
701f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
702f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
703f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_emit_insn_result insn;                                   \
704f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   insn = ureg_emit_insn(ureg,                                          \
705f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         opcode,                                        \
706f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.Saturate,                                  \
707f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.Predicate,                                 \
708f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredNegate,                                \
709f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleX,                              \
710f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleY,                              \
711f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleZ,                              \
712f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleW,                              \
713f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         1,                                             \
714f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         2);                                            \
715f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_texture( ureg, insn.extended_token, target, 0 );		\
716f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
717f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
718f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
719f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn.insn_token );                       \
720f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
721f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
722f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP13( op )                                                      \
723f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
724f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
725f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
726f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1,                     \
727f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src2 )                    \
728f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
729f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
730f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
731f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
732f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
733f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
734f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
735f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
736f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
737f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
738f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
739f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
740f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  3).insn_token;                        \
741f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
742f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
743f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
744f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src2 );                                         \
745f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
746f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
747f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
748f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP14_TEX( op )                                                  \
749f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
750f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
751f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              unsigned target,                          \
752f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
753f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1,                     \
754f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src2,                     \
755f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src3 )                    \
756f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
757f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
758f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_emit_insn_result insn;                                   \
759f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   insn = ureg_emit_insn(ureg,                                          \
760f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         opcode,                                        \
761f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.Saturate,                                  \
762f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.Predicate,                                 \
763f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredNegate,                                \
764f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleX,                              \
765f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleY,                              \
766f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleZ,                              \
767f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         dst.PredSwizzleW,                              \
768f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         1,                                             \
769f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                         4);                                            \
770f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_texture( ureg, insn.extended_token, target, 0 );		\
771f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
772f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
773f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
774f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src2 );                                         \
775f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src3 );                                         \
776f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn.insn_token );                       \
777f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
778f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
779f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
780f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP14( op )                                                      \
781f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
782f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
783f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
784f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1,                     \
785f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src2,                     \
786f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src3 )                    \
787f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
788f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
789f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
790f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
791f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
792f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
793f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
794f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
795f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
796f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
797f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
798f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
799f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  4).insn_token;                        \
800f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
801f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
802f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
803f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src2 );                                         \
804f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src3 );                                         \
805f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
806f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
807f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
808f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
809f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define OP15( op )                                                      \
810f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE void ureg_##op( struct ureg_program *ureg,                \
811f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_dst dst,                      \
812f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src0,                     \
813f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src1,                     \
814f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src2,                     \
815f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src3,                     \
816f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              struct ureg_src src4 )                    \
817f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{                                                                       \
818f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned opcode = TGSI_OPCODE_##op;                                  \
819f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned insn = ureg_emit_insn(ureg,                                 \
820f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  opcode,                               \
821f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Saturate,                         \
822f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.Predicate,                        \
823f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredNegate,                       \
824f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleX,                     \
825f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleY,                     \
826f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleZ,                     \
827f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  dst.PredSwizzleW,                     \
828f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  1,                                    \
829f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                  5).insn_token;                        \
830f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_dst( ureg, dst );                                          \
831f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src0 );                                         \
832f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src1 );                                         \
833f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src2 );                                         \
834f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src3 );                                         \
835f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_emit_src( ureg, src4 );                                         \
836f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   ureg_fixup_insn_size( ureg, insn );                                  \
837f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
838f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
839f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
840f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Use a template include to generate a correctly-typed ureg_OP()
841f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * function for each TGSI opcode:
842f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
843f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "tgsi_opcode_tmp.h"
844f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
845f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
846f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/***********************************************************************
847f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Inline helpers for manipulating register structs:
848f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
849f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
850f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_negate( struct ureg_src reg )
851f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
852f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
853f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Negate ^= 1;
854f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
855f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
856f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
857f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
858f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_abs( struct ureg_src reg )
859f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
860f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
861f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Absolute = 1;
862f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Negate = 0;
863f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
864f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
865f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
866f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
867f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_swizzle( struct ureg_src reg,
868f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              int x, int y, int z, int w )
869f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
870f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   unsigned swz = ( (reg.SwizzleX << 0) |
871f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    (reg.SwizzleY << 2) |
872f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    (reg.SwizzleZ << 4) |
873f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    (reg.SwizzleW << 6));
874f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
875f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
876f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(x < 4);
877f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(y < 4);
878f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(z < 4);
879f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(w < 4);
880f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
881f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.SwizzleX = (swz >> (x*2)) & 0x3;
882f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.SwizzleY = (swz >> (y*2)) & 0x3;
883f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.SwizzleZ = (swz >> (z*2)) & 0x3;
884f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.SwizzleW = (swz >> (w*2)) & 0x3;
885f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
886f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
887f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
888f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
889f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_scalar( struct ureg_src reg, int x )
890f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
891f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return ureg_swizzle(reg, x, x, x, x);
892f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
893f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
894f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
895f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_writemask( struct ureg_dst reg,
896f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                unsigned writemask )
897f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
898f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
899f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.WriteMask &= writemask;
900f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
901f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
902f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
903f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
904f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_saturate( struct ureg_dst reg )
905f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
906f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
907f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Saturate = 1;
908f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
909f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
910f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
911f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
912f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_predicate(struct ureg_dst reg,
913f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               boolean negate,
914f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned swizzle_x,
915f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned swizzle_y,
916f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned swizzle_z,
917f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org               unsigned swizzle_w)
918f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
919f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
920f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Predicate = 1;
921f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.PredNegate = negate;
922f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.PredSwizzleX = swizzle_x;
923f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.PredSwizzleY = swizzle_y;
924f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.PredSwizzleZ = swizzle_z;
925f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.PredSwizzleW = swizzle_w;
926f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
927f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
928f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
929f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
930f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_indirect( struct ureg_dst reg, struct ureg_src addr )
931f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
932f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
933f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(addr.File == TGSI_FILE_ADDRESS);
934f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Indirect = 1;
935f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.IndirectIndex = addr.Index;
936f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.IndirectSwizzle = addr.SwizzleX;
937f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
938f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
939f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
940f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
941f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_indirect( struct ureg_src reg, struct ureg_src addr )
942f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
943f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
944f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(addr.File == TGSI_FILE_ADDRESS || addr.File == TGSI_FILE_TEMPORARY);
945f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Indirect = 1;
946f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.IndirectFile = addr.File;
947f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.IndirectIndex = addr.Index;
948f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.IndirectSwizzle = addr.SwizzleX;
949f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
950f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
951f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
952f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
953f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_dimension( struct ureg_src reg, int index )
954f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
955f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
956f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Dimension = 1;
957f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimIndirect = 0;
958f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimensionIndex = index;
959f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
960f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
961f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
962f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
963f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
964f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_dimension_indirect( struct ureg_src reg, struct ureg_src addr,
965f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             int index )
966f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
967f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(reg.File != TGSI_FILE_NULL);
968f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.Dimension = 1;
969f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimIndirect = 1;
970f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimensionIndex = index;
971f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimIndFile = addr.File;
972f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimIndIndex = addr.Index;
973f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   reg.DimIndSwizzle = addr.SwizzleX;
974f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return reg;
975f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
976f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
977f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
978f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst( struct ureg_src src )
979f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
980f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_dst dst;
981f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
982f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(!src.Indirect || src.IndirectFile == TGSI_FILE_ADDRESS);
983f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
984f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.File      = src.File;
985f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.WriteMask = TGSI_WRITEMASK_XYZW;
986f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Indirect  = src.Indirect;
987f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.IndirectIndex = src.IndirectIndex;
988f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.IndirectSwizzle = src.IndirectSwizzle;
989f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Saturate  = 0;
990f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Predicate = 0;
991f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredNegate = 0;
992f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleX = TGSI_SWIZZLE_X;
993f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleY = TGSI_SWIZZLE_Y;
994f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleZ = TGSI_SWIZZLE_Z;
995f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleW = TGSI_SWIZZLE_W;
996f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Index     = src.Index;
997f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
998f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dst;
999f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1000f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1001f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
1002f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_register(unsigned file,
1003f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                  unsigned index)
1004f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1005f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_src src;
1006f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1007f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.File = file;
1008f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleX = TGSI_SWIZZLE_X;
1009f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleY = TGSI_SWIZZLE_Y;
1010f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleZ = TGSI_SWIZZLE_Z;
1011f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleW = TGSI_SWIZZLE_W;
1012f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Indirect = 0;
1013f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectFile = TGSI_FILE_NULL;
1014f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectIndex = 0;
1015f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectSwizzle = 0;
1016f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Absolute = 0;
1017f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Index = index;
1018f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Negate = 0;
1019f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Dimension = 0;
1020f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimensionIndex = 0;
1021f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndirect = 0;
1022f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndFile = TGSI_FILE_NULL;
1023f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndIndex = 0;
1024f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndSwizzle = 0;
1025f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1026f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src;
1027f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1028f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1029f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
1030f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src( struct ureg_dst dst )
1031f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1032f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_src src;
1033f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1034f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.File      = dst.File;
1035f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleX  = TGSI_SWIZZLE_X;
1036f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleY  = TGSI_SWIZZLE_Y;
1037f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleZ  = TGSI_SWIZZLE_Z;
1038f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleW  = TGSI_SWIZZLE_W;
1039f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Indirect  = dst.Indirect;
1040f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectFile = TGSI_FILE_ADDRESS;
1041f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectIndex = dst.IndirectIndex;
1042f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectSwizzle = dst.IndirectSwizzle;
1043f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Absolute  = 0;
1044f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Index     = dst.Index;
1045f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Negate    = 0;
1046f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Dimension = 0;
1047f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimensionIndex = 0;
1048f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndirect = 0;
1049f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndFile = TGSI_FILE_NULL;
1050f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndIndex = 0;
1051f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndSwizzle = 0;
1052f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1053f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src;
1054f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1055f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1056f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1057f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1058f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_dst
1059f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_undef( void )
1060f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1061f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_dst dst;
1062f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1063f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.File      = TGSI_FILE_NULL;
1064f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.WriteMask = 0;
1065f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Indirect  = 0;
1066f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.IndirectIndex = 0;
1067f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.IndirectSwizzle = 0;
1068f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Saturate  = 0;
1069f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Predicate = 0;
1070f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredNegate = 0;
1071f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleX = TGSI_SWIZZLE_X;
1072f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleY = TGSI_SWIZZLE_Y;
1073f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleZ = TGSI_SWIZZLE_Z;
1074f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.PredSwizzleW = TGSI_SWIZZLE_W;
1075f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   dst.Index     = 0;
1076f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1077f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dst;
1078f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1079f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1080f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE struct ureg_src
1081f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_undef( void )
1082f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1083f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct ureg_src src;
1084f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1085f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.File      = TGSI_FILE_NULL;
1086f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleX  = 0;
1087f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleY  = 0;
1088f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleZ  = 0;
1089f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.SwizzleW  = 0;
1090f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Indirect  = 0;
1091f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectFile = TGSI_FILE_NULL;
1092f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectIndex = 0;
1093f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.IndirectSwizzle = 0;
1094f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Absolute  = 0;
1095f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Index     = 0;
1096f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Negate    = 0;
1097f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.Dimension = 0;
1098f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimensionIndex = 0;
1099f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndirect = 0;
1100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndFile = TGSI_FILE_NULL;
1101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndIndex = 0;
1102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   src.DimIndSwizzle = 0;
1103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src;
1105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE boolean
1108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_src_is_undef( struct ureg_src src )
1109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return src.File == TGSI_FILE_NULL;
1111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic INLINE boolean
1114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgureg_dst_is_undef( struct ureg_dst dst )
1115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
1116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return dst.File == TGSI_FILE_NULL;
1117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifdef __cplusplus
1121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
1122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
1123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
1124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
1125