00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060 #ifndef config_cache_INCLUDED
00061 #define config_cache_INCLUDED
00062
00063 #ifdef _KEEP_RCS_ID
00064
00065 #endif
00066
00067
00068
00069
00070
00071
00072
00073
00317 typedef enum MHD_TYPE {
00318 MHD_TYPE_NONE=222,
00319 MHD_TYPE_CACHE,
00320 MHD_TYPE_MEM
00321 } MHD_TYPE;
00322
00323 typedef struct MHD_LEVEL {
00324 MHD_TYPE Type;
00325 INT64 Size;
00326 INT64 Effective_Size;
00327 INT32 Line_Size;
00328 INT32 Clean_Miss_Penalty;
00329 INT32 Dirty_Miss_Penalty;
00330 INT32 Associativity;
00331 INT32 TLB_Entries;
00332 INT32 Page_Size;
00333 BOOL Prefetch_Level;
00334 INT32 TLB_Clean_Miss_Penalty;
00335 INT32 TLB_Dirty_Miss_Penalty;
00336
00337 double Typical_Outstanding;
00338 double Load_Op_Overlap_1;
00339 double Load_Op_Overlap_2;
00340 INT32 Pct_Excess_Writes_Nonhidable;
00341
00342
00343 char * CS_string;
00344 BOOL CMP_Set;
00345 BOOL DMP_Set;
00346 BOOL Is_Mem_Level;
00347 BOOL Is_Mem_Level_Set;
00348 INT32 Miss_Penalty;
00349 BOOL Miss_Penalty_Set;
00350 BOOL TLB_CMP_Set;
00351 BOOL TLB_DMP_Set;
00352 INT32 TLB_Miss_Penalty;
00353 BOOL TLB_MP_Set;
00354
00355 #if defined(_LANGUAGE_C_PLUS_PLUS)
00356 MHD_LEVEL() : Type(MHD_TYPE_NONE),
00357 Size(-1), Line_Size(-1),
00358 Clean_Miss_Penalty(-1), Dirty_Miss_Penalty(-1),
00359 Associativity(-1), Effective_Size(-1),
00360 TLB_Entries(-1), Page_Size(-1), Prefetch_Level (-1),
00361 TLB_Clean_Miss_Penalty(-1), TLB_Dirty_Miss_Penalty(-1),
00362 Typical_Outstanding(-1.0),
00363 Load_Op_Overlap_1(-1.0), Load_Op_Overlap_2(-1.0),
00364 Pct_Excess_Writes_Nonhidable(-1),
00365 CS_string (NULL), CMP_Set (FALSE), DMP_Set (FALSE),
00366 Is_Mem_Level(-1), Is_Mem_Level_Set(FALSE),
00367 Miss_Penalty(-1), Miss_Penalty_Set(FALSE),
00368 TLB_CMP_Set (FALSE), TLB_DMP_Set (FALSE),
00369 TLB_Miss_Penalty(-1), TLB_MP_Set(FALSE) {}
00370 MHD_LEVEL(MHD_TYPE type, INT64 cs, INT32 ls, INT32 cmp, INT32 dmp,
00371 INT32 assoc, INT32 entries, INT32 pagesz,
00372 INT32 tlb_cmp, INT32 tlb_dmp,
00373 double outstanding, double op_overlap_1, double op_overlap_2,
00374 INT32 pct_excess_writes_nonhidable);
00375 MHD_LEVEL(const MHD_LEVEL& x) { *this = x; }
00376 ~MHD_LEVEL() {}
00377
00378 MHD_LEVEL& operator = (const MHD_LEVEL&);
00379
00380 void Print(FILE* f) const;
00381 void Merge_Options(const MHD_LEVEL& o);
00382 BOOL Valid() const;
00383 BOOL TLB_Valid() const;
00384
00385 private:
00386 void Compute_Effective_Size();
00387 #endif
00388
00389 } MHD_LEVEL;
00390
00391
00392 #define MHD_MAX_LEVELS 4
00393
00394 typedef struct MHD {
00395 INT32 Loop_Overhead_Base;
00396 INT32 Loop_Overhead_Memref;
00397 BOOL Non_Blocking_Loads;
00398 INT32 TLB_Trustworthiness;
00399 BOOL TLB_NoBlocking_Model;
00400 MHD_LEVEL L[MHD_MAX_LEVELS];
00401
00402 #if defined(_LANGUAGE_C_PLUS_PLUS)
00403 INT First();
00404 INT Next(INT);
00405 void Merge_Options(const MHD&);
00406 void Initialize();
00407 void Print(FILE*) const;
00408
00409 MHD() : Non_Blocking_Loads(-1),
00410 Loop_Overhead_Base(-1),
00411 Loop_Overhead_Memref(-1),
00412 TLB_Trustworthiness(-1),
00413 TLB_NoBlocking_Model(-1) {}
00414 ~MHD() {}
00415
00416 private:
00417
00418 MHD(const MHD&);
00419 #endif
00420 } MHD;
00421
00422 extern MHD Mhd;
00423 extern MHD Mhd_Options;
00424
00425 #endif