void moesi_init() { /* Debug */ cache_debug_category = debug_new_category(); /* Events */ EV_MOESI_FIND_AND_LOCK = esim_register_event(moesi_handler_find_and_lock); EV_MOESI_FIND_AND_LOCK_FINISH = esim_register_event(moesi_handler_find_and_lock); EV_MOESI_LOAD = esim_register_event(moesi_handler_load); EV_MOESI_LOAD_ACTION = esim_register_event(moesi_handler_load); EV_MOESI_LOAD_MISS = esim_register_event(moesi_handler_load); EV_MOESI_LOAD_FINISH = esim_register_event(moesi_handler_load); EV_MOESI_STORE = esim_register_event(moesi_handler_store); EV_MOESI_STORE_ACTION = esim_register_event(moesi_handler_store); EV_MOESI_STORE_FINISH = esim_register_event(moesi_handler_store); EV_MOESI_EVICT = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_ACTION = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_RECEIVE = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_WRITEBACK = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_WRITEBACK_EXCLUSIVE = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_WRITEBACK_FINISH = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_PROCESS = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_REPLY = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_REPLY_RECEIVE = esim_register_event(moesi_handler_evict); EV_MOESI_EVICT_FINISH = esim_register_event(moesi_handler_evict); EV_MOESI_WRITE_REQUEST = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_RECEIVE = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_ACTION = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_EXCLUSIVE = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_UPDOWN = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_UPDOWN_FINISH = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_DOWNUP = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_REPLY = esim_register_event(moesi_handler_write_request); EV_MOESI_WRITE_REQUEST_FINISH = esim_register_event(moesi_handler_write_request); EV_MOESI_READ_REQUEST = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_RECEIVE = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_ACTION = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_UPDOWN = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_UPDOWN_MISS = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_UPDOWN_FINISH = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_DOWNUP = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_DOWNUP_FINISH = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_REPLY = esim_register_event(moesi_handler_read_request); EV_MOESI_READ_REQUEST_FINISH = esim_register_event(moesi_handler_read_request); EV_MOESI_INVALIDATE = esim_register_event(moesi_handler_invalidate); EV_MOESI_INVALIDATE_FINISH = esim_register_event(moesi_handler_invalidate); /* Stack repository */ moesi_stack_repos = repos_create(sizeof(struct moesi_stack_t), "moesi_stack_repos"); }
void si_uop_init() { /* GPU uop repository. * The size assigned for each 'si_uop_t' is equals to the baseline structure size plus the * size of a 'si_work_item_uop_t' element for each work-item in the wavefront. */ gpu_uop_repos = repos_create(sizeof(struct si_uop_t) + sizeof(struct si_work_item_uop_t) * si_emu_wavefront_size, "gpu_uop_repos"); }
void frm_uop_init() { /* GPU uop repository. * The size assigned for each 'frm_uop_t' is equals to the * baseline structure size plus the size of a 'frm_thread_uop_t' * element for each work-item in the warp. */ gpu_uop_repos = repos_create(sizeof(struct frm_uop_t) + sizeof(struct frm_thread_uop_t) * frm_emu_warp_size, "gpu_uop_repos"); }
/* Initialization */ void si_isa_init() { /* Initialize */ si_isa_inst_func = xcalloc(SI_INST_COUNT, sizeof(si_isa_inst_func_t)); #define DEFINST(_name, _fmt_str, _fmt, _opcode, _size, _flags) \ extern void si_isa_##_name##_impl(struct si_work_item_t *work_item, struct si_inst_t *inst); \ si_isa_inst_func[SI_INST_##_name] = si_isa_##_name##_impl; #include <arch/southern-islands/asm/asm.dat> #undef DEFINST /* Repository of deferred tasks */ si_isa_write_task_repos = repos_create(sizeof(struct si_isa_write_task_t), "gpu_isa_write_task_repos"); }
/* Initialization */ void evg_isa_init() { /* Allocate instruction execution table */ evg_isa_inst_func = calloc(EVG_INST_COUNT, sizeof(evg_isa_inst_func_t)); if (!evg_isa_inst_func) fatal("%s: out of memory", __FUNCTION__); /* Initialize */ #define DEFINST(_name, _fmt_str, _fmt0, _fmt1, _fmt2, _category, _opcode, _flags) \ evg_isa_inst_func[EVG_INST_##_name] = evg_isa_##_name##_impl; #include <evergreen-asm.dat> #undef DEFINST /* Repository of deferred tasks */ evg_isa_write_task_repos = repos_create(sizeof(struct evg_isa_write_task_t), "gpu_isa_write_task_repos"); }