Blame src/libpfm-3.y/lib/i386_p6_events.h

Packit Service a1973e
/*
Packit Service a1973e
 * Copyright (c) 2005-2007 Hewlett-Packard Development Company, L.P.
Packit Service a1973e
 * Contributed by Stephane Eranian <eranian@hpl.hp.com>
Packit Service a1973e
 *
Packit Service a1973e
 * Permission is hereby granted, free of charge, to any person obtaining a copy
Packit Service a1973e
 * of this software and associated documentation files (the "Software"), to deal
Packit Service a1973e
 * in the Software without restriction, including without limitation the rights
Packit Service a1973e
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
Packit Service a1973e
 * of the Software, and to permit persons to whom the Software is furnished to do so,
Packit Service a1973e
 * subject to the following conditions:
Packit Service a1973e
 *
Packit Service a1973e
 * The above copyright notice and this permission notice shall be included in all
Packit Service a1973e
 * copies or substantial portions of the Software.
Packit Service a1973e
 *
Packit Service a1973e
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Packit Service a1973e
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
Packit Service a1973e
 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
Packit Service a1973e
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Packit Service a1973e
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
Packit Service a1973e
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit Service a1973e
 *
Packit Service a1973e
 * This file is part of libpfm, a performance monitoring support library for
Packit Service a1973e
 * applications on Linux.
Packit Service a1973e
 */
Packit Service a1973e
#define I386_P6_MESI_UMASKS \
Packit Service a1973e
	.pme_flags   = PFMLIB_I386_P6_UMASK_COMBO, \
Packit Service a1973e
	.pme_numasks = 4, \
Packit Service a1973e
	.pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "I", \
Packit Service a1973e
		  .pme_udesc = "invalid state", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "S", \
Packit Service a1973e
		  .pme_udesc = "shared state", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "E", \
Packit Service a1973e
		  .pme_udesc = "exclusive state", \
Packit Service a1973e
		  .pme_ucode = 0x4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "M", \
Packit Service a1973e
		  .pme_udesc = "modified state", \
Packit Service a1973e
		  .pme_ucode = 0x8 \
Packit Service a1973e
		}}
Packit Service a1973e
Packit Service a1973e
#define I386_PM_MESI_PREFETCH_UMASKS \
Packit Service a1973e
	.pme_flags   = PFMLIB_I386_P6_UMASK_COMBO, \
Packit Service a1973e
	.pme_numasks = 7, \
Packit Service a1973e
	.pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "I", \
Packit Service a1973e
		  .pme_udesc = "invalid state", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "S", \
Packit Service a1973e
		  .pme_udesc = "shared state", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "E", \
Packit Service a1973e
		  .pme_udesc = "exclusive state", \
Packit Service a1973e
		  .pme_ucode = 0x4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "M", \
Packit Service a1973e
		  .pme_udesc = "modified state", \
Packit Service a1973e
		  .pme_ucode = 0x8 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "EXCL_HW_PREFETCH", \
Packit Service a1973e
		  .pme_udesc = "exclude hardware prefetched lines", \
Packit Service a1973e
		  .pme_ucode = 0x0 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ONLY_HW_PREFETCH", \
Packit Service a1973e
		  .pme_udesc = "only hardware prefetched lines", \
Packit Service a1973e
		  .pme_ucode = 0x1 << 4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "NON_HW_PREFETCH", \
Packit Service a1973e
		  .pme_udesc = "non hardware prefetched lines", \
Packit Service a1973e
		  .pme_ucode = 0x2 << 4 \
Packit Service a1973e
		}} 
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define I386_P6_PII_ONLY_PME \
Packit Service a1973e
	{.pme_name = "MMX_INSTR_EXEC",\
Packit Service a1973e
	 .pme_code = 0xb0,\
Packit Service a1973e
	 .pme_desc = "Number of MMX instructions executed"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MMX_INSTR_RET",\
Packit Service a1973e
	 .pme_code = 0xce,\
Packit Service a1973e
	 .pme_desc = "Number of MMX instructions retired"\
Packit Service a1973e
	}\
Packit Service a1973e
Packit Service a1973e
#define I386_P6_PII_PIII_PME \
Packit Service a1973e
	{.pme_name = "MMX_SAT_INSTR_EXEC",\
Packit Service a1973e
	 .pme_code = 0xb1,\
Packit Service a1973e
	 .pme_desc = "Number of MMX saturating instructions executed"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MMX_UOPS_EXEC",\
Packit Service a1973e
	 .pme_code = 0xb2,\
Packit Service a1973e
	 .pme_desc = "Number of MMX micro-ops executed"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MMX_INSTR_TYPE_EXEC",\
Packit Service a1973e
	 .pme_code = 0xb3,\
Packit Service a1973e
	 .pme_desc = "Number of MMX instructions executed by type",\
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_UMASK_COMBO, \
Packit Service a1973e
	 .pme_numasks = 6, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "MUL", \
Packit Service a1973e
		  .pme_udesc = "MMX packed multiply instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "SHIFT", \
Packit Service a1973e
		  .pme_udesc = "MMX packed shift instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "PACK", \
Packit Service a1973e
		  .pme_udesc = "MMX pack operation instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "UNPACK", \
Packit Service a1973e
		  .pme_udesc = "MMX unpack operation instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x8 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "LOGICAL", \
Packit Service a1973e
		  .pme_udesc = "MMX packed logical instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x10 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ARITH", \
Packit Service a1973e
		  .pme_udesc = "MMX packed arithmetic instructions executed", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 }\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "FP_MMX_TRANS",\
