1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"),
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * on the rights to use, copy, modify, merge, publish, distribute, sub
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * license, and/or sell copies of the Software, and to permit persons to whom
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the Software is furnished to do so, subject to the following conditions:
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software.
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE.
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef R600_ASM_H
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define R600_ASM_H
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "r600.h"
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_vertex_element;
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_context;
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_alu_src {
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			sel;
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			chan;
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			neg;
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			abs;
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			rel;
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			kc_bank;
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	uint32_t			value;
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_alu_dst {
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			sel;
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			chan;
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			clamp;
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			write;
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			rel;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_alu {
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		list;
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_alu_src		src[3];
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_alu_dst		dst;
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			inst;
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			last;
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			is_op3;
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			execute_mask;
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			update_pred;
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			pred_sel;
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			bank_swizzle;
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			bank_swizzle_force;
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			omod;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned                        index_mode;
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_tex {
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		list;
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			inst;
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			resource_id;
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_gpr;
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_rel;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_gpr;
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_rel;
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_x;
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_y;
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_z;
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_w;
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			lod_bias;
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			coord_type_x;
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			coord_type_y;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			coord_type_z;
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			coord_type_w;
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			offset_x;
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			offset_y;
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			offset_z;
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			sampler_id;
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_sel_x;
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_sel_y;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_sel_z;
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_sel_w;
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_vtx {
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		list;
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			inst;
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			fetch_type;
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			buffer_id;
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_gpr;
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			src_sel_x;
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			mega_fetch_count;
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_gpr;
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_x;
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_y;
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_z;
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			dst_sel_w;
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			use_const_fields;
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			data_format;
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			num_format_all;
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			format_comp_all;
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			srf_mode_all;
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			offset;
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			endian;
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_output {
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			array_base;
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			array_size;
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			comp_mask;
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			type;
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			end_of_program;
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	/* CF_INST. This is already bit-shifted and only needs to be or'd for bytecode. */
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			inst;
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			elem_size;
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			gpr;
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			swizzle_x;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			swizzle_y;
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			swizzle_z;
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			swizzle_w;
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			burst_count;
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			barrier;
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_kcache {
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			bank;
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			mode;
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			addr;
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* A value of CF_NATIVE in r600_bytecode_cf::inst means that this instruction
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * has already been encoded, and the encoding has been stored in
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * r600_bytecode::isa.  This is used by the LLVM backend to emit CF instructions
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * e.g. RAT_WRITE_* that can't be properly represented by struct
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * r600_bytecode_cf.
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define CF_NATIVE ~0
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode_cf {
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		list;
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	/* CF_INST. This is already bit-shifted and only needs to be or'd for bytecode. */
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			inst;
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			addr;
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			ndw;
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			id;
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			cond;
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			pop_count;
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			cf_addr; /* control flow addr */
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_kcache		kcache[4];
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			r6xx_uses_waterfall;
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			eg_alu_extended;
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		alu;
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		tex;
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		vtx;
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_output		output;
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_alu		*curr_bs_head;
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_alu		*prev_bs_head;
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_alu		*prev2_bs_head;
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned isa[2];
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_NONE				0
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_IF				1
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_LOOP				2
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_REP				3
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_PUSH_VPM			4
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FC_PUSH_WQM			5
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_cf_stack_entry {
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				type;
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_cf		*start;
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_cf		**mid; /* used to store the else point */
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				num_mid;
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define SQ_MAX_CALL_DEPTH 0x00000020
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_cf_callstack {
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			fc_sp_before_entry;
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				sub_desc_index;
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				current;
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				max;
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AR_HANDLE_NORMAL 0
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define AR_HANDLE_RV6XX 1 /* except RV670 */
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct r600_bytecode {
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	enum chip_class			chip_class;
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	int				type;
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct list_head		cf;
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_bytecode_cf		*cf_last;
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			ndw;
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			ncf;
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			ngpr;
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			nstack;
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			nresource;
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			force_add_cf;
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	uint32_t			*bytecode;
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	uint32_t			fc_sp;
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_cf_stack_entry	fc_stack[32];
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned			call_sp;
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	struct r600_cf_callstack	callstack[SQ_MAX_CALL_DEPTH];
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned	ar_loaded;
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned	ar_reg;
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned        ar_handling;
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	unsigned        r6xx_nop_after_rel_dst;
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* eg_asm.c */
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf);
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* r600_asm.c */
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid r600_bytecode_init(struct r600_bytecode *bc, enum chip_class chip_class, enum radeon_family family);
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid r600_bytecode_clear(struct r600_bytecode *bc);
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_alu(struct r600_bytecode *bc, const struct r600_bytecode_alu *alu);
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_vtx(struct r600_bytecode *bc, const struct r600_bytecode_vtx *vtx);
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_tex(struct r600_bytecode *bc, const struct r600_bytecode_tex *tex);
230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_output(struct r600_bytecode *bc, const struct r600_bytecode_output *output);
231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_build(struct r600_bytecode *bc);
232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_cfinst(struct r600_bytecode *bc, int inst);
233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_bytecode_add_alu_type(struct r600_bytecode *bc, const struct r600_bytecode_alu *alu, int type);
234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid r600_bytecode_special_constants(uint32_t value, unsigned *sel, unsigned *neg);
235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid r600_bytecode_dump(struct r600_bytecode *bc);
236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint cm_bytecode_add_cf_end(struct r600_bytecode *bc);
238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r600_vertex_elements_build_fetch_shader(struct r600_context *rctx, struct r600_vertex_element *ve);
240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* r700_asm.c */
242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid r700_bytecode_cf_vtx_build(uint32_t *bytecode, const struct r600_bytecode_cf *cf);
243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint r700_bytecode_alu_build(struct r600_bytecode *bc, struct r600_bytecode_alu *alu, unsigned id);
244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif
246