1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--------------------------------------------------------------------*/ 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- Cachegrind: cache configuration. ---*/ 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- The architecture specific void VG_(configure_caches) are ---*/ 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- located in the cg-<architecture>.c files. ---*/ 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--- cg-arch.c ---*/ 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/*--------------------------------------------------------------------*/ 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This file is part of Cachegrind, a Valgrind tool for cache 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov profiling programs. 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Copyright (C) 2011-2011 Nicholas Nethercote 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov njn@valgrind.org 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is free software; you can redistribute it and/or 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov modify it under the terms of the GNU General Public License as 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov published by the Free Software Foundation; either version 2 of the 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov License, or (at your option) any later version. 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is distributed in the hope that it will be useful, but 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov WITHOUT ANY WARRANTY; without even the implied warranty of 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov General Public License for more details. 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov You should have received a copy of the GNU General Public License 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov along with this program; if not, write to the Free Software 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 02111-1307, USA. 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov The GNU General Public License is contained in the file COPYING. 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov*/ 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "pub_tool_basics.h" 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "pub_tool_libcassert.h" 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "pub_tool_libcbase.h" 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "pub_tool_libcprint.h" 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "pub_tool_options.h" 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "cg_arch.h" 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Checks cache config is ok. Returns NULL if ok, or a pointer to an error 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// string otherwise. 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic Char* check_cache(cache_t* cache) 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Simulator requires set count to be a power of two. 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if ((cache->size % (cache->line_size * cache->assoc) != 0) || 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (-1 == VG_(log2)(cache->size/cache->line_size/cache->assoc))) 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov { 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "Cache set count is not a power of two.\n"; 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Simulator requires line size to be a power of two. 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (-1 == VG_(log2)(cache->line_size)) { 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "Cache line size is not a power of two.\n"; 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Then check line size >= 16 -- any smaller and a single instruction could 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // straddle three cache lines, which breaks a simulation assertion and is 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // stupid anyway. 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->line_size < MIN_LINE_SIZE) { 61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "Cache line size is too small.\n"; 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Then check cache size > line size (causes seg faults if not). */ 65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->size <= cache->line_size) { 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "Cache size <= line size.\n"; 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov /* Then check assoc <= (size / line size) (seg faults otherwise). */ 70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->assoc > (cache->size / cache->line_size)) { 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return "Cache associativity > (size / line size).\n"; 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return NULL; 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void parse_cache_opt ( cache_t* cache, Char* opt, Char* optval ) 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Long i1, i2, i3; 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Char* endptr; 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Char* checkRes; 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Option argument looks like "65536,2,64". Extract them. 85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov i1 = VG_(strtoll10)(optval, &endptr); if (*endptr != ',') goto bad; 86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov i2 = VG_(strtoll10)(endptr+1, &endptr); if (*endptr != ',') goto bad; 87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov i3 = VG_(strtoll10)(endptr+1, &endptr); if (*endptr != '\0') goto bad; 88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Check for overflow. 90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache->size = (Int)i1; 91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache->assoc = (Int)i2; 92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache->line_size = (Int)i3; 93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->size != i1) goto overflow; 94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->assoc != i2) goto overflow; 95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (cache->line_size != i3) goto overflow; 96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov checkRes = check_cache(cache); 98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (checkRes) { 99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(fmsg)("%s", checkRes); 100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov goto bad; 101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return; 104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov bad: 106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(fmsg_bad_option)(opt, ""); 107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov overflow: 109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(fmsg_bad_option)(opt, 110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov "One of the cache parameters was too large and overflowed.\n"); 111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy StepanovBool VG_(str_clo_cache_opt)(Char *arg, 115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_I1c, 116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_D1c, 117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_LLc) 118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Char* tmp_str; 120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if VG_STR_CLO(arg, "--I1", tmp_str) { 122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov parse_cache_opt(clo_I1c, arg, tmp_str); 123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return True; 124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else if VG_STR_CLO(arg, "--D1", tmp_str) { 125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov parse_cache_opt(clo_D1c, arg, tmp_str); 126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return True; 127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else if (VG_STR_CLO(arg, "--L2", tmp_str) || // for backwards compatibility 128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_STR_CLO(arg, "--LL", tmp_str)) { 129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov parse_cache_opt(clo_LLc, arg, tmp_str); 130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return True; 131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } else 132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return False; 133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void umsg_cache_img(Char* desc, cache_t* c) 136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(umsg)(" %s: %'d B, %d-way, %d B lines\n", desc, 138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov c->size, c->assoc, c->line_size); 139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// Verifies if c is a valid cache. 142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// An invalid value causes an assert, unless clo_redefined is True. 143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic void check_cache_or_override(Char* desc, cache_t* c, Bool clo_redefined) 144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Char* checkRes; 146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov checkRes = check_cache(c); 148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (checkRes) { 149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(umsg)("Auto-detected %s cache configuration not supported: %s", 150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov desc, checkRes); 151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov umsg_cache_img(desc, c); 152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (!clo_redefined) { 153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(umsg)("As it probably should be supported, please report a bug!\n"); 154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(umsg)("Bypass this message by using option --%s=...\n", desc); 155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov tl_assert(0); 156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid VG_(post_clo_init_configure_caches)(cache_t* I1c, 161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* D1c, 162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* LLc, 163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_I1c, 164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_D1c, 165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cache_t* clo_LLc) 166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define DEFINED(L) (-1 != L->size || -1 != L->assoc || -1 != L->line_size) 168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Count how many were defined on the command line. 170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Bool all_caches_clo_defined = 171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (DEFINED(clo_I1c) && 172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov DEFINED(clo_D1c) && 173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov DEFINED(clo_LLc)); 174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Set the cache config (using auto-detection, if supported by the 176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // architecture). 177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(configure_caches)( I1c, D1c, LLc, all_caches_clo_defined ); 178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Check the default/auto-detected values. 180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Allow the user to override invalid auto-detected caches 181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // with command line. 182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov check_cache_or_override ("I1", I1c, DEFINED(clo_I1c)); 183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov check_cache_or_override ("D1", D1c, DEFINED(clo_D1c)); 184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov check_cache_or_override ("LL", LLc, DEFINED(clo_LLc)); 185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // Then replace with any defined on the command line. (Already checked in 187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov // VG(parse_clo_cache_opt)().) 188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (DEFINED(clo_I1c)) { *I1c = *clo_I1c; } 189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (DEFINED(clo_D1c)) { *D1c = *clo_D1c; } 190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (DEFINED(clo_LLc)) { *LLc = *clo_LLc; } 191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (VG_(clo_verbosity) >= 2) { 193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(umsg)("Cache configuration used:\n"); 194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov umsg_cache_img ("I1", I1c); 195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov umsg_cache_img ("D1", D1c); 196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov umsg_cache_img ("LL", LLc); 197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef DEFINED 199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid VG_(print_cache_clo_opts)() 202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(printf)( 204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov" --I1=<size>,<assoc>,<line_size> set I1 cache manually\n" 205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov" --D1=<size>,<assoc>,<line_size> set D1 cache manually\n" 206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov" --LL=<size>,<assoc>,<line_size> set LL cache manually\n" 207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov ); 208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 209