Packit Service a1973e
	 .pme_code = 0xcc,\
Packit Service a1973e
	 .pme_desc = "Number of MMX transitions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "TO_FP", \
Packit Service a1973e
		  .pme_udesc = "from MMX instructions to floating-point instructions", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "TO_MMX", \
Packit Service a1973e
		  .pme_udesc = "from floating-point instructions to MMX instructions", \
Packit Service a1973e
		  .pme_ucode = 0x01 \
Packit Service a1973e
		}\
Packit Service a1973e
	 }\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MMX_ASSIST",\
Packit Service a1973e
	 .pme_code = 0xcd,\
Packit Service a1973e
	 .pme_desc = "Number of MMX micro-ops executed"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "SEG_RENAME_STALLS",\
Packit Service a1973e
	 .pme_code = 0xd4,\
Packit Service a1973e
	 .pme_desc = "Number of Segment Register Renaming Stalls", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_UMASK_COMBO, \
Packit Service a1973e
	 .pme_numasks = 4, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "ES", \
Packit Service a1973e
		  .pme_udesc = "Segment register ES", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "DS", \
Packit Service a1973e
		  .pme_udesc = "Segment register DS", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "FS", \
Packit Service a1973e
		  .pme_udesc = "Segment register FS", \
Packit Service a1973e
		  .pme_ucode = 0x4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "GS", \
Packit Service a1973e
		  .pme_udesc = "Segment register GS", \
Packit Service a1973e
		  .pme_ucode = 0x8 \
Packit Service a1973e
		} \
Packit Service a1973e
	 }\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "SEG_REG_RENAMES",\
Packit Service a1973e
	 .pme_code = 0xd5,\
Packit Service a1973e
	 .pme_desc = "Number of Segment Register Renames", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_UMASK_COMBO, \
Packit Service a1973e
	 .pme_numasks = 4, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "ES", \
Packit Service a1973e
		  .pme_udesc = "Segment register ES", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "DS", \
Packit Service a1973e
		  .pme_udesc = "Segment register DS", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "FS", \
Packit Service a1973e
		  .pme_udesc = "Segment register FS", \
Packit Service a1973e
		  .pme_ucode = 0x4 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "GS", \
Packit Service a1973e
		  .pme_udesc = "Segment register GS", \
Packit Service a1973e
		  .pme_ucode = 0x8 \
Packit Service a1973e
		} \
Packit Service a1973e
	 }\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "RET_SEG_RENAMES",\
Packit Service a1973e
	 .pme_code = 0xd6,\
Packit Service a1973e
	 .pme_desc = "Number of segment register rename events retired"\
Packit Service a1973e
	} \
