1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright 2011 Tom Stellard <tstellar@gmail.com> 3bf215546Sopenharmony_ci * 4bf215546Sopenharmony_ci * All Rights Reserved. 5bf215546Sopenharmony_ci * 6bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining 7bf215546Sopenharmony_ci * a copy of this software and associated documentation files (the 8bf215546Sopenharmony_ci * "Software"), to deal in the Software without restriction, including 9bf215546Sopenharmony_ci * without limitation the rights to use, copy, modify, merge, publish, 10bf215546Sopenharmony_ci * distribute, sublicense, and/or sell copies of the Software, and to 11bf215546Sopenharmony_ci * permit persons to whom the Software is furnished to do so, subject to 12bf215546Sopenharmony_ci * the following conditions: 13bf215546Sopenharmony_ci * 14bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the 15bf215546Sopenharmony_ci * next paragraph) shall be included in all copies or substantial 16bf215546Sopenharmony_ci * portions of the Software. 17bf215546Sopenharmony_ci * 18bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19bf215546Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20bf215546Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21bf215546Sopenharmony_ci * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22bf215546Sopenharmony_ci * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23bf215546Sopenharmony_ci * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24bf215546Sopenharmony_ci * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25bf215546Sopenharmony_ci * 26bf215546Sopenharmony_ci */ 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci#ifndef RADEON_VARIABLE_H 29bf215546Sopenharmony_ci#define RADEON_VARIABLE_H 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci#include "radeon_compiler.h" 32bf215546Sopenharmony_ci 33bf215546Sopenharmony_cistruct radeon_compiler; 34bf215546Sopenharmony_cistruct rc_list; 35bf215546Sopenharmony_cistruct rc_reader_data; 36bf215546Sopenharmony_cistruct rc_readers; 37bf215546Sopenharmony_ci 38bf215546Sopenharmony_cistruct live_intervals { 39bf215546Sopenharmony_ci int Start; 40bf215546Sopenharmony_ci int End; 41bf215546Sopenharmony_ci int Used; 42bf215546Sopenharmony_ci}; 43bf215546Sopenharmony_ci 44bf215546Sopenharmony_cistruct rc_variable { 45bf215546Sopenharmony_ci struct radeon_compiler * C; 46bf215546Sopenharmony_ci struct rc_dst_register Dst; 47bf215546Sopenharmony_ci 48bf215546Sopenharmony_ci struct rc_instruction * Inst; 49bf215546Sopenharmony_ci unsigned int ReaderCount; 50bf215546Sopenharmony_ci struct rc_reader * Readers; 51bf215546Sopenharmony_ci struct live_intervals Live[4]; 52bf215546Sopenharmony_ci 53bf215546Sopenharmony_ci /* A friend is a variable that shares a reader with another variable. 54bf215546Sopenharmony_ci */ 55bf215546Sopenharmony_ci struct rc_variable * Friend; 56bf215546Sopenharmony_ci}; 57bf215546Sopenharmony_ci 58bf215546Sopenharmony_civoid rc_variable_change_dst( 59bf215546Sopenharmony_ci struct rc_variable * var, 60bf215546Sopenharmony_ci unsigned int new_index, 61bf215546Sopenharmony_ci unsigned int new_writemask); 62bf215546Sopenharmony_ci 63bf215546Sopenharmony_civoid rc_variable_compute_live_intervals(struct rc_variable * var); 64bf215546Sopenharmony_ci 65bf215546Sopenharmony_civoid rc_variable_add_friend( 66bf215546Sopenharmony_ci struct rc_variable * var, 67bf215546Sopenharmony_ci struct rc_variable * friend); 68bf215546Sopenharmony_ci 69bf215546Sopenharmony_cistruct rc_variable * rc_variable( 70bf215546Sopenharmony_ci struct radeon_compiler * c, 71bf215546Sopenharmony_ci unsigned int DstFile, 72bf215546Sopenharmony_ci unsigned int DstIndex, 73bf215546Sopenharmony_ci unsigned int DstWriteMask, 74bf215546Sopenharmony_ci struct rc_reader_data * reader_data); 75bf215546Sopenharmony_ci 76bf215546Sopenharmony_cistruct rc_list * rc_get_variables(struct radeon_compiler * c); 77bf215546Sopenharmony_ci 78bf215546Sopenharmony_ciunsigned int rc_variable_writemask_sum(struct rc_variable * var); 79bf215546Sopenharmony_ci 80bf215546Sopenharmony_cistruct rc_list * rc_variable_readers_union(struct rc_variable * var); 81bf215546Sopenharmony_ci 82bf215546Sopenharmony_cistruct rc_list * rc_variable_list_get_writers( 83bf215546Sopenharmony_ci struct rc_list * var_list, 84bf215546Sopenharmony_ci unsigned int src_type, 85bf215546Sopenharmony_ci void * src); 86bf215546Sopenharmony_ci 87bf215546Sopenharmony_cistruct rc_list * rc_variable_list_get_writers_one_reader( 88bf215546Sopenharmony_ci struct rc_list * var_list, 89bf215546Sopenharmony_ci unsigned int src_type, 90bf215546Sopenharmony_ci void * src); 91bf215546Sopenharmony_ci 92bf215546Sopenharmony_civoid rc_variable_print(struct rc_variable * var); 93bf215546Sopenharmony_ci 94bf215546Sopenharmony_ci#endif /* RADEON_VARIABLE_H */ 95