Beispiel #1
0
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");
}
Beispiel #2
0
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");
	
}
Beispiel #3
0
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");
}
Beispiel #4
0
/* 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");
}
Beispiel #5
0
/* 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");
}