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