1de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse/*
2de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Copyright 2010 Jerome Glisse <glisse@freedesktop.org>
3de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
4de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Permission is hereby granted, free of charge, to any person obtaining a
5de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * copy of this software and associated documentation files (the "Software"),
6de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * to deal in the Software without restriction, including without limitation
7de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * on the rights to use, copy, modify, merge, publish, distribute, sub
8de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * license, and/or sell copies of the Software, and to permit persons to whom
9de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * the Software is furnished to do so, subject to the following conditions:
10de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
11de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * The above copyright notice and this permission notice (including the next
12de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * paragraph) shall be included in all copies or substantial portions of the
13de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * Software.
14de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse *
15de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
18de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
19de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse * USE OR OTHER DEALINGS IN THE SOFTWARE.
22de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse */
23de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#ifndef R600_ASM_H
24de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#define R600_ASM_H
25de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
26330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák#include "r600.h"
27330b6c85c961b32f704ce8ec7dbf8cb7fc0b80a8Marek Olšák
28fa86fc564aea4e40c89f6fc889e6a5bf817634b3Jerome Glissestruct r600_vertex_element;
29e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákstruct r600_context;
30fa86fc564aea4e40c89f6fc889e6a5bf817634b3Jerome Glisse
314a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_src {
32de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			sel;
33de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			chan;
34de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			neg;
35de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			abs;
3647d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie	unsigned			rel;
37d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	unsigned			kc_bank;
38a77e813de32643ae2dfffd7ad12abed596172cabHenri Verbeet	uint32_t			value;
39de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
40de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
414a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu_dst {
42de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			sel;
43de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			chan;
44de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			clamp;
45de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			write;
4647d5a19df1e7760c4f5f0e340bfc56355c2e428bDave Airlie	unsigned			rel;
47de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
48de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
494a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_alu {
50de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
514a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu_src		src[3];
524a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu_dst		dst;
53de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			inst;
54de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			last;
55de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			is_op3;
56da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			execute_mask;
57da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			update_pred;
58da676eab93e7dad30b574b4eb4cffd4df952e819Vincent Lejeune	unsigned			pred_sel;
59e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			bank_swizzle;
60e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			bank_swizzle_force;
61c60cb25bfb15fc83e78d9f2c74646dcc5ad07792Christian König	unsigned			omod;
62c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned                        index_mode;
63de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
64de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
654a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_tex {
6633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		list;
6733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			inst;
6833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			resource_id;
6933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_gpr;
7033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_rel;
7133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_gpr;
7233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_rel;
7333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_x;
7433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_y;
7533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_z;
7633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			dst_sel_w;
7733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			lod_bias;
7833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_x;
7933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_y;
8033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_z;
8133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			coord_type_w;
8233241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			offset_x;
8333241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			offset_y;
8433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			offset_z;
8533241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			sampler_id;
8633241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_x;
8733241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_y;
8833241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_z;
8933241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	unsigned			src_sel_w;
9033241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse};
9133241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse
924a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_vtx {
93de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
94de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			inst;
95de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			fetch_type;
96de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			buffer_id;
97de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_gpr;
98de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			src_sel_x;
99de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			mega_fetch_count;
100de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_gpr;
101de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_x;
102de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_y;
103de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_z;
104de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			dst_sel_w;
105e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			use_const_fields;
106e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			data_format;
107e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			num_format_all;
108e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			format_comp_all;
109e973221538d5edfad62abedf5b37a4fb774d71fcDave Airlie	unsigned			srf_mode_all;
11096bbc627f369c0100b950f81531b1fe9ef586c34Christian König	unsigned			offset;
111843dfe3206c4f397c7911b748373dde5540392a4Cédric Cano	unsigned			endian;
112de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
113de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1144a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_output {
115de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			array_base;
116543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			array_size;
117543b2331d7b45a29ccd3530daa2389e87e65d89bMarek Olšák	unsigned			comp_mask;
118de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			type;
119de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			end_of_program;
1204f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
1214f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák	/* CF_INST. This is already bit-shifted and only needs to be or'd for bytecode. */
122de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			inst;
1234f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
124de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			elem_size;
125de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			gpr;
126de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_x;
127de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_y;
128de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_z;
129de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			swizzle_w;
1308ca3b140eb53fd8063337a5a2a54a35987d597bcChristian König	unsigned			burst_count;
131de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			barrier;
132de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
133de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1344a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_kcache {
1358273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			bank;
1368273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			mode;
1378273921b7a41251f3f5a87df995913cb291902caHenri Verbeet	unsigned			addr;
1388273921b7a41251f3f5a87df995913cb291902caHenri Verbeet};
1398273921b7a41251f3f5a87df995913cb291902caHenri Verbeet
14094a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard/* A value of CF_NATIVE in r600_bytecode_cf::inst means that this instruction
14194a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard * has already been encoded, and the encoding has been stored in
14294a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard * r600_bytecode::isa.  This is used by the LLVM backend to emit CF instructions
14394a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard * e.g. RAT_WRITE_* that can't be properly represented by struct
14494a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard * r600_bytecode_cf.
14594a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard */
14694a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard#define CF_NATIVE ~0
14794a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard
1484a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode_cf {
149de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		list;
1504f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
1514f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák	/* CF_INST. This is already bit-shifted and only needs to be or'd for bytecode. */
152de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			inst;
1534f7c21899ad449be2bc1157ce1d2d99296a34499Marek Olšák
154de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			addr;
155de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
156de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			id;
157e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			cond;
158e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			pop_count;
159e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			cf_addr; /* control flow addr */
160d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	struct r600_bytecode_kcache		kcache[4];
161c5edfcc410bdf3dbe4f37418de8f0009746c9578Dave Airlie	unsigned			r6xx_uses_waterfall;
162d649bf51ec787021f7872e2a4c09fb2188c0891bVadim Girlin	unsigned			eg_alu_extended;
163de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		alu;
16433241134e6e3d5bf19141eceff90fd854b23386aJerome Glisse	struct list_head		tex;
165de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		vtx;
1664a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_output		output;
1674a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*curr_bs_head;
1684a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev_bs_head;
1694a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_alu		*prev2_bs_head;
17094a6a363792e8cb57a9f15778a3f3440d5b754abTom Stellard	unsigned isa[2];
171de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
172de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
1737ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_NONE				0
1747ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_IF				1
1757ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_LOOP				2
1767ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_REP				3
1777ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_VPM			4
1787ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse#define FC_PUSH_WQM			5
179a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airlie
180a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airliestruct r600_cf_stack_entry {
181e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	int				type;
1824a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*start;
1834a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		**mid; /* used to store the else point */
184e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	int				num_mid;
18509547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie};
18609547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie
18709547e1bcee7df3444dd8682770d1b31da1a5822Dave Airlie#define SQ_MAX_CALL_DEPTH 0x00000020
18809547e1bcee7df3444dd8682770d1b31da1a5822Dave Airliestruct r600_cf_callstack {
189e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			fc_sp_before_entry;
190e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	int				sub_desc_index;
191e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	int				current;
192e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	int				max;
193a03d456f5a41926e39194de70b2d50776e64b8a2Dave Airlie};
1947ffd4e976fd11b8c083c2927effd25a2f79ac841Jerome Glisse
195c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_NORMAL 0
196c96b9834032952492efbd2d1f5511fe225704918Dave Airlie#define AR_HANDLE_RV6XX 1 /* except RV670 */
197c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
198c96b9834032952492efbd2d1f5511fe225704918Dave Airlie
1994a47662beaa2092447939db7880531fb706afeddMarek Olšákstruct r600_bytecode {
20089dc31a28d8e5607989ec11cfd29310c1c97f6acHenri Verbeet	enum chip_class			chip_class;
201f609b2ab0342d77a8beca9efb5fbc5b66ff98295Jerome Glisse	int				type;
202de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	struct list_head		cf;
2034a47662beaa2092447939db7880531fb706afeddMarek Olšák	struct r600_bytecode_cf		*cf_last;
204de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ndw;
205de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ncf;
206de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			ngpr;
207e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			nstack;
208de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse	unsigned			nresource;
2097e42b7e5d2aebcda0e6bf081b6661411731e6df2Jerome Glisse	unsigned			force_add_cf;
21078293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			*bytecode;
21178293b99b23268e6698f1267aaf40647c17d95a5Marek Olšák	uint32_t			fc_sp;
212e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	struct r600_cf_stack_entry	fc_stack[32];
213e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	unsigned			call_sp;
214e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe	struct r600_cf_callstack	callstack[SQ_MAX_CALL_DEPTH];
2158e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_loaded;
2168e366dc365d01213b71b87ace47d30938db74845Vadim Girlin	unsigned	ar_reg;
217c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        ar_handling;
218c96b9834032952492efbd2d1f5511fe225704918Dave Airlie	unsigned        r6xx_nop_after_rel_dst;
219de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse};
220de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse
2216abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* eg_asm.c */
2224a47662beaa2092447939db7880531fb706afeddMarek Olšákint eg_bytecode_cf_build(struct r600_bytecode *bc, struct r600_bytecode_cf *cf);
2236abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse
2246abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r600_asm.c */
225c96b9834032952492efbd2d1f5511fe225704918Dave Airlievoid r600_bytecode_init(struct r600_bytecode *bc, enum chip_class chip_class, enum radeon_family family);
2264a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r600_bytecode_clear(struct r600_bytecode *bc);
2274a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_alu(struct r600_bytecode *bc, const struct r600_bytecode_alu *alu);
2284a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_vtx(struct r600_bytecode *bc, const struct r600_bytecode_vtx *vtx);
2294a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_tex(struct r600_bytecode *bc, const struct r600_bytecode_tex *tex);
2304a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_output(struct r600_bytecode *bc, const struct r600_bytecode_output *output);
2314a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_build(struct r600_bytecode *bc);
2324a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_cfinst(struct r600_bytecode *bc, int inst);
2334a47662beaa2092447939db7880531fb706afeddMarek Olšákint r600_bytecode_add_alu_type(struct r600_bytecode *bc, const struct r600_bytecode_alu *alu, int type);
23478293b99b23268e6698f1267aaf40647c17d95a5Marek Olšákvoid r600_bytecode_special_constants(uint32_t value, unsigned *sel, unsigned *neg);
2354a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r600_bytecode_dump(struct r600_bytecode *bc);
2364a47662beaa2092447939db7880531fb706afeddMarek Olšák
2374a47662beaa2092447939db7880531fb706afeddMarek Olšákint cm_bytecode_add_cf_end(struct r600_bytecode *bc);
2387779f6d1dffde2c0501e44adc342e52803de08d4Dave Airlie
239e4340c1908a6a3b09e1a15d5195f6da7d00494d0Marek Olšákint r600_vertex_elements_build_fetch_shader(struct r600_context *rctx, struct r600_vertex_element *ve);
240e0b6df4fcce0964ea7930efeb40cb487b4c53337John Doe
2416abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse/* r700_asm.c */
2424a47662beaa2092447939db7880531fb706afeddMarek Olšákvoid r700_bytecode_cf_vtx_build(uint32_t *bytecode, const struct r600_bytecode_cf *cf);
2434a47662beaa2092447939db7880531fb706afeddMarek Olšákint r700_bytecode_alu_build(struct r600_bytecode *bc, struct r600_bytecode_alu *alu, unsigned id);
2446abd7771c6ab2c733b20835e211060dd18fd847dJerome Glisse
245de553d906b4a205d811a9e1651f14212ec284e29Jerome Glisse#endif
246