static void parse_cache_option (SIM_DESC sd, char *arg, char *cache_name, int is_data_cache) { int i; address_word ways = 0, sets = 0, linesize = 0; if (arg != NULL) { char *chp = arg; /* parse the arguments */ chp = parse_size (chp, &ways); ways = check_pow2 (ways, "WAYS", cache_name, sd); if (*chp == ',') { chp = parse_size (chp + 1, &sets); sets = check_pow2 (sets, "SETS", cache_name, sd); if (*chp == ',') { chp = parse_size (chp + 1, &linesize); linesize = check_pow2 (linesize, "LINESIZE", cache_name, sd); } } } for (i = 0; i < MAX_NR_PROCESSORS; ++i) { SIM_CPU *current_cpu = STATE_CPU (sd, i); FRV_CACHE *cache = is_data_cache ? CPU_DATA_CACHE (current_cpu) : CPU_INSN_CACHE (current_cpu); cache->ways = ways; cache->sets = sets; cache->line_size = linesize; frv_cache_init (current_cpu, cache); } }
void CacheMemory::set_assoc(const dir_t &val){ if (check_pow2(val)) assoc = val; else{ std::cerr << "Error, assoc not valid" << std::endl; assoc = 1; } }
void CacheMemory::set_mem_size(const dir_t &val){ if (check_pow2(val)) mem_size = val; else{ std::cerr << "Error, mem_size not valid" << std::endl; mem_size = 1; } }