Packit Service a1973e
Packit Service a1973e
#define I386_P6_PIII_PME \
Packit Service a1973e
	{.pme_name = "EMON_KNI_PREF_DISPATCHED",\
Packit Service a1973e
	 .pme_code = 0x07,\
Packit Service a1973e
	 .pme_desc = "Number of Streaming SIMD extensions prefetch/weakly-ordered instructions dispatched " \
Packit Service a1973e
		     "(speculative prefetches are included in counting). Pentium III and later",\
Packit Service a1973e
	 .pme_numasks = 4, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "NTA", \
Packit Service a1973e
		  .pme_udesc = "prefetch NTA", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "T1", \
Packit Service a1973e
		  .pme_udesc = "prefetch T1", \
Packit Service a1973e
		  .pme_ucode = 0x01 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "T2", \
Packit Service a1973e
		  .pme_udesc = "prefetch T2", \
Packit Service a1973e
		  .pme_ucode = 0x02 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "WEAK", \
Packit Service a1973e
		  .pme_udesc = "weakly ordered stores", \
Packit Service a1973e
		  .pme_ucode = 0x03 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "EMON_KNI_PREF_MISS",\
Packit Service a1973e
	 .pme_code = 0x4b,\
Packit Service a1973e
	 .pme_desc = "Number of prefetch/weakly-ordered instructions that miss all caches. Pentium III and later",\
Packit Service a1973e
	 .pme_numasks = 4, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "NTA", \
Packit Service a1973e
		  .pme_udesc = "prefetch NTA", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "T1", \
Packit Service a1973e
		  .pme_udesc = "prefetch T1", \
Packit Service a1973e
		  .pme_ucode = 0x01 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "T2", \
Packit Service a1973e
		  .pme_udesc = "prefetch T2", \
Packit Service a1973e
		  .pme_ucode = 0x02 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "WEAK", \
Packit Service a1973e
		  .pme_udesc = "weakly ordered stores", \
Packit Service a1973e
		  .pme_ucode = 0x03 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	} \
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define I386_P6_CPU_CLK_UNHALTED \
Packit Service a1973e
	{.pme_name = "CPU_CLK_UNHALTED",\
Packit Service a1973e
	 .pme_code = 0x79,\
Packit Service a1973e
	 .pme_desc =  "Number cycles during which the processor is not halted"\
Packit Service a1973e
	}\
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define I386_P6_NOT_PM_PME \
Packit Service a1973e
	{.pme_name = "L2_LD",\
Packit Service a1973e
	 .pme_code = 0x29,\
Packit Service a1973e
	 .pme_desc =  "Number of L2 data loads. This event indicates that a normal, unlocked, load memory access "\
Packit Service a1973e
	 	"was received by the L2. It includes only L2 cacheable memory accesses; it does not include I/O "\
Packit Service a1973e
		"accesses, other non-memory accesses, or memory accesses such as UC/WT memory accesses. It does include "\
Packit Service a1973e
		"L2 cacheable TLB miss memory accesses",\
Packit Service a1973e
	 I386_P6_MESI_UMASKS\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_LINES_IN",\
Packit Service a1973e
	 .pme_code = 0x24,\
Packit Service a1973e
	 .pme_desc =  "Number of lines allocated in the L2"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_LINES_OUT",\
Packit Service a1973e
	 .pme_code = 0x26,\
Packit Service a1973e
	 .pme_desc =  "Number of lines removed from the L2 for any reason"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_M_LINES_OUTM",\
Packit Service a1973e
	 .pme_code = 0x27,\
Packit Service a1973e
	 .pme_desc =  "Number of modified lines removed from the L2 for any reason"\
Packit Service a1973e
	}\
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define I386_P6_PIII_NOT_PM_PME \
Packit Service a1973e
	{.pme_name = "EMON_KNI_INST_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xd8,\
Packit Service a1973e
	 .pme_desc = "Number of SSE instructions retired. Pentium III and later",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "PACKED_SCALAR", \
Packit Service a1973e
		  .pme_udesc = "packed and scalar instructions", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "SCALAR", \
Packit Service a1973e
		  .pme_udesc = "scalar only", \
Packit Service a1973e
		  .pme_ucode = 0x01 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "EMON_KNI_COMP_INST_RET",\
Packit Service a1973e
	 .pme_code = 0xd9,\
Packit Service a1973e
	 .pme_desc = "Number of SSE computation instructions retired. Pentium III and later",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "PACKED_SCALAR", \
Packit Service a1973e
		  .pme_udesc = "packed and scalar instructions", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "SCALAR", \
Packit Service a1973e
		  .pme_udesc = "scalar only", \
Packit Service a1973e
		  .pme_ucode = 0x01 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	}\
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
#define I386_P6_COMMON_PME \
Packit Service a1973e
	{.pme_name = "INST_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xc0,\
Packit Service a1973e
	 .pme_desc = "Number of instructions retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DATA_MEM_REFS",\
Packit Service a1973e
	 .pme_code = 0x43,\
Packit Service a1973e
	 .pme_desc = "All loads from any memory type. All stores to any memory type"\
Packit Service a1973e
		"Each part of a split is counted separately. The internal logic counts not only memory loads and stores"\
Packit Service a1973e
		" but also internal retries. 80-bit floating point accesses are double counted, since they are decomposed"\
Packit Service a1973e
		" into a 16-bit exponent load and a 64-bit mantissa load. Memory accesses are only counted when they are "\
Packit Service a1973e
		" actually performed (such as a load that gets squashed because a previous cache miss is outstanding to the"\
Packit Service a1973e
		" same address, and which finally gets performe, is only counted once). Does ot include I/O accesses or other"\
Packit Service a1973e
		" non-memory accesses"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DCU_LINES_IN",\
Packit Service a1973e
	 .pme_code = 0x45,\
Packit Service a1973e
	 .pme_desc = "Total lines allocated in the DCU"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DCU_M_LINES_IN",\
Packit Service a1973e
	 .pme_code = 0x46,\
Packit Service a1973e
	 .pme_desc = "Number of M state lines allocated in the DCU"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DCU_M_LINES_OUT",\
Packit Service a1973e
	 .pme_code = 0x47,\
Packit Service a1973e
	 .pme_desc = "Number of M state lines evicted from the DCU. This includes evictions via snoop HITM, intervention"\
Packit Service a1973e
	 	     " or replacement"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DCU_MISS_OUTSTANDING",\
Packit Service a1973e
	 .pme_code = 0x48,\
Packit Service a1973e
	 .pme_desc = "Weighted number of cycle while a DCU miss is outstanding, incremented by the number of cache misses"\
Packit Service a1973e
	 	     " at any particular time. Cacheable read requests only are considered. Uncacheable requests are excluded"\
Packit Service a1973e
		     " Read-for-ownerships are counted, as well as line fills, invalidates, and stores"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "IFU_IFETCH",\
Packit Service a1973e
	 .pme_code = 0x80,\
Packit Service a1973e
	 .pme_desc = "Number of instruction fetches, both cacheable and noncacheable including UC fetches"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "IFU_IFETCH_MISS",\
Packit Service a1973e
	 .pme_code = 0x81,\
Packit Service a1973e
	 .pme_desc = "Number of instruction fetch misses. All instructions fetches that do not hit the IFU (i.e., that"\
Packit Service a1973e
	 	     " produce memory requests). Includes UC accesses"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "ITLB_MISS",\
Packit Service a1973e
	 .pme_code = 0x85,\
Packit Service a1973e
	 .pme_desc = "Number of ITLB misses"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "IFU_MEM_STALL",\
Packit Service a1973e
	 .pme_code = 0x86,\
Packit Service a1973e
	 .pme_desc = "Number of cycles instruction fetch is stalled for any reason. Includs IFU cache misses, ITLB misses,"\
Packit Service a1973e
	 	     " ITLB faults, and other minor stalls"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "ILD_STALL",\
Packit Service a1973e
	 .pme_code = 0x87,\
Packit Service a1973e
	 .pme_desc = "Number of cycles that the instruction length decoder is stalled"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_IFETCH",\
Packit Service a1973e
	 .pme_code = 0x28,\
Packit Service a1973e
	 .pme_desc =  "Number of L2 instruction fetches. This event indicates that a normal instruction fetch was received by"\
Packit Service a1973e
	 	" the L2. The count includes only L2 cacheable instruction fetches: it does not include UC instruction fetches"\
Packit Service a1973e
		" It does not include ITLB miss accesses",\
Packit Service a1973e
	 I386_P6_MESI_UMASKS \
Packit Service a1973e
	}, \
