Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

410 lines
17 KiB

  1. #ifndef IA64PROF_H_INCLUDED
  2. #define IA64PROF_H_INCLUDED
  3. /*++
  4. Copyright (c) 1989-2000 Microsoft Corporation
  5. Component Name:
  6. IA64 Profiling
  7. Module Name:
  8. ia64prof.h
  9. Abstract:
  10. This header file presents the IA64 specific profiling definitions
  11. Author:
  12. David N. Cutler (davec) 5-Mar-1989
  13. Environment:
  14. ToBeSpecified
  15. Revision History:
  16. 3/15/2000 Thierry Fevrier (v-thief@microsoft.com):
  17. Initial version
  18. --*/
  19. //
  20. // Warning: The definition of HALPROFILE_PCR should match the HalReserved[] type definition
  21. // and the PROCESSOR_PROFILING_INDEX based indexes.
  22. //
  23. //
  24. // IA64 Generic - Number of PMCs / PMDs pairs.
  25. //
  26. #define PROCESSOR_IA64_PERFCOUNTERS_PAIRS 4
  27. typedef struct _HALPROFILE_PCR {
  28. ULONGLONG ProfilingRunning;
  29. ULONGLONG ProfilingInterruptHandler;
  30. ULONGLONG ProfilingInterrupts; // XXTF - DEBUG
  31. ULONGLONG ProfilingInterruptsWithoutProfiling; // XXTF - DEBUG
  32. ULONGLONG ProfileSource [ PROCESSOR_IA64_PERFCOUNTERS_PAIRS ];
  33. ULONGLONG PerfCnfg [ PROCESSOR_IA64_PERFCOUNTERS_PAIRS ];
  34. ULONGLONG PerfData [ PROCESSOR_IA64_PERFCOUNTERS_PAIRS ];
  35. ULONGLONG PerfCnfgReload[ PROCESSOR_IA64_PERFCOUNTERS_PAIRS ];
  36. ULONGLONG PerfDataReload[ PROCESSOR_IA64_PERFCOUNTERS_PAIRS ];
  37. } HALPROFILE_PCR, *PHALPROFILE_PCR;
  38. #define HALPROFILE_PCR ( (PHALPROFILE_PCR)(&(PCR->HalReserved[PROCESSOR_PROFILING_INDEX])) )
  39. //
  40. // Define space in the HAL-reserved part of the PCR structure for each
  41. // performance counter's interval count
  42. //
  43. // Note that i64prfs.s depends on these positions in the PCR.
  44. //
  45. //
  46. // Per-Processor Profiling Status
  47. //
  48. #define HalpProfilingRunning HALPROFILE_PCR->ProfilingRunning
  49. //
  50. // Per-Processor registered Profiling Interrupt Handler
  51. //
  52. #define HalpProfilingInterruptHandler HALPROFILE_PCR->ProfilingInterruptHandler
  53. //
  54. // Per-Processor Profiling Interrupts Status
  55. //
  56. #define HalpProfilingInterrupts HALPROFILE_PCR->ProfilingInterrupts
  57. #define HalpProfilingInterruptsWithoutProfiling HALPROFILE_PCR->ProfilingInterruptsWithoutProfiling
  58. //
  59. // Define the currently selected profile source for each counter
  60. //
  61. // FIXFIX - Merced Specific.
  62. #define HalpProfileSource4 (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[0] // PMC4
  63. #define HalpProfileSource5 (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[1] // PMC5
  64. #define HalpProfileSource6 (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[2] // PMC6
  65. #define HalpProfileSource7 (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[3] // PMC7
  66. __inline
  67. VOID
  68. HalpSetProfileSource(
  69. ULONG Pmcd,
  70. KPROFILE_SOURCE ProfileSource,
  71. ULONGLONG ProfileSourceConfig
  72. )
  73. {
  74. ULONG pmcdIdx;
  75. ASSERTMSG("HAL!HalpSetProfileSource: invalid Pmcd!\n", ((Pmcd >= 4) && ((Pmcd <= 7))));
  76. pmcdIdx = Pmcd - PROCESSOR_IA64_PERFCOUNTERS_PAIRS;
  77. (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[pmcdIdx] = ProfileSource;
  78. (KPROFILE_SOURCE)HALPROFILE_PCR->PerfCnfg[pmcdIdx] = ProfileSourceConfig;
  79. } // HalpSetProfileSource()
  80. __inline
  81. KPROFILE_SOURCE
  82. HalpGetProfileSource(
  83. ULONG Pmcd
  84. )
  85. {
  86. ULONG pmcdIdx;
  87. ASSERTMSG("HAL!HalpGetProfileSource: invalid Pmcd!\n", ((Pmcd >= 4) && ((Pmcd <= 7))));
  88. pmcdIdx = Pmcd - PROCESSOR_IA64_PERFCOUNTERS_PAIRS;
  89. return (KPROFILE_SOURCE)HALPROFILE_PCR->ProfileSource[pmcdIdx];
  90. } // HalpGetProfileSource()
  91. #define HalpProfileCnfg4 (ULONGLONG)HALPROFILE_PCR->PerfCnfg[0]
  92. #define HalpProfileCnfg5 (ULONGLONG)HALPROFILE_PCR->PerfCnfg[1]
  93. #define HalpProfileCnfg6 (ULONGLONG)HALPROFILE_PCR->PerfCnfg[2]
  94. #define HalpProfileCnfg7 (ULONGLONG)HALPROFILE_PCR->PerfCnfg[3]
  95. #define PCRProfileData4 ( (PULONGLONG) (&(HALPROFILE_PCR->PerfData[0])) )
  96. #define PCRProfileData5 ( (PULONGLONG) (&(HALPROFILE_PCR->PerfData[1])) )
  97. #define PCRProfileData6 ( (PULONGLONG) (&(HALPROFILE_PCR->PerfData[2])) )
  98. #define PCRProfileData7 ( (PULONGLONG) (&(HALPROFILE_PCR->PerfData[3])) )
  99. #define PCRProfileCnfg4Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfCnfgReload[0])) )
  100. #define PCRProfileCnfg5Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfCnfgReload[1])) )
  101. #define PCRProfileCnfg6Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfCnfgReload[2])) )
  102. #define PCRProfileCnfg7Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfCnfgReload[3])) )
  103. #define PCRProfileData4Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfCnfgReload[0])) )
  104. #define PCRProfileData5Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfDataReload[1])) )
  105. #define PCRProfileData6Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfDataReload[2])) )
  106. #define PCRProfileData7Reload ( (PULONGLONG) (&(HALPROFILE_PCR->PerfDataReload[3])) )
  107. //
  108. // IA64 Monitored Events have
  109. //
  110. typedef enum _PMCD_SOURCE_MASK {
  111. // FIXFIX - 04/2002: First implementation uses defines.
  112. // : We should use ULONG union and bit fields for next version.
  113. PMCD_MASK_4 = 0x1,
  114. PMCD_MASK_5 = 0x2,
  115. PMCD_MASK_6 = 0x4,
  116. PMCD_MASK_7 = 0x8,
  117. PMCD_MASK_45 = (PMCD_MASK_4 | PMCD_MASK_5),
  118. PMCD_MASK_67 = (PMCD_MASK_6 | PMCD_MASK_7),
  119. PMCD_MASK_4567 = (PMCD_MASK_4 | PMCD_MASK_5 | PMCD_MASK_6 | PMCD_MASK_7),
  120. //
  121. // Source Sets definitions:
  122. //
  123. PMCD_MASK_SET = 0xffff0000,
  124. PMCD_MASK_SET_SHIFT = 0x10,
  125. PMCD_MASK_SET_PMCD = 0xff,
  126. PMCD_MASK_SET_PMCD_SHIFT = 0x10,
  127. PMCD_MASK_SET_PMCD_4 = (4 << PMCD_MASK_SET_PMCD_SHIFT),
  128. PMCD_MASK_SET_PMCD_5 = (5 << PMCD_MASK_SET_PMCD_SHIFT),
  129. PMCD_MASK_SET_PMCD_6 = (6 << PMCD_MASK_SET_PMCD_SHIFT),
  130. PMCD_MASK_SET_PMCD_7 = (7 << PMCD_MASK_SET_PMCD_SHIFT),
  131. PMCD_MASK_SET_DATA_SHIFT = 0x18,
  132. PMCD_MASK_SET_L0D_CACHE_0 = ((1 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  133. PMCD_MASK_SET_L0D_CACHE_1 = ((2 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  134. PMCD_MASK_SET_L0D_CACHE_2 = ((3 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  135. PMCD_MASK_SET_L0D_CACHE_3 = ((4 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  136. PMCD_MASK_SET_L0D_CACHE_4 = ((5 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  137. PMCD_MASK_SET_L0D_CACHE_5 = ((6 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_5),
  138. PMCD_MASK_SET_L1_CACHE_0 = ((7 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  139. PMCD_MASK_SET_L1_CACHE_1 = ((8 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  140. PMCD_MASK_SET_L1_CACHE_2 = ((9 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  141. PMCD_MASK_SET_L1_CACHE_3 = ((10 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  142. PMCD_MASK_SET_L1_CACHE_4 = ((11 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  143. PMCD_MASK_SET_L1_CACHE_5 = ((12 << PMCD_MASK_SET_DATA_SHIFT) | PMCD_MASK_SET_PMCD_4),
  144. } PMCD_SOURCE_MASK;
  145. //
  146. // Define the mapping between possible profile sources and the
  147. // CPU-specific settings for the IA64 specific Event Counters.
  148. //
  149. typedef struct _HALP_PROFILE_MAPPING {
  150. BOOLEAN Supported;
  151. ULONG Event;
  152. ULONG ProfileSource;
  153. ULONG EventMask;
  154. ULONGLONG Interval;
  155. ULONGLONG IntervalDef; // Default or Desired Interval
  156. ULONGLONG IntervalMax; // Maximum Interval
  157. ULONGLONG IntervalMin; // Maximum Interval
  158. UCHAR PrivilegeLevel; // Current Privilege Level
  159. UCHAR PrivilegeLevelDef; // Default or Desired Privilege Level
  160. UCHAR OverflowInterrupt; // Current Overflow Interrupt state
  161. UCHAR OverflowInterruptDef; // Default or Desired Overflow Interrupt state
  162. UCHAR PrivilegeEnable; // Current Privilege Enable state
  163. UCHAR PrivilegeEnableDef; // Default or Desired Privilege Enable state
  164. UCHAR UnitMask; // Current Event specific Unit Mask
  165. UCHAR UnitMaskDef; // Default or Desired Event specific Unit Mask
  166. UCHAR Threshold; // Current Threshold
  167. UCHAR ThresholdDef; // Default or Desired Threshold for multi-occurence events.
  168. UCHAR InstructionSetMask; // Current Instruction Set Mask
  169. UCHAR InstructionSetMaskDef; // Default or Desired Instruction Set Mask
  170. } HALP_PROFILE_MAPPING, *PHALP_PROFILE_MAPPING;
  171. /////////////
  172. //
  173. // XXTF - ToBeDone - 02/08/2000.
  174. // The following section should provide the IA64 PMC APIs.
  175. // These should be considered as inline versions of the Halp*ProfileCounter*()
  176. // functions. This will allow user application to use standardized APIs to
  177. // program the performance monitor counters.
  178. //
  179. // HalpSetProfileCounterConfiguration()
  180. // HalpSetProfileCounterPrivilegeLevelMask()
  181. typedef enum _PMC_PLM_MASK {
  182. PMC_PLM_NONE = 0x0,
  183. PMC_PLM_0 = 0x1,
  184. PMC_PLM_1 = 0x2,
  185. PMC_PLM_2 = 0x4,
  186. PMC_PLM_3 = 0x8,
  187. PMC_PLM_ALL = (PMC_PLM_3|PMC_PLM_2|PMC_PLM_1|PMC_PLM_0)
  188. } PMC_PLM_MASK;
  189. // HalpSetProfileCounterConfiguration()
  190. typedef enum _PMC_NAMESPACE {
  191. PMC_DISABLE_OVERFLOW_INTERRUPT = 0x0,
  192. PMC_ENABLE_OVERFLOW_INTERRUPT = 0x1,
  193. PMC_DISABLE_PRIVILEGE_MONITOR = 0x0,
  194. PMC_ENABLE_PRIVILEGE_MONITOR = 0x1,
  195. PMC_UNIT_MASK_DEFAULT = 0x0,
  196. PMC_UNIT_MASK_RSEFILLS = 0x1,
  197. PMC_UNIT_MASK_INTANDFP_OPS = 0x3, // Ex: Specific umask for speculation events.
  198. PMC_UNIT_MASK_ALLTLBMISSES = 0x3, // Ex: Specific umask for tlb events.
  199. PMC_UNIT_MASK_L1TLBMISSES = 0x1, // Ex: Specific umask for tlb events.
  200. PMC_UNIT_MASK_L2TLBMISSES = 0x2, // Ex: Specific umask for tlb events.
  201. PMC_UNIT_MASK_IFETCH_BYPASS = 0x2, // Ex: Specific umask for inst. fetch cancels
  202. PMC_UNIT_MASK_IFETCH_STFILLWB = 0x6, // Ex: Specific umask for inst. fetch cancels
  203. PMC_UNIT_MASK_IFETCH_DATAREAD = 0x7, // Ex: Specific umask for inst. fetch cancels
  204. PMC_UNIT_MASK_L3ACCESS_ANY = 0x9, // Ex: Specific umask for L3 accesses cancels
  205. PMC_UNIT_MASK_L2_DATA_RDWR = 0x3, // Ex: Specific umask for L2 data references
  206. PMC_UNIT_MASK_L2_DATA_READ = 0x1, // Ex: Specific umask for L2 data references
  207. PMC_UNIT_MASK_L2_DATA_WRITE = 0x2, // Ex: Specific umask for L2 data references
  208. PMC_UNIT_MASK_L2_DATA_BYPASS_L1DTOL2A = 0x0, // Ex: Specific umask for L2 bypasses
  209. PMC_UNIT_MASK_L2_DATA_BYPASS_L1WTOL2I = 0x1, // Ex: Specific umask for L2 bypasses
  210. PMC_UNIT_MASK_L3_DATA_BYPASS_L1DTOL2A = 0x2, // Ex: Specific umask for L2 bypasses
  211. PMC_UNIT_MASK_L2_INST_BYPASS_L1DTOL2A = 0x4, // Ex: Specific umask for L2 bypasses
  212. PMC_UNIT_MASK_L2_INST_BYPASS_L1WTOL2I = 0x5, // Ex: Specific umask for L2 bypasses
  213. PMC_UNIT_MASK_L3_INST_BYPASS_L1DTOL2A = 0x6, // Ex: Specific umask for L2 bypasses
  214. PMC_UNIT_MASK_EVENT_SELECTED_LOSET = 0x0,
  215. PMC_UNIT_MASK_EVENT_SELECTED_HISET = 0x8,
  216. PMC_UNIT_MASK_L2_INT_LOADS = 0x8, // Ex: Specific umask for L2 operation types
  217. PMC_UNIT_MASK_L2_FP_LOADS = 0x9, // Ex: Specific umask for L2 operation types
  218. PMC_UNIT_MASK_L2_RMW_STORES = 0xa, // Ex: Specific umask for L2 operation types
  219. PMC_UNIT_MASK_L2_NON_RMW_STORES = 0xb, // Ex: Specific umask for L2 operation types
  220. PMC_UNIT_MASK_L2_NONLOADS_NONSTORES = 0xc, // Ex: Specific umask for L2 operation types
  221. PMC_UNIT_MASK_L3_READS_HITS = 0xd, // Ex: Specific umask for L3 reads
  222. PMC_UNIT_MASK_L3_READS_MISSES = 0xe, // Ex: Specific umask for L3 reads
  223. PMC_UNIT_MASK_L3_READS_IFETCH_REFERENCES = 0x7, // Ex: Specific umask for L3 reads
  224. PMC_UNIT_MASK_L3_READS_IFETCH_HITS = 0x5, // Ex: Specific umask for L3 reads
  225. PMC_UNIT_MASK_L3_READS_IFETCH_MISSES = 0x6, // Ex: Specific umask for L3 reads
  226. PMC_UNIT_MASK_L3_READS_DATA_HITS = 0x9, // Ex: Specific umask for L3 reads
  227. PMC_UNIT_MASK_L3_READS_DATA_MISSES = 0xa, // Ex: Specific umask for L3 reads
  228. PMC_UNIT_MASK_L3_READS_DATA_REFERENCES = 0xb, // Ex: Specific umask for L3 reads
  229. PMC_UNIT_MASK_L3_WRITES_HITS = 0xd, // Ex: Specific umask for L3 reads
  230. PMC_UNIT_MASK_L3_WRITES_MISSES = 0xe, // Ex: Specific umask for L3 reads
  231. PMC_UNIT_MASK_L3_WRITES_DATA_REFERENCES = 0x7, // Ex: Specific umask for L3 reads
  232. PMC_UNIT_MASK_L3_WRITES_DATA_HITS = 0x5, // Ex: Specific umask for L3 reads
  233. PMC_UNIT_MASK_L3_WRITES_DATA_MISSES = 0x6, // Ex: Specific umask for L3 reads
  234. PMC_UNIT_MASK_L3_WRITEBACK_HITS = 0x9, // Ex: Specific umask for L3 reads
  235. PMC_UNIT_MASK_L3_WRITEBACK_MISSES = 0xa, // Ex: Specific umask for L3 reads
  236. PMC_UNIT_MASK_L3_WRITEBACK_REFERENCES = 0xb, // Ex: Specific umask for L3 reads
  237. PMC_UNIT_MASK_BUS_ANY = 0x3, // Ex: Specific umask for BUS transactions
  238. PMC_UNIT_MASK_BUS_BYSELF = 0x2, // Ex: Specific umask for BUS transactions
  239. PMC_UNIT_MASK_BUS_NONPRI_AGENT = 0x1, // Ex: Specific umask for BUS transactions
  240. PMC_UNIT_MASK_BUS_MEMORY_ALL = 0xc, // Ex: Specific umask for BUS transactions
  241. PMC_UNIT_MASK_BUS_MEMORY_128BYTE = 0x4, // Ex: Specific umask for BUS transactions
  242. PMC_UNIT_MASK_BUS_MEMORY_LTH_128BYTE = 0x8, // Ex: Specific umask for BUS transactions
  243. PMC_UNIT_MASK_BUS_MEMORY_READS_ALL = 0xc, // Ex: Specific umask for BUS reads
  244. PMC_UNIT_MASK_BUS_MEMORY_BIL = 0x0, // Ex: Specific umask for BUS reads
  245. PMC_UNIT_MASK_BUS_MEMORY_BRL = 0x4, // Ex: Specific umask for BUS reads
  246. PMC_UNIT_MASK_BUS_MEMORY_BRIL = 0x8, // Ex: Specific umask for BUS reads
  247. PMC_UNIT_MASK_BUS_WB_ALL = 0xf, // Ex: Specific umask for BUS writebacks
  248. PMC_UNIT_MASK_BUS_WB_BYSELF = 0xe, // Ex: Specific umask for BUS writebacks
  249. PMC_UNIT_MASK_BUS_WB_NONPRI_AGENT = 0xd, // Ex: Specific umask for BUS writebacks
  250. PMC_UNIT_MASK_BUS_WB_BURST_ALL = 0x7, // Ex: Specific umask for BUS writebacks
  251. PMC_UNIT_MASK_BUS_WB_BURST_BYSELF = 0x6, // Ex: Specific umask for BUS writebacks
  252. PMC_UNIT_MASK_BUS_WB_BURST_NONPRI_AGENT = 0x5, // Ex: Specific umask for BUS writebacks
  253. PMC_UNIT_MASK_BUS_WB_ZEROBYTE_ALL = 0x7, // Ex: Specific umask for BUS writebacks
  254. PMC_UNIT_MASK_BUS_WB_ZEROBYTE_BYSELF = 0x6, // Ex: Specific umask for BUS writebacks
  255. PMC_UNIT_MASK_BUS_SNOOPS_ALL = 0xf, // Ex: Specific umask for BUS writebacks
  256. PMC_UNIT_MASK_BUS_SNOOPS_BYSELF = 0xe, // Ex: Specific umask for BUS writebacks
  257. PMC_UNIT_MASK_BUS_SNOOPS_NONPRI_AGENT = 0xd, // Ex: Specific umask for BUS writebacks
  258. PMC_UNIT_MASK_RSE_LOADS = 0x1, // Ex: Specific umask for RSE accesses
  259. PMC_UNIT_MASK_RSE_STORES = 0x2, // Ex: Specific umask for RSE accesses
  260. PMC_UNIT_MASK_RSE_LOAD_UNDERFLOWS = 0x4, // Ex: Specific umask for RSE accesses
  261. PMC_UNIT_MASK_ALL = 0xf,
  262. PMC_THRESHOLD_DEFAULT = 0x0,
  263. } PMC_NAMESPACE;
  264. // HalpSetProfileCounterConfiguration()
  265. // HalpSetProfileCounterInstructionSetMask()
  266. typedef enum _PMC_INSTRUCTION_SET_MASK {
  267. PMC_ISM_ALL = 0x0,
  268. PMC_ISM_IA64 = 0x1,
  269. PMC_ISM_IA32 = 0x2,
  270. PMC_ISM_NONE = 0x3
  271. } PMC_INSTRUCTION_SET_MASK;
  272. //
  273. ////////////
  274. /////////////
  275. //
  276. // The following section provides IA64 PMU Events Masks definitions.
  277. // Microarchitectural definitions are defined in processor specific header file.
  278. //
  279. //
  280. // BranchPathPrediction - Branch Path Mask
  281. //
  282. // not really a mask, more a specification value.
  283. //
  284. typedef enum _BRANCH_PATH_RESULT_MASK {
  285. MISPRED_NT = 0x0,
  286. MISPRED_TAKEN = 0x1,
  287. OKPRED_NT = 0x2,
  288. OKPRED_TAKEN = 0x3,
  289. } BRANCH_PATH_RESULT_MASK;
  290. //
  291. // BranchTakenDetail - Slot Unit Mask.
  292. //
  293. typedef enum _BRANCH_TAKEN_DETAIL_SLOT_MASK {
  294. INSTRUCTION_SLOT0 = 0x1,
  295. INSTRUCTION_SLOT1 = 0x2,
  296. INSTRUCTION_SLOT2 = 0x4,
  297. NOT_TAKEN_BRANCH = 0x8
  298. } BRANCH_TAKEN_DETAIL_SLOT_MASK;
  299. //
  300. // BranchMultiWayDetail - Prediction OutCome Mask
  301. //
  302. // not really a mask, more a specification value.
  303. //
  304. typedef enum _BRANCH_DETAIL_PREDICTION_OUTCOME_MASK {
  305. ALL_PREDICTIONS = 0x0,
  306. CORRECT_PREDICTION = 0x1,
  307. WRONG_PATH = 0x2,
  308. WRONG_TARGET = 0x3
  309. } BRANCH_MWAY_DETAIL_PREDICTION_OUTCOME_MASK;
  310. //
  311. // BranchMultiWayDetail - Branch Path Mask
  312. //
  313. // not really a mask, more a specification value.
  314. //
  315. typedef enum _BRANCH_MWAY_DETAIL_BRANCH_PATH_MASK {
  316. NOT_TAKEN = 0x0,
  317. TAKEN = 0x1,
  318. ALL_PATH = 0x2
  319. } BRANCH_MWAY_DETAIL_BRANCH_PATH_MASK;
  320. //
  321. // INST_TYPE for:
  322. //
  323. // FailedSpeculativeCheckLoads
  324. // AdvancedCheckLoads
  325. // FailedAdvancedCheckLoads
  326. // ALATOverflows
  327. //
  328. typedef enum _SPECULATION_EVENT_MASK {
  329. NONE = 0x0,
  330. INTEGER = 0x1,
  331. FP = 0x2,
  332. ALL = 0x3
  333. } SPECULATION_EVENT_MASK;
  334. //
  335. // CpuCycles - Executing Instruction Set
  336. //
  337. typedef enum _CPU_CYCLES_MODE_MASK {
  338. ALL_MODES = 0x0,
  339. IA64_MODE = 0x1,
  340. IA32_MODE = 0x2
  341. } CPU_CYCLES_MODE_MASK;
  342. //
  343. ////////////
  344. #endif /* IA64PROF_H_INCLUDED */