11c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák/*
21c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Copyright (C) 2008 Nicolai Haehnle.
31c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
41c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * All Rights Reserved.
51c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
61c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Permission is hereby granted, free of charge, to any person obtaining
71c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * a copy of this software and associated documentation files (the
81c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * "Software"), to deal in the Software without restriction, including
91c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * without limitation the rights to use, copy, modify, merge, publish,
101c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * distribute, sublicense, and/or sell copies of the Software, and to
111c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * permit persons to whom the Software is furnished to do so, subject to
121c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * the following conditions:
131c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
141c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * The above copyright notice and this permission notice (including the
151c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * next paragraph) shall be included in all copies or substantial
161c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * portions of the Software.
171c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
181c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
191c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
201c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
211c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
221c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
231c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
241c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
251c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
261c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák */
271c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
281c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#ifndef __RADEON_PROGRAM_H_
291c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#define __RADEON_PROGRAM_H_
301c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
311c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include <stdint.h>
321c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include <string.h>
331c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
341c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_opcodes.h"
351c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_code.h"
361c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_program_constants.h"
371c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_program_pair.h"
381c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
391c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct radeon_compiler;
401c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
411c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_src_register {
421c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int File:4;
431c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
441c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** Negative values may be used for relative addressing. */
451c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	signed int Index:(RC_REGISTER_INDEX_BITS+1);
461c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int RelAddr:1;
471c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
481c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int Swizzle:12;
491c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
501c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** Take the component-wise absolute value */
511c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int Abs:1;
521c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
531c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** Post-Abs negation. */
541c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int Negate:4;
551c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
561c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
571c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_dst_register {
581c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int File:3;
591c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int Index:RC_REGISTER_INDEX_BITS;
601c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int WriteMask:4;
61b2df031a959f36743527b9abc89913ce4f895de3Tom Stellard	unsigned int Pred:2;
621c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
631c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
641c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_presub_instruction {
651c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	rc_presubtract_op Opcode;
661c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_src_register SrcReg[2];
671c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
681c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
691c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák/**
701c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Instructions are maintained by the compiler in a doubly linked list
711c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * of these structures.
721c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
731c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * This instruction format is intended to be expanded for hardware-specific
741c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * trickery. At different stages of compilation, a different set of
751c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * instruction types may be valid.
761c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák */
771c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_sub_instruction {
781c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_src_register SrcReg[3];
791c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_dst_register DstReg;
801c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
811c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
821c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Opcode of this instruction, according to \ref rc_opcode enums.
831c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
841c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int Opcode:8;
851c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
861c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
871c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Saturate each value of the result to the range [0,1] or [-1,1],
881c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * according to \ref rc_saturate_mode enums.
891c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
901c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int SaturateMode:2;
911c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
921c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
931c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Writing to the special register RC_SPECIAL_ALU_RESULT
941c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
951c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/*@{*/
961c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int WriteALUResult:2;
971c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int ALUResultCompare:3;
981c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/*@}*/
991c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1001c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
1011c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * \name Extra fields for TEX, TXB, TXD, TXL, TXP instructions.
1021c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
1031c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/*@{*/
1041c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** Source texture unit. */
1051c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int TexSrcUnit:5;
1061c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1071c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** Source texture target, one of the \ref rc_texture_target enums */
1081c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int TexSrcTarget:3;
1091c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1101c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** True if tex instruction should do shadow comparison */
1111c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int TexShadow:1;
1121c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
113163629fd05166b78d70c2c26f4a922b296e8999dTom Stellard	/**/
114163629fd05166b78d70c2c26f4a922b296e8999dTom Stellard	unsigned int TexSemWait:1;
115163629fd05166b78d70c2c26f4a922b296e8999dTom Stellard	unsigned int TexSemAcquire:1;
116163629fd05166b78d70c2c26f4a922b296e8999dTom Stellard
1171c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**R500 Only.  How to swizzle the result of a TEX lookup*/
1181c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int TexSwizzle:12;
1191c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/*@}*/
1201c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1211c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/** This holds information about the presubtract operation used by
1221c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * this instruction. */
1231c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_presub_instruction PreSub;
124e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard
125e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard	rc_omod_op Omod;
1261c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
1271c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1281c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšáktypedef enum {
1291c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	RC_INSTRUCTION_NORMAL = 0,
1301c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	RC_INSTRUCTION_PAIR
1311c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák} rc_instruction_type;
1321c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1331c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_instruction {
1341c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_instruction * Prev;
1351c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_instruction * Next;
1361c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1371c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	rc_instruction_type Type;
1381c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	union {
1391c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		struct rc_sub_instruction I;
1401c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		struct rc_pair_instruction P;
1411c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	} U;
1421c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1431c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
1441c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Warning: IPs are not stable. If you want to use them,
1451c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * you need to recompute them at the beginning of each pass
1461c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * using \ref rc_recompute_ips
1471c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
1481c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int IP;
1491c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
1501c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1511c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_program {
1521c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/**
1531c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Instructions.Next points to the first instruction,
1541c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * Instructions.Prev points to the last instruction.
1551c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 */
1561c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_instruction Instructions;
1571c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1581c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	/* Long term, we should probably remove InputsRead & OutputsWritten,
1591c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * since updating dependent state can be fragile, and they aren't
1601c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	 * actually used very often. */
1611c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	uint32_t InputsRead;
1621c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	uint32_t OutputsWritten;
1631c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	uint32_t ShadowSamplers; /**< Texture units used for shadow sampling. */
1641c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1651c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct rc_constant_list Constants;
1661c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
1671c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1681c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák/**
1691c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * A transformation that can be passed to \ref rc_local_transform.
1701c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
1711c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * The function will be called once for each instruction.
1721c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * It has to either emit the appropriate transformed code for the instruction
1731c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * and return true, or return false if it doesn't understand the
1741c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * instruction.
1751c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák *
1761c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * The function gets passed the userData as last parameter.
1771c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák */
1781c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct radeon_program_transformation {
1791c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	int (*function)(
1801c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		struct radeon_compiler*,
1811c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		struct rc_instruction*,
1821c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák		void*);
1831c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	void *userData;
1841c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák};
1851c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1861c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_local_transform(
1871c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct radeon_compiler *c,
1881c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	void *user);
1891c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1901c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_get_used_temporaries(
1911c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct radeon_compiler * c,
1921c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned char * used,
1931c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int used_length);
1941c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
1951c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákint rc_find_free_temporary_list(
1961c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	struct radeon_compiler * c,
1971c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned char * used,
1981c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int used_length,
1991c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák	unsigned int mask);
2001c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
2011c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákunsigned int rc_find_free_temporary(struct radeon_compiler * c);
2021c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
2031c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_instruction *rc_alloc_instruction(struct radeon_compiler * c);
2041c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_instruction *rc_insert_new_instruction(struct radeon_compiler * c, struct rc_instruction * after);
2051c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_insert_instruction(struct rc_instruction * after, struct rc_instruction * inst);
2061c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_remove_instruction(struct rc_instruction * inst);
2071c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
2081c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákunsigned int rc_recompute_ips(struct radeon_compiler * c);
2091c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
2101c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_print_program(const struct rc_program *prog);
2111c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák
2121c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákrc_swizzle rc_mask_to_swizzle(unsigned int mask);
2131c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#endif
214