Packit Service a1973e
	{.pme_name = "L2_ST",\
Packit Service a1973e
	 .pme_code = 0x2a,\
Packit Service a1973e
	 .pme_desc =  "Number of L2 data stores. This event indicates that a normal, unlocked, store memory access "\
Packit Service a1973e
	 	"was received by the L2. Specifically, it indictes that the DCU sent a read-for ownership request to " \
Packit Service a1973e
		"the L2. It also includes Invalid to Modified reqyests sent by the DCU to the L2. " \
Packit Service a1973e
		"It includes only L2 cacheable memory accesses;  it does not include I/O " \
Packit Service a1973e
		"accesses, other non-memory accesses, or memory accesses such as UC/WT memory accesses. It does include " \
Packit Service a1973e
		"L2 cacheable TLB miss memory accesses", \
Packit Service a1973e
	 I386_P6_MESI_UMASKS \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_M_LINES_INM",\
Packit Service a1973e
	 .pme_code = 0x25,\
Packit Service a1973e
	 .pme_desc = "Number of modified lines allocated in the L2"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_RQSTS",\
Packit Service a1973e
	 .pme_code = 0x2e,\
Packit Service a1973e
	 .pme_desc = "Total number of L2 requests",\
Packit Service a1973e
	 I386_P6_MESI_UMASKS \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_ADS",\
Packit Service a1973e
	 .pme_code = 0x21,\
Packit Service a1973e
	 .pme_desc = "Number of L2 address strobes"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_DBUS_BUSY",\
Packit Service a1973e
	 .pme_code = 0x22,\
Packit Service a1973e
	 .pme_desc = "Number of cycles during which the L2 cache data bus was busy"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "L2_DBUS_BUSY_RD",\
Packit Service a1973e
	 .pme_code = 0x23,\
Packit Service a1973e
	 .pme_desc = "Number of cycles during which the data bus was busy transferring read data from L2 to the processor"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_DRDY_CLOCKS",\
Packit Service a1973e
	 .pme_code = 0x62,\
Packit Service a1973e
	 .pme_desc = "Number of clocks during which DRDY# is asserted. " \
Packit Service a1973e
		     "Utilization of the external system data bus during data transfers", \
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_LOCK_CLOCKS",\
Packit Service a1973e
	 .pme_code = 0x63,\
Packit Service a1973e
	 .pme_desc = "Number of clocks during which LOCK# is asserted on the external system bus", \
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_REQ_OUTSTANDING",\
Packit Service a1973e
	 .pme_code = 0x60,\
Packit Service a1973e
	 .pme_desc = "Number of bus requests outstanding. This counter is incremented " \
Packit Service a1973e
		"by the number of cacheable read bus requests outstanding in any given cycle", \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRANS_BRD",\
Packit Service a1973e
	 .pme_code = 0x65,\
Packit Service a1973e
	 .pme_desc = "Number of burst read transactions", \
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRANS_RFO",\
Packit Service a1973e
	 .pme_code = 0x66,\
Packit Service a1973e
	 .pme_desc = "Number of completed read for ownership transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRANS_WB",\
Packit Service a1973e
	 .pme_code = 0x67,\
Packit Service a1973e
	 .pme_desc = "Number of completed write back transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_IFETCH",\
Packit Service a1973e
	 .pme_code = 0x68,\
Packit Service a1973e
	 .pme_desc = "Number of completed instruction fetch transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_INVAL",\
Packit Service a1973e
	 .pme_code = 0x69,\
Packit Service a1973e
	 .pme_desc = "Number of completed invalidate transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_PWR",\
Packit Service a1973e
	 .pme_code = 0x6a,\
Packit Service a1973e
	 .pme_desc = "Number of completed partial write transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRANS_P",\
Packit Service a1973e
	 .pme_code = 0x6b,\
Packit Service a1973e
	 .pme_desc = "Number of completed partial transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRANS_IO",\
Packit Service a1973e
	 .pme_code = 0x6c,\
Packit Service a1973e
	 .pme_desc = "Number of completed I/O transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_DEF",\
Packit Service a1973e
	 .pme_code = 0x6d,\
Packit Service a1973e
	 .pme_desc = "Number of completed deferred transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x1 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x2 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_BURST",\
Packit Service a1973e
	 .pme_code = 0x6e,\
Packit Service a1973e
	 .pme_desc = "Number of completed burst transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_ANY",\
Packit Service a1973e
	 .pme_code = 0x70,\
Packit Service a1973e
	 .pme_desc = "Number of all completed bus transactions. Address bus utilization " \
Packit Service a1973e
		"can be calculated knowing the minimum address bus occupancy. Includes special cycles, etc.",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_TRAN_MEM",\
Packit Service a1973e
	 .pme_code = 0x6f,\
Packit Service a1973e
	 .pme_desc = "Number of completed memory transactions",\
Packit Service a1973e
	 .pme_numasks = 2, \
Packit Service a1973e
	 .pme_umasks = { \
Packit Service a1973e
		{ .pme_uname = "SELF", \
Packit Service a1973e
		  .pme_udesc = "clocks when processor is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x00 \
Packit Service a1973e
		}, \
Packit Service a1973e
		{ .pme_uname = "ANY", \
Packit Service a1973e
		  .pme_udesc = "clocks when any agent is driving bus", \
Packit Service a1973e
		  .pme_ucode = 0x20 \
Packit Service a1973e
		} \
Packit Service a1973e
	 } \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_DATA_RECV",\
Packit Service a1973e
	 .pme_code = 0x64,\
Packit Service a1973e
	 .pme_desc = "Number of bus clock cycles during which this processor is receiving data"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_BNR_DRV",\
Packit Service a1973e
	 .pme_code = 0x61,\
Packit Service a1973e
	 .pme_desc = "Number of bus clock cycles during which this processor is driving the BNR# pin"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_HIT_DRV",\
Packit Service a1973e
	 .pme_code = 0x7a,\
Packit Service a1973e
	 .pme_desc = "Number of bus clock cycles during which this processor is driving the HIT# pin"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_HITM_DRV",\
Packit Service a1973e
	 .pme_code = 0x7b,\
Packit Service a1973e
	 .pme_desc = "Number of bus clock cycles during which this processor is driving the HITM# pin"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BUS_SNOOP_STALL",\
Packit Service a1973e
	 .pme_code = 0x7e,\
Packit Service a1973e
	 .pme_desc = "Number of clock cycles during which the bus is snoop stalled"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "FLOPS",\
Packit Service a1973e
	 .pme_code = 0xc1,\
Packit Service a1973e
	 .pme_desc = "Number of computational floating-point operations retired. " \
Packit Service a1973e
		     "Excludes floating-point computational operations that cause traps or assists. " \
Packit Service a1973e
		     "Includes internal sub-operations for complex floating-point instructions like transcendentals. " \
Packit Service a1973e
		     "Excludes floating point loads and stores", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_CTR0_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "FP_COMP_OPS_EXE",\
Packit Service a1973e
	 .pme_code = 0x10,\
Packit Service a1973e
	 .pme_desc = "Number of computational floating-point operations executed. The number of FADD, FSUB, " \
Packit Service a1973e
		     "FCOM, FMULs, integer MULs and IMULs, FDIVs, FPREMs, FSQRTS, integer DIVs, and IDIVs. " \
Packit Service a1973e
		     "This number does not include the number of cycles, but the number of operations. " \
Packit Service a1973e
		     "This event does not distinguish an FADD used in the middle of a transcendental flow " \
Packit Service a1973e
		     "from a separate FADD instruction", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_CTR0_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "FP_ASSIST",\
Packit Service a1973e
	 .pme_code = 0x11,\
Packit Service a1973e
	 .pme_desc = "Number of floating-point exception cases handled by microcode.", \
Packit Service a1973e
	.pme_flags   = PFMLIB_I386_P6_CTR1_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MUL",\
Packit Service a1973e
	 .pme_code = 0x12,\
Packit Service a1973e
	 .pme_desc = "Number of multiplies." \
Packit Service a1973e
		     "This count includes integer as well as FP multiplies and is speculative", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_CTR1_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "DIV",\
Packit Service a1973e
	 .pme_code = 0x13,\
Packit Service a1973e
	 .pme_desc = "Number of divides." \
Packit Service a1973e
		     "This count includes integer as well as FP divides and is speculative", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_CTR1_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "CYCLES_DIV_BUSY",\
Packit Service a1973e
	 .pme_code = 0x14,\
Packit Service a1973e
	 .pme_desc = "Number of cycles during which the divider is busy, and cannot accept new divides. " \
Packit Service a1973e
		     "This includes integer and FP divides, FPREM, FPSQRT, etc. and is speculative", \
Packit Service a1973e
	 .pme_flags   = PFMLIB_I386_P6_CTR0_ONLY \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "LD_BLOCKS",\
Packit Service a1973e
	 .pme_code = 0x03,\
Packit Service a1973e
	 .pme_desc = "Number of load operations delayed due to store buffer blocks. Includes counts " \
Packit Service a1973e
		     "caused by preceding stores whose addresses are unknown, preceding stores whose addresses " \
Packit Service a1973e
		     "are known but whose data is unknown, and preceding stores that conflicts with the load " \
Packit Service a1973e
		     "but which incompletely overlap the load" \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "SB_DRAINS",\
Packit Service a1973e
	 .pme_code = 0x04,\
Packit Service a1973e
	 .pme_desc = "Number of store buffer drain cycles. Incremented every cycle the store buffer is draining. " \
Packit Service a1973e
		     "Draining is caused by serializing operations like CPUID, synchronizing operations " \
Packit Service a1973e
		     "like XCHG, interrupt acknowledgment, as well as other conditions (such as cache flushing)."\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "MISALIGN_MEM_REF",\
Packit Service a1973e
	 .pme_code = 0x05,\
Packit Service a1973e
	 .pme_desc = "Number of misaligned data memory references. Incremented by 1 every cycle during "\
Packit Service a1973e
		     "which, either the processor's load or store pipeline dispatches a misaligned micro-op "\
Packit Service a1973e
		     "Counting is performed if it is the first or second half or if it is blocked, squashed, "\
Packit Service a1973e
		     "or missed. In this context, misaligned means crossing a 64-bit boundary"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "UOPS_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xc2,\
Packit Service a1973e
	 .pme_desc =  "Number of micro-ops retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "INST_DECODED",\
Packit Service a1973e
	 .pme_code = 0xd0,\
Packit Service a1973e
	 .pme_desc = "Number of instructions decoded"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "HW_INT_RX",\
Packit Service a1973e
	 .pme_code = 0xc8,\
Packit Service a1973e
	 .pme_desc = "Number of hardware interrupts received"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "CYCLES_INT_MASKED",\
Packit Service a1973e
	 .pme_code = 0xc6,\
Packit Service a1973e
	 .pme_desc = "Number of processor cycles for which interrupts are disabled"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "CYCLES_INT_PENDING_AND_MASKED",\
Packit Service a1973e
	 .pme_code = 0xc7,\
Packit Service a1973e
	 .pme_desc = "Number of processor cycles for which interrupts are disabled and interrupts are pending."\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_INST_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xc4,\
Packit Service a1973e
	 .pme_desc = "Number of branch instructions retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_MISS_PRED_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xc5,\
Packit Service a1973e
	 .pme_desc = "Number of mispredicted branches retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_TAKEN_RETIRED",\
Packit Service a1973e
	 .pme_code = 0xc9,\
Packit Service a1973e
	 .pme_desc = "Number of taken branches retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_MISS_PRED_TAKEN_RET",\
Packit Service a1973e
	 .pme_code = 0xca,\
Packit Service a1973e
	 .pme_desc = "Number of taken mispredicted branches retired"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_INST_DECODED",\
Packit Service a1973e
	 .pme_code = 0xe0,\
Packit Service a1973e
	 .pme_desc = "Number of branch instructions decoded"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BTB_MISSES",\
Packit Service a1973e
	 .pme_code = 0xe2,\
Packit Service a1973e
	 .pme_desc = "Number of branches for which the BTB did not produce a prediction"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BR_BOGUS",\
Packit Service a1973e
	 .pme_code = 0xe4,\
Packit Service a1973e
	 .pme_desc = "Number of bogus branches"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "BACLEARS",\
Packit Service a1973e
	 .pme_code = 0xe6,\
Packit Service a1973e
	 .pme_desc = "Number of times BACLEAR is asserted. This is the number of times that " \
Packit Service a1973e
		     "a static branch prediction was made, in which the branch decoder decided " \
Packit Service a1973e
		     "to make a branch prediction because the BTB did not" \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "RESOURCE_STALLS",\
Packit Service a1973e
	 .pme_code = 0xa2,\
Packit Service a1973e
	 .pme_desc = "Incremented by 1 during every cycle for which there is a resource related stall. " \
Packit Service a1973e
		     "Includes register renaming buffer entries, memory buffer entries. Does not include " \
Packit Service a1973e
		     "stalls due to bus queue full, too many cache misses, etc. In addition to resource " \
Packit Service a1973e
		     "related stalls, this event counts some other events. Includes stalls arising during " \
Packit Service a1973e
		     "branch misprediction recovery, such as if retirement of the mispredicted branch is " \
Packit Service a1973e
		     "delayed and stalls arising while store buffer is draining from synchronizing operations" \
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "PARTIAL_RAT_STALLS",\
Packit Service a1973e
	 .pme_code = 0xd2,\
Packit Service a1973e
	 .pme_desc = "Number of cycles or events for partial stalls. This includes flag partial stalls"\
Packit Service a1973e
	},\
