/* * $Id$ * * [ Description ] * */ #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/include/test.h" #define NB_PARAMS 18 void usage (int argc, char * argv[]) { err (_(" %s name_instance list_params.\n"),argv[0]); err (_("list_params is :\n")); err (_(" * nb_read_unit (uint32_t )\n")); err (_(" * nb_functionnal_unit (uint32_t )\n")); err (_(" * nb_load_store_unit (uint32_t )\n")); err (_(" * nb_write_unit (uint32_t )\n")); err (_(" * nb_context (uint32_t )\n")); err (_(" * nb_front_end (uint32_t )\n")); err (_(" * nb_ooo_engine (uint32_t )\n")); err (_(" * nb_packet (uint32_t )\n")); err (_(" * size_general_data (uint32_t )\n")); err (_(" * size_special_data (uint32_t )\n")); err (_(" * size_read_queue [read_unit] (uint32_t )\n")); err (_(" * size_reservation_station [read_unit] (uint32_t )\n")); err (_(" * nb_inst_retire [read_unit] (uint32_t )\n")); err (_(" * size_store_queue [load_store_unit] (uint32_t )\n")); err (_(" * size_load_queue [load_store_unit] (uint32_t )\n")); err (_(" * size_speculative_access_queue [load_store_unit] (uint32_t )\n")); err (_(" * nb_port_check [load_store_unit] (uint32_t )\n")); err (_(" * speculative_load [load_store_unit] (Tspeculative_load_t)\n")); err (_(" * nb_bypass_memory [load_store_unit] (uint32_t )\n")); err (_(" * size_write_queue [write_unit] (uint32_t )\n")); err (_(" * size_execute_queue [write_unit] (uint32_t )\n")); err (_(" * nb_bypass_write [write_unit] (uint32_t )\n")); err (_(" * nb_gpr_bank (uint32_t )\n")); err (_(" * nb_gpr_port_read_by_bank (uint32_t )\n")); err (_(" * nb_gpr_port_write_by_bank (uint32_t )\n")); err (_(" * nb_spr_bank (uint32_t )\n")); err (_(" * nb_spr_port_read_by_bank (uint32_t )\n")); err (_(" * nb_spr_port_write_by_bank (uint32_t )\n")); err (_(" * nb_general_register [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_special_register [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_inst_insert_rob [nb_ooo_engine] (uint32_t )\n")); err (_(" * nb_inst_retire_rob [nb_ooo_engine] (uint32_t )\n")); err (_(" * execution_unit_to_write_unit_priority (Tpriority_t )\n")); err (_(" * execution_unit_to_write_unit_table_routing[nb_execute_unit][nb_write_unit] (bool )\n")); err (_(" * execution_unit_to_write_unit_table_thread [nb_write_unit][nb_thread] (bool )\n")); err (_(" * read_unit_to_execution_unit_priority (Tpriority_t )\n")); err (_(" * read_unit_to_execution_unit_table_routing [nb_read_unit][nb_execute_unit] (bool )\n")); err (_(" * read_unit_to_execution_unit_table_thread [nb_execute_unit][nb_thread] (bool )\n")); exit (1); } #ifndef SYSTEMC int main (int argc, char * argv[]) #else int sc_main (int argc, char * argv[]) #endif { if (argc < 2+NB_PARAMS) usage (argc, argv); uint32_t x = 1; string name = argv[x++]; uint32_t nb_read_unit = atoi(argv[x++]); uint32_t nb_functionnal_unit = atoi(argv[x++]); uint32_t nb_load_store_unit = atoi(argv[x++]); uint32_t nb_write_unit = atoi(argv[x++]); uint32_t nb_context = atoi(argv[x++]); uint32_t nb_front_end = atoi(argv[x++]); uint32_t nb_ooo_engine = atoi(argv[x++]); uint32_t nb_packet = atoi(argv[x++]); uint32_t size_general_data = atoi(argv[x++]); uint32_t size_special_data = atoi(argv[x++]); uint32_t nb_execute_unit = nb_functionnal_unit + nb_load_store_unit; uint32_t nb_thread = get_nb_thread(nb_context, nb_front_end, nb_ooo_engine); int32_t nb_params = (2+NB_PARAMS+ 3*nb_read_unit+ 6*nb_load_store_unit+ 3*nb_write_unit+ 4*nb_ooo_engine+ nb_execute_unit*nb_write_unit+ nb_write_unit*nb_thread+ nb_read_unit*nb_execute_unit+ nb_execute_unit*nb_thread); if (argc != nb_params) { msg(_("Need %d parameters."),nb_params); usage (argc, argv); } uint32_t * size_read_queue = new uint32_t [nb_read_unit]; for (uint32_t i=0; i(argv[x++]); uint32_t * nb_bypass_memory = new uint32_t [nb_load_store_unit]; for (uint32_t i=0; i(argv[x++]); bool ** execution_unit_to_write_unit_table_routing = new bool * [nb_execute_unit]; for (uint32_t i=0; i(argv[x++]); bool ** read_unit_to_execution_unit_table_routing = new bool * [nb_read_unit]; for (uint32_t i=0; iprint(1).c_str()); test (name,param); } catch (morpheo::ErrorMorpheo & error) { msg (_("<%s> : %s.\n"),name.c_str(), error.what ()); exit (EXIT_FAILURE); } catch (...) { err (_("<%s> : This test must generate a error.\n"),name.c_str()); exit (EXIT_FAILURE); } return (EXIT_SUCCESS); }