11c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák/* 21c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák * Copyright 2011 Tom Stellard <tstellar@gmail.com> 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_VARIABLE_H 291c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#define RADEON_VARIABLE_H 301c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 311c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#include "radeon_compiler.h" 321c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 331c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct radeon_compiler; 341c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_list; 351c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_reader_data; 361c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_readers; 371c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 381c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct live_intervals { 391c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák int Start; 401c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák int End; 411c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák int Used; 421c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}; 431c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 441c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_variable { 451c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct radeon_compiler * C; 461c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_dst_register Dst; 471c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 481c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_instruction * Inst; 491c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int ReaderCount; 501c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_reader * Readers; 511c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct live_intervals Live[4]; 521c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 531c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák /* A friend is a variable that shares a reader with another variable. 541c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák */ 551c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_variable * Friend; 561c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák}; 571c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 581c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_variable_change_dst( 591c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_variable * var, 601c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int new_index, 611c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int new_writemask); 621c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 631c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_variable_compute_live_intervals(struct rc_variable * var); 641c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 651c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_variable_add_friend( 661c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_variable * var, 671c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_variable * friend); 681c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 691c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_variable * rc_variable( 701c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct radeon_compiler * c, 711c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int DstFile, 721c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int DstIndex, 731c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int DstWriteMask, 741c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_reader_data * reader_data); 751c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 761c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_list * rc_get_variables(struct radeon_compiler * c); 771c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 781c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákunsigned int rc_variable_writemask_sum(struct rc_variable * var); 791c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 801c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_list * rc_variable_readers_union(struct rc_variable * var); 811c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 821c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákstruct rc_list * rc_variable_list_get_writers( 831c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák struct rc_list * var_list, 841c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák unsigned int src_type, 851c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák void * src); 861c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 87e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellardstruct rc_list * rc_variable_list_get_writers_one_reader( 88e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard struct rc_list * var_list, 89e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard unsigned int src_type, 90e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard void * src); 91e945fb04d04c33da5e77d22d739c5740a522a61eTom Stellard 921c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšákvoid rc_variable_print(struct rc_variable * var); 931c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák 941c2c4ddbd1e97bfd13430521e5c09cb5ce8e36e6Marek Olšák#endif /* RADEON_VARIABLE_H */ 95