Packit Service a1973e
	{.pme_name = "SEGMENT_REG_LOADS",\
Packit Service a1973e
	 .pme_code = 0x06,\
Packit Service a1973e
	 .pme_desc = "Number of segment register loads."\
Packit Service a1973e
	}\
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * Pentium Pro Processor Event Table
Packit Service a1973e
 */
Packit Service a1973e
static pme_i386_p6_entry_t i386_ppro_pe []={
Packit Service a1973e
        I386_P6_CPU_CLK_UNHALTED, /* should be first */
Packit Service a1973e
        I386_P6_COMMON_PME,       /* generic p6 */
Packit Service a1973e
	I386_P6_NOT_PM_PME,       /* generic p6 that conflict with Pentium M */
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
#define PME_I386_PPRO_CPU_CLK_UNHALTED 0
Packit Service a1973e
#define PME_I386_PPRO_INST_RETIRED 1
Packit Service a1973e
#define PME_I386_PPRO_EVENT_COUNT 	(sizeof(i386_ppro_pe)/sizeof(pme_i386_p6_entry_t))
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * Pentium II Processor Event Table
Packit Service a1973e
 */
Packit Service a1973e
static pme_i386_p6_entry_t i386_pII_pe []={
Packit Service a1973e
        I386_P6_CPU_CLK_UNHALTED, /* should be first */
Packit Service a1973e
        I386_P6_COMMON_PME,   /* generic p6 */
Packit Service a1973e
	I386_P6_PII_ONLY_PME, /* pentium II only */
Packit Service a1973e
        I386_P6_PII_PIII_PME, /* pentium II and later */
Packit Service a1973e
	I386_P6_NOT_PM_PME,   /* generic p6 that conflict with Pentium M */
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
#define PME_I386_PII_CPU_CLK_UNHALTED 0
Packit Service a1973e
#define PME_I386_PII_INST_RETIRED 1
Packit Service a1973e
#define PME_I386_PII_EVENT_COUNT 	(sizeof(i386_pII_pe)/sizeof(pme_i386_p6_entry_t))
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * Pentium III Processor Event Table
Packit Service a1973e
 */
Packit Service a1973e
static pme_i386_p6_entry_t i386_pIII_pe []={
Packit Service a1973e
        I386_P6_CPU_CLK_UNHALTED, /* should be first */
Packit Service a1973e
        I386_P6_COMMON_PME,     /* generic p6 */
Packit Service a1973e
        I386_P6_PII_PIII_PME,   /* pentium II and later */
Packit Service a1973e
	I386_P6_PIII_PME,       /* pentium III and later */
Packit Service a1973e
	I386_P6_NOT_PM_PME,     /* generic p6 that conflict with Pentium M */
Packit Service a1973e
	I386_P6_PIII_NOT_PM_PME /* pentium III that conflict with Pentium M */
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
#define PME_I386_PIII_CPU_CLK_UNHALTED 0
Packit Service a1973e
#define PME_I386_PIII_INST_RETIRED 1
Packit Service a1973e
#define PME_I386_PIII_EVENT_COUNT 	(sizeof(i386_pIII_pe)/sizeof(pme_i386_p6_entry_t))
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
/*
Packit Service a1973e
 * Pentium M event table
Packit Service a1973e
 * It is different from regular P6 because it supports additional events
Packit Service a1973e
 * and also because the semantics of some events is slightly different
Packit Service a1973e
 *
Packit Service a1973e
 * The library autodetects which table to use during pfmlib_initialize()
Packit Service a1973e
 */
Packit Service a1973e
static pme_i386_p6_entry_t i386_pm_pe []={
Packit Service a1973e
	{.pme_name = "CPU_CLK_UNHALTED",
Packit Service a1973e
	 .pme_code = 0x79,
Packit Service a1973e
	 .pme_desc = "Number cycles during which the processor is not halted and not in a thermal trip"
Packit Service a1973e
	},
Packit Service a1973e
Packit Service a1973e
	I386_P6_COMMON_PME,     /* generic p6 */
Packit Service a1973e
 	I386_P6_PII_PIII_PME,   /* pentium II and later */
Packit Service a1973e
 	I386_P6_PIII_PME,       /* pentium III and later */
Packit Service a1973e
Packit Service a1973e
	{.pme_name = "EMON_EST_TRANS",
Packit Service a1973e
	 .pme_code = 0x58,
Packit Service a1973e
	 .pme_desc = "Number of Enhanced Intel SpeedStep technology transitions",
Packit Service a1973e
	 .pme_numasks = 2,
Packit Service a1973e
	 .pme_umasks = {
Packit Service a1973e
		{ .pme_uname = "ALL",
Packit Service a1973e
		  .pme_udesc = "All transitions",
Packit Service a1973e
		  .pme_ucode = 0x0
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "FREQ",
Packit Service a1973e
		  .pme_udesc = "Only frequency transitions",
Packit Service a1973e
		  .pme_ucode = 0x2
Packit Service a1973e
		},
Packit Service a1973e
	 }
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_THERMAL_TRIP",
Packit Service a1973e
	 .pme_code = 0x59,
Packit Service a1973e
	 .pme_desc = "Duration/occurrences in thermal trip; to count the number of thermal trips; edge detect must be used"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_INST_EXEC",
Packit Service a1973e
	 .pme_code = 0x088,
Packit Service a1973e
	 .pme_desc = "Branch instructions executed (not necessarily retired)"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x89,
Packit Service a1973e
	 .pme_desc = "Branch instructions executed that were mispredicted at execution"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_BAC_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x8a,
Packit Service a1973e
	 .pme_desc = "Branch instructions executed that were mispredicted at Front End (BAC)"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_CND_EXEC",
Packit Service a1973e
	 .pme_code = 0x8b,
Packit Service a1973e
	 .pme_desc = "Conditional branch instructions executed"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_CND_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x8c,
Packit Service a1973e
	 .pme_desc = "Conditional branch instructions executed that were mispredicted"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_IND_EXEC",
Packit Service a1973e
	 .pme_code = 0x8d,
Packit Service a1973e
	 .pme_desc = "Indirect branch instructions executed"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_IND_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x8e,
Packit Service a1973e
	 .pme_desc = "Indirect branch instructions executed that were mispredicted"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_RET_EXEC",
Packit Service a1973e
	 .pme_code = 0x8f,
Packit Service a1973e
	 .pme_desc = "Return branch instructions executed"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_RET_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x90,
Packit Service a1973e
	 .pme_desc = "Return branch instructions executed that were mispredicted at Execution"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_RET_BAC_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x91,
Packit Service a1973e
	 .pme_desc = "Return branch instructions executed that were mispredicted at Front End (BAC)"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_CALL_EXEC",
Packit Service a1973e
	 .pme_code = 0x92,
Packit Service a1973e
	 .pme_desc = "CALL instructions executed"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_CALL_MISSP_EXEC",
Packit Service a1973e
	 .pme_code = 0x93,
Packit Service a1973e
	 .pme_desc = "CALL instructions executed that were mispredicted"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "BR_IND_CALL_EXEC",
Packit Service a1973e
	 .pme_code = 0x94,
Packit Service a1973e
	 .pme_desc = "Indirect CALL instructions executed"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_SIMD_INSTR_RETIRED",
Packit Service a1973e
	 .pme_code = 0xce,
Packit Service a1973e
	 .pme_desc = "Number of retired MMX instructions"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_SYNCH_UOPS",
Packit Service a1973e
	 .pme_code = 0xd3,
Packit Service a1973e
	 .pme_desc = "Sync micro-ops"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_ESP_UOPS",
Packit Service a1973e
	 .pme_code = 0xd7,
Packit Service a1973e
	 .pme_desc = "Total number of micro-ops"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_FUSED_UOPS_RET",
Packit Service a1973e
	 .pme_code = 0xda,
Packit Service a1973e
	 .pme_desc = "Total number of micro-ops",
Packit Service a1973e
	 .pme_flags = PFMLIB_I386_P6_UMASK_COMBO,
Packit Service a1973e
	 .pme_numasks = 3,
Packit Service a1973e
	 .pme_umasks = {
Packit Service a1973e
		{ .pme_uname = "ALL",
Packit Service a1973e
		  .pme_udesc = "All fused micro-ops",
Packit Service a1973e
		  .pme_ucode = 0x0
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "LD_OP",
Packit Service a1973e
		  .pme_udesc = "Only load+Op micro-ops",
Packit Service a1973e
		  .pme_ucode = 0x1
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "STD_STA",
Packit Service a1973e
		  .pme_udesc = "Only std+sta micro-ops",
Packit Service a1973e
		  .pme_ucode = 0x2
Packit Service a1973e
		}
Packit Service a1973e
	  }
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_UNFUSION",
Packit Service a1973e
	 .pme_code = 0xdb,
Packit Service a1973e
	 .pme_desc = "Number of unfusion events in the ROB, happened on a FP exception to a fused micro-op"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_PREF_RQSTS_UP",
Packit Service a1973e
	 .pme_code = 0xf0,
Packit Service a1973e
	 .pme_desc = "Number of upward prefetches issued"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_PREF_RQSTS_DN",
Packit Service a1973e
	 .pme_code = 0xf8,
Packit Service a1973e
	 .pme_desc = "Number of downward prefetches issued"
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_SSE_SSE2_INST_RETIRED",
Packit Service a1973e
	 .pme_code = 0xd8,
Packit Service a1973e
	 .pme_desc =  "Streaming SIMD extensions instructions retired",
Packit Service a1973e
	 .pme_numasks = 4,
Packit Service a1973e
	 .pme_umasks = {
Packit Service a1973e
		{ .pme_uname = "SSE_PACKED_SCALAR_SINGLE",
Packit Service a1973e
		  .pme_udesc = "SSE Packed Single and Scalar Single",
Packit Service a1973e
		  .pme_ucode = 0x0
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE_SCALAR_SINGLE",
Packit Service a1973e
		  .pme_udesc = "SSE Scalar Single",
Packit Service a1973e
		  .pme_ucode = 0x1
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE2_PACKED_DOUBLE",
Packit Service a1973e
		  .pme_udesc = "SSE2 Packed Double",
Packit Service a1973e
		  .pme_ucode = 0x2
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE2_SCALAR_DOUBLE",
Packit Service a1973e
		  .pme_udesc = "SSE2 Scalar Double",
Packit Service a1973e
		  .pme_ucode = 0x3
Packit Service a1973e
		}
Packit Service a1973e
	 }
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "EMON_SSE_SSE2_COMP_INST_RETIRED",
Packit Service a1973e
	 .pme_code = 0xd9,
Packit Service a1973e
	 .pme_desc =  "Computational SSE instructions retired",
Packit Service a1973e
	 .pme_numasks = 4,
Packit Service a1973e
	 .pme_umasks = {
Packit Service a1973e
		{ .pme_uname = "SSE_PACKED_SINGLE",
Packit Service a1973e
		  .pme_udesc = "SSE Packed Single",
Packit Service a1973e
		  .pme_ucode = 0x0
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE_SCALAR_SINGLE",
Packit Service a1973e
		  .pme_udesc = "SSE Scalar Single",
Packit Service a1973e
		  .pme_ucode = 0x1
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE2_PACKED_DOUBLE",
Packit Service a1973e
		  .pme_udesc = "SSE2 Packed Double",
Packit Service a1973e
		  .pme_ucode = 0x2
Packit Service a1973e
		},
Packit Service a1973e
		{ .pme_uname = "SSE2_SCALAR_DOUBLE",
Packit Service a1973e
		  .pme_udesc = "SSE2 Scalar Double",
Packit Service a1973e
		  .pme_ucode = 0x3
Packit Service a1973e
		}
Packit Service a1973e
	 }
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "L2_LD",
Packit Service a1973e
	 .pme_code = 0x29,
Packit Service a1973e
	 .pme_desc =  "Number of L2 data loads",
Packit Service a1973e
	 I386_PM_MESI_PREFETCH_UMASKS
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "L2_LINES_IN",
Packit Service a1973e
	 .pme_code = 0x24,
Packit Service a1973e
	 .pme_desc =  "Number of L2 lines allocated",
Packit Service a1973e
	 I386_PM_MESI_PREFETCH_UMASKS
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "L2_LINES_OUT",
Packit Service a1973e
	 .pme_code = 0x26,
Packit Service a1973e
	 .pme_desc =  "Number of L2 lines evicted",
Packit Service a1973e
	 I386_PM_MESI_PREFETCH_UMASKS
Packit Service a1973e
	},
Packit Service a1973e
	{.pme_name = "L2_M_LINES_OUT",
Packit Service a1973e
	 .pme_code = 0x27,
Packit Service a1973e
	 .pme_desc =  "Number of L2 M-state lines evicted",
Packit Service a1973e
	 I386_PM_MESI_PREFETCH_UMASKS
Packit Service a1973e
	}
Packit Service a1973e
};
Packit Service a1973e
#define PME_I386_PM_CPU_CLK_UNHALTED 0
Packit Service a1973e
#define PME_I386_PM_INST_RETIRED 1
Packit Service a1973e
#define PME_I386_PM_EVENT_COUNT 	(sizeof(i386_pm_pe)/sizeof(pme_i386_p6_entry_t))