/* * $Id: Parameters.cpp 82 2008-05-01 16:48:45Z rosiere $ * * [ Description ] * */ #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h" #include "Common/include/Max.h" namespace morpheo { namespace behavioural { namespace core { namespace multi_front_end { namespace front_end { namespace prediction_unit { #undef FUNCTION #define FUNCTION "Prediction_unit::Parameters" Parameters::Parameters (uint32_t nb_context , uint32_t nb_decod_unit , uint32_t size_address , uint32_t * nb_instruction ,//[nb_context] uint32_t * nb_inst_decod ,//[nb_decod_unit] uint32_t nb_inst_branch_predict , uint32_t nb_inst_branch_decod , uint32_t nb_inst_branch_update , uint32_t nb_inst_branch_complete , uint32_t btb_size_queue , uint32_t btb_associativity , uint32_t btb_size_counter , Tvictim_t btb_victim_scheme , Tpredictor_t dir_predictor_scheme , bool dir_have_bht [3], uint32_t dir_bht_size_shifter [3], uint32_t dir_bht_nb_shifter [3], bool dir_have_pht [3], uint32_t dir_pht_size_counter [3], uint32_t dir_pht_nb_counter [3], uint32_t dir_pht_size_address_share [3], uint32_t * ras_size_queue ,//[nb_context] uint32_t * upt_size_queue //[nb_context] ) { log_printf(FUNC,Prediction_unit,FUNCTION,"Begin"); _nb_context = nb_context ; _nb_decod_unit = nb_decod_unit ; _size_address = size_address ; _nb_instruction = nb_instruction ; _nb_inst_decod = nb_inst_decod ; _nb_inst_branch_predict = nb_inst_branch_predict ; _nb_inst_branch_decod = nb_inst_branch_decod ; _nb_inst_branch_update = nb_inst_branch_update ; _nb_inst_branch_complete = nb_inst_branch_complete ; _btb_size_queue = btb_size_queue ; _btb_associativity = btb_associativity ; _btb_size_counter = btb_size_counter ; _btb_victim_scheme = btb_victim_scheme ; _dir_predictor_scheme = dir_predictor_scheme ; for (uint32_t i=0; i<3; i++) { _dir_have_bht [i] = dir_have_bht [i]; _dir_bht_size_shifter [i] = dir_bht_size_shifter [i]; _dir_bht_nb_shifter [i] = dir_bht_nb_shifter [i]; _dir_have_pht [i] = dir_have_pht [i]; _dir_pht_size_counter [i] = dir_pht_size_counter [i]; _dir_pht_nb_counter [i] = dir_pht_nb_counter [i]; _dir_pht_size_address_share [i] = dir_pht_size_address_share [i]; } _ras_size_queue = ras_size_queue ; _upt_size_queue = upt_size_queue ; _size_context_id = log2(_nb_context); // public : uint32_t * _size_inst_ifetch_ptr ;//[nb_context] _size_depth = new uint32_t [_nb_context]; _size_ras_index = new uint32_t [_nb_context]; for (uint32_t i=0; i<_nb_context; i++) { _size_depth [i] = log2(_upt_size_queue [i]); _size_ras_index [i] = log2(_ras_size_queue [i]); } _max_size_depth = max(_size_depth,_nb_context); _have_port_context_id = (_size_context_id > 0); _have_port_max_depth = (_max_size_depth > 0); // public : bool * _have_port_inst_ifetch_ptr ;//[nb_context] _param_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue ::Parameters (_nb_context , _nb_decod_unit , _size_address , _nb_instruction , _size_depth , _nb_inst_decod , _nb_inst_branch_predict, _nb_inst_branch_decod , _nb_inst_branch_update ); _size_inst_ifetch_ptr = _param_glue->_size_inst_ifetch_ptr ; _have_port_depth = _param_glue->_have_port_depth; _have_port_inst_ifetch_ptr = _param_glue->_have_port_inst_ifetch_ptr; _have_port_history = (_size_history > 0); _param_btb = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer ::Parameters (_nb_context , _nb_instruction , _btb_size_queue , _btb_associativity , _size_address , _btb_size_counter , _nb_inst_branch_predict, _nb_inst_branch_decod , _nb_inst_branch_update , _btb_victim_scheme ); _param_dir = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction ::Parameters (_dir_predictor_scheme , _nb_inst_branch_predict , _nb_inst_branch_update , _size_address , _dir_have_bht , _dir_bht_size_shifter , _dir_bht_nb_shifter , _dir_have_pht , _dir_pht_size_counter , _dir_pht_nb_counter , _dir_pht_size_address_share); _size_history = _param_dir->_size_history; _param_ras = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack ::Parameters (_nb_context , _ras_size_queue , _size_address , _nb_inst_branch_predict, _nb_inst_branch_decod , _nb_inst_branch_update ); _param_upt = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters (_nb_context , _upt_size_queue , _size_address , _nb_inst_branch_predict , _nb_inst_branch_decod , _nb_inst_branch_complete, _nb_inst_branch_update , _size_history , _size_ras_index ); test(); log_printf(FUNC,Prediction_unit,FUNCTION,"End"); }; // #undef FUNCTION // #define FUNCTION "Prediction_unit::Parameters (copy)" // Parameters::Parameters (Parameters & param) // { // log_printf(FUNC,Prediction_unit,FUNCTION,"Begin"); // test(); // log_printf(FUNC,Prediction_unit,FUNCTION,"End"); // }; #undef FUNCTION #define FUNCTION "Prediction_unit::~Parameters" Parameters::~Parameters () { log_printf(FUNC,Prediction_unit,FUNCTION,"Begin"); delete _param_btb; delete _param_dir; delete _param_ras; delete _param_upt; delete _param_glue; delete [] _size_depth ; delete [] _size_ras_index; log_printf(FUNC,Prediction_unit,FUNCTION,"End"); }; }; // end namespace prediction_unit }; // end namespace front_end }; // end namespace multi_front_end }; // end namespace core }; // end namespace behavioural }; // end namespace morpheo