xref: /illumos-gate/usr/src/data/amdpmc/f1ah_zen5_core.json (revision cf618897f43ea305e3a426f93bbcef4e8106829c)
1[ {
2	"mnemonic": "Core::X86::Pmc::Core::Retired_x87_FP_Ops",
3	"name":"Retired_x87_FP_Ops",
4	"code": "0x002",
5	"summary": "FP retired x87 uops",
6	"description": "Number of retired x87 arithmetic operations. Can be used to calculate x87 FLOPs.",
7	"units": [ {
8		"name": "DivSqrROps",
9		"bit": 2,
10		"rw": "Read-write",
11		"description": "x87 Divide or square root uops."
12	}, {
13		"name": "MulOps",
14		"bit": 1,
15		"rw": "Read-write",
16		"description": "x87 Multiply uops."
17	}, {
18		"name": "AddSubOps",
19		"bit": 0,
20		"rw": "Read-write",
21		"description": "x87 Add/subtract uops."
22	} ]
23},
24{
25	"mnemonic": "Core::X86::Pmc::Core::Retired_SSE_AVX_FLOPs",
26	"name":"Retired_SSE_AVX_FLOPs",
27	"code": "0x003",
28	"summary": "FP retired SSE and AVX FLOPs",
29	"description": "Number of SSE and AVX floating point arithmetic operations retired. Number of arithmetic operations retired is dependent on number of uops retired, data size (scalar/128/256/512), data type (BF16/FP16/FP32/FP64) and type of operation (add/sub/mul/mac/...). Use MergeEvent feature for accurate results.",
30	"unit_mode": "or-value",
31	"units": [ {
32		"name": "FlopTypeSel",
33		"bit-range": "7:5",
34		"rw": "Read-write",
35		"description": "Mask for specifying FLOP type.",
36		"values": [
37			{ "value": "0x0", "description": "All types." },
38			{ "value": "0x1", "description": "B Float 16." },
39			{ "value": "0x2", "description": "Scalar single." },
40			{ "value": "0x3", "description": "Packed single." },
41			{ "value": "0x4", "description": "Scalar double." },
42			{ "value": "0x5", "description": "Packed double." }
43		]
44	}, {
45		"name": "MacFLOPs",
46		"bit": 3,
47		"rw": "Read-write",
48		"description": "Each MAC operation count as 2 FLOPs. bfloat MAC operations are not included in this event."
49	}, {
50		"name": "DivFLOPs",
51		"bit": 2,
52		"rw": "Read-write",
53		"description": "Divide/square root FLOPs. Does not provide a useful count without use of the MergeEvent feature."
54	}, {
55		"name": "MultFLOPs",
56		"bit": 1,
57		"rw": "Read-write",
58		"description": "Multiply FLOPs. Does not provide a useful count without use of the MergeEvent feature."
59	}, {
60		"name": "AddSubFLOPs",
61		"bit": 0,
62		"rw": "Read-write",
63		"description": "Add/subtract FLOPs. Does not provide a useful count without use of the MergeEvent feature."
64	} ]
65},
66{
67	"mnemonic": "Core::X86::Pmc::Core::Retired_FP_uOps",
68	"name":"Retired_FP_uOps",
69	"code": "0x008",
70	"summary": "FP uops retired by size",
71	"description": "Report number of FP uops retired by size. Can be used to determine how vectorized code is and how much MMX / x87 content is in the code.",
72	"units": [ {
73		"name": "Pack512uOpsRetired",
74		"bit": 5,
75		"rw": "Read-write",
76		"description": "Packed 512-bit uops retired."
77	}, {
78		"name": "Pack256uOpsRetired",
79		"bit": 4,
80		"rw": "Read-write",
81		"description": "Packed 256-bit uops retired."
82	}, {
83		"name": "Pack128uOpsRetired",
84		"bit": 3,
85		"rw": "Read-write",
86		"description": "Packed 128-bit uops retired."
87	}, {
88		"name": "ScalaruOpsRetired",
89		"bit": 2,
90		"rw": "Read-write",
91		"description": "Scalar uops retired."
92	}, {
93		"name": "MMXuOpsRetired",
94		"bit": 1,
95		"rw": "Read-write",
96		"description": "MMX uops retired."
97	}, {
98		"name": "x87uOpsRetired",
99		"bit": 0,
100		"rw": "Read-write",
101		"description": "x87 uops retired."
102	} ]
103},
104{
105	"mnemonic": "Core::X86::Pmc::Core::FP_Ops_Retired",
106	"name":"FP_Ops_Retired",
107	"code": "0x00A",
108	"summary": "FP uops retired sorted by vector or scalar",
109	"description": "Number of FP uops retired of selected type sorted by vector (AVX/SSE packed) or scalar (x87, AVX/SSE scalar). Can be used to profile FP codes.",
110	"unit_mode": "or-value",
111	"units": [ {
112		"name": "VectorFpOpType",
113		"bit-range": "7:4",
114		"rw": "Read-write",
115		"description": "select a vector FP uop type to count or 0 for none.",
116		"values": [
117			{ "value": "0x0", "description": "None selected." },
118			{ "value": "0x1", "description": "Add." },
119			{ "value": "0x2", "description": "Subtract." },
120			{ "value": "0x3", "description": "Multiply." },
121			{ "value": "0x4", "description": "Multiply accumulate." },
122			{ "value": "0x5", "description": "Divide." },
123			{ "value": "0x6", "description": "Square root." },
124			{ "value": "0x7", "description": "Compare." },
125			{ "value": "0x8", "description": "Convert." },
126			{ "value": "0x9", "description": "Blend." },
127			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
128			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily thought to include shuffles. i.e. horizontal add, dot-product, and some MOV instructions." },
129			{ "value": "0xC", "description": "BFloat." },
130			{ "value": "0xD", "description": "Logical." },
131			{ "value": "0xE", "description": "Other uops not included in previous groups." },
132			{ "value": "0xF", "description": "Select all fp type uops." }
133		]
134	}, {
135		"name": "ScalarFpOpType",
136		"bit-range": "3:0",
137		"rw": "Read-write",
138		"description": "select scalar FP uop type to count or 0 for none.",
139		"values": [
140			{ "value": "0x0", "description": "None selected." },
141			{ "value": "0x1", "description": "Add." },
142			{ "value": "0x2", "description": "Subtract." },
143			{ "value": "0x3", "description": "Multiply." },
144			{ "value": "0x4", "description": "Multiply accumulate." },
145			{ "value": "0x5", "description": "Divide." },
146			{ "value": "0x6", "description": "Square root." },
147			{ "value": "0x7", "description": "Compare." },
148			{ "value": "0x8", "description": "Convert." },
149			{ "value": "0x9", "description": "Blend." },
150			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
151			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily thought to include shuffles. i.e. horizontal add, dot-product, and some MOV instructions." },
152			{ "value": "0xC", "description": "BFloat." },
153			{ "value": "0xD", "description": "Logical." },
154			{ "value": "0xE", "description": "Other uops not included in previous groups." },
155			{ "value": "0xF", "description": "Select all fp type uops." }
156		]
157	} ]
158},
159{
160	"mnemonic": "Core::X86::Pmc::Core::INT_Ops_Retired",
161	"name":"INT_Ops_Retired",
162	"code": "0x00B",
163	"summary": "FP executed integer type uops sorted by vector or scalar",
164	"description": "Number of integer uops executed in the FP retired of selected type sorted by vector (SSE/AVX) or scalar (MMX). Can be used to profile vector INT / MMX codes.",
165	"unit_mode": "or-value",
166	"units": [ {
167		"name": "SseAvxOpType",
168		"bit-range": "7:4",
169		"rw": "Read-write",
170		"description": "select SSE/AVX vector INT uop type to count or 0 for none.",
171		"values": [
172			{ "value": "0x0", "description": "None selected." },
173			{ "value": "0x1", "description": "Add." },
174			{ "value": "0x2", "description": "Subtract." },
175			{ "value": "0x3", "description": "Multiply." },
176			{ "value": "0x4", "description": "Multiply accumulate." },
177			{ "value": "0x5", "description": "AES." },
178			{ "value": "0x6", "description": "SHA." },
179			{ "value": "0x7", "description": "Compare." },
180			{ "value": "0x8", "description": "Convert or pack." },
181			{ "value": "0x9", "description": "Shift or rotate." },
182			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
183			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily though to include shuffles.  i.e. horizontal add, dot-product, and some MOV instructions." },
184			{ "value": "0xC", "description": "VNNI." },
185			{ "value": "0xD", "description": "Logical." },
186			{ "value": "0xE", "description": "Other uops not included in previous groups." },
187			{ "value": "0xF", "description": "Select all int type uops." }
188		]
189	}, {
190		"name": "MmxOpType",
191		"bit-range": "3:0",
192		"rw": "Read-write",
193		"description": "select MMX INT scalar uop type to count or 0 for none.",
194		"values": [
195			{ "value": "0x0", "description": "None selected." },
196			{ "value": "0x1", "description": "Add." },
197			{ "value": "0x2", "description": "Subtract." },
198			{ "value": "0x3", "description": "Multiply." },
199			{ "value": "0x4", "description": "Multiply accumulate." },
200			{ "value": "0x5", "description": "AES." },
201			{ "value": "0x6", "description": "SHA." },
202			{ "value": "0x7", "description": "Compare." },
203			{ "value": "0x8", "description": "Convert or pack." },
204			{ "value": "0x9", "description": "Shift or rotate." },
205			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
206			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily though to include shuffles.  i.e. horizontal add, dot-product, and some MOV instructions." },
207			{ "value": "0xC", "description": "VNNI." },
208			{ "value": "0xD", "description": "Logical." },
209			{ "value": "0xE", "description": "Other uops not included in previous groups." },
210			{ "value": "0xF", "description": "Select all int type uops." }
211		]
212	} ]
213},
214{
215	"mnemonic": "Core::X86::Pmc::Core::Packed_FP_Ops_Retired",
216	"name":"Packed_FP_Ops_Retired",
217	"code": "0x00C",
218	"summary": "FP uops retired sorted by packed 128 or packed 256",
219	"description": "Number of FP uops retired of selected type sorted by 128-bit packed dest (XMM) or 256-bit packed dest (YMM). Can be used to profile FP codes.",
220	"unit_mode": "or-value",
221	"units": [ {
222		"name": "Fp256OpType",
223		"bit-range": "7:4",
224		"rw": "Read-write",
225		"description": "select a 256-bit packed FP uop type to count or 0 for none.",
226		"values": [
227			{ "value": "0x0", "description": "None selected." },
228			{ "value": "0x1", "description": "Add." },
229			{ "value": "0x2", "description": "Subtract." },
230			{ "value": "0x3", "description": "Multiply." },
231			{ "value": "0x4", "description": "Multiply accumulate." },
232			{ "value": "0x5", "description": "Divide." },
233			{ "value": "0x6", "description": "Square root." },
234			{ "value": "0x7", "description": "Compare." },
235			{ "value": "0x8", "description": "Convert." },
236			{ "value": "0x9", "description": "Blend." },
237			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
238			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily thought to include shuffles. i.e. horizontal add, dot-product, and some MOV instructions." },
239			{ "value": "0xC", "description": "BFloat." },
240			{ "value": "0xD", "description": "Logical." },
241			{ "value": "0xE", "description": "Other uops not included in previous groups." },
242			{ "value": "0xF", "description": "Select all fp type uops." }
243		]
244	}, {
245		"name": "Fp128OpType",
246		"bit-range": "3:0",
247		"rw": "Read-write",
248		"description": "select 128-bit packed FP uop type to count or 0 for none.",
249		"values": [
250			{ "value": "0x0", "description": "None selected." },
251			{ "value": "0x1", "description": "Add." },
252			{ "value": "0x2", "description": "Subtract." },
253			{ "value": "0x3", "description": "Multiply." },
254			{ "value": "0x4", "description": "Multiply accumulate." },
255			{ "value": "0x5", "description": "Divide." },
256			{ "value": "0x6", "description": "Square root." },
257			{ "value": "0x7", "description": "Compare." },
258			{ "value": "0x8", "description": "Convert." },
259			{ "value": "0x9", "description": "Blend." },
260			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
261			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily thought to include shuffles. i.e. horizontal add, dot-product, and some MOV instructions." },
262			{ "value": "0xC", "description": "BFloat." },
263			{ "value": "0xD", "description": "Logical." },
264			{ "value": "0xE", "description": "Other uops not included in previous groups." },
265			{ "value": "0xF", "description": "Select all fp type uops." }
266		]
267	} ]
268},
269{
270	"mnemonic": "Core::X86::Pmc::Core::Packed_INT_Ops_Retired",
271	"name":"Packed_INT_Ops_Retired",
272	"code": "0x00D",
273	"summary": "FP executed packed integer uops sorted by packed 128 or packed 256",
274	"description": "Number of integer uops executed in FP retired of selected type sorted by 128-bit packed dest (XMM) or 256-bit packed dest (YMM). Can be used to profile FP codes.",
275	"unit_mode": "or-value",
276	"units": [ {
277		"name": "Int256OpType",
278		"bit-range": "7:4",
279		"rw": "Read-write",
280		"description": "select a 256-bit packed INT uop type to count or 0 for none.",
281		"values": [
282			{ "value": "0x0", "description": "None selected." },
283			{ "value": "0x1", "description": "Add." },
284			{ "value": "0x2", "description": "Subtract." },
285			{ "value": "0x3", "description": "Multiply." },
286			{ "value": "0x4", "description": "Multiply accumulate." },
287			{ "value": "0x5", "description": "AES." },
288			{ "value": "0x6", "description": "SHA." },
289			{ "value": "0x7", "description": "Compare." },
290			{ "value": "0x8", "description": "Convert or pack." },
291			{ "value": "0x9", "description": "Shift or rotate." },
292			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
293			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily though to include shuffles.  i.e. horizontal add, dot-product, and some MOV instructions." },
294			{ "value": "0xC", "description": "VNNI." },
295			{ "value": "0xD", "description": "Logical." },
296			{ "value": "0xE", "description": "Other uops not included in previous groups." },
297			{ "value": "0xF", "description": "Select all int type uops." }
298		]
299	}, {
300		"name": "Int128OpType",
301		"bit-range": "3:0",
302		"rw": "Read-write",
303		"description": "select 128-bit packed INT uop type to count or 0 for none.",
304		"values": [
305			{ "value": "0x0", "description": "None selected." },
306			{ "value": "0x1", "description": "Add." },
307			{ "value": "0x2", "description": "Subtract." },
308			{ "value": "0x3", "description": "Multiply." },
309			{ "value": "0x4", "description": "Multiply accumulate." },
310			{ "value": "0x5", "description": "AES." },
311			{ "value": "0x6", "description": "SHA." },
312			{ "value": "0x7", "description": "Compare." },
313			{ "value": "0x8", "description": "Convert or pack." },
314			{ "value": "0x9", "description": "Shift or rotate." },
315			{ "value": "0xA", "description": "Move. MOV* instructions will count as INT type, not FP type. In other words, PMCx00A, PMCx00C will not count MOV ops." },
316			{ "value": "0xB", "description": "Shuffle. Shuf uop counts may count for instructions that are not necessarily though to include shuffles.  i.e. horizontal add, dot-product, and some MOV instructions." },
317			{ "value": "0xC", "description": "VNNI." },
318			{ "value": "0xD", "description": "Logical." },
319			{ "value": "0xE", "description": "Other uops not included in previous groups." },
320			{ "value": "0xF", "description": "Select all int type uops." }
321		]
322	} ]
323},
324{
325	"mnemonic": "Core::X86::Pmc::Core::FP_Dispatch_Faults",
326	"name":"FP_Dispatch_Faults",
327	"code": "0x00E",
328	"summary": "FP Dispatch Faults",
329	"description": "Number of FP dispatch faults triggered by type. Dispatch fill/spill faults occur when FP either does not have the data needed to operate on in its local registers (fill), or FP needs to empty out upper register data for proper SSE merging behavior when executing AVX code (spill).",
330	"units": [ {
331		"name": "YmmSpillFault",
332		"bit": 3,
333		"rw": "Read-write",
334		"description": "YMM spill fault"
335	}, {
336		"name": "YmmFillFault",
337		"bit": 2,
338		"rw": "Read-write",
339		"description": "YMM fill fault"
340	}, {
341		"name": "XmmFillFault",
342		"bit": 1,
343		"rw": "Read-write",
344		"description": "XMM Fill fault"
345	}, {
346		"name": "x87FillFault",
347		"bit": 0,
348		"rw": "Read-write",
349		"description": "x87 Fill fault"
350	} ]
351},
352{
353	"mnemonic": "Core::X86::Pmc::Core::Bad_Status_2_STLI",
354	"name":"Bad_Status_2_STLI",
355	"code": "0x024",
356	"summary": "Bad Status 2",
357	"description": "Store To Load Interlock (STLI) are loads that were unable to complete because of a possible match with an older store, and the older store could not do Store To Load Forwarding (STLF) for some reason.",
358	"units": [ {
359		"name": "StliOther",
360		"bit": 1,
361		"rw": "Read-write",
362		"description": "Store-to-load conflicts: A load was unable to complete due to a non-forwardable conflict with an older store. Most commonly, a load's address range partially but not completely overlaps with an uncompleted older store. Software can avoid this problem by using same-size and same-alignment loads and stores when accessing the same data. Vector/SIMD code is particularly susceptible to this problem; software should construct wide vector stores by manipulating vector elements in registers using shuffle/blend/swap instructions prior to storing to memory, instead of using narrow element-by-element stores."
363	} ]
364},
365{
366	"mnemonic": "Core::X86::Pmc::Core::Retired_Lock_Instructions",
367	"name":"Retired_Lock_Instructions",
368	"code": "0x025",
369	"summary": "Retired Lock Instructions",
370	"description": "Counts retired atomic read-modify-write instructions with a LOCK prefix.",
371	"unit_mode": "or-value",
372	"units": [ {
373		"name": "LockInstructions",
374		"bit-range": "4:0",
375		"rw": "Read-write",
376		"description": "Specifies type of lock instructions counted",
377		"values": [
378			{ "value": "0x01", "description": "BusLock: Non-cacheable or cacheline-misaligned lock." },
379			{ "value": "0x1F", "description": "AnyLock: Counts all lock instructions." }
380		]
381	} ]
382},
383{
384	"mnemonic": "Core::X86::Pmc::Core::CLFLUSH",
385	"name":"CLFLUSH",
386	"code": "0x026",
387	"summary": "Retired CLFLUSH Instructions",
388	"description": "The number of retired CLFLUSH instructions. This is a non-speculative event."
389},
390{
391	"mnemonic": "Core::X86::Pmc::Core::CPUID",
392	"name":"CPUID",
393	"code": "0x027",
394	"summary": "Retired CPUID Instructions",
395	"description": "The number of CPUID instructions retired."
396},
397{
398	"mnemonic": "Core::X86::Pmc::Core::LS_Dispatch",
399	"name":"LS_Dispatch",
400	"code": "0x029",
401	"summary": "LS Dispatch",
402	"description": "Counts the number of operations dispatched to the LS unit. Unit Masks events are ADDed.",
403	"units": [ {
404		"name": "LdOpSt",
405		"bit": 2,
406		"rw": "Read-write",
407		"description": "Dispatch of a single op that performs a load from and store to the same memory address."
408	}, {
409		"name": "PureSt",
410		"bit": 1,
411		"rw": "Read-write",
412		"description": "Dispatch of a single op that performs a memory store."
413	}, {
414		"name": "PureLd",
415		"bit": 0,
416		"rw": "Read-write",
417		"description": "Dispatch of a single op that performs a memory load."
418	} ]
419},
420{
421	"mnemonic": "Core::X86::Pmc::Core::SMI_or_SMM_cycles",
422	"name":"SMI_or_SMM_cycles",
423	"code": "0x02B",
424	"summary": "SMIs Received",
425	"description": "Counts the number of System Management Interrupts (SMIs) received."
426},
427{
428	"mnemonic": "Core::X86::Pmc::Core::Interrupts_Taken",
429	"name":"Interrupts_Taken",
430	"code": "0x02C",
431	"summary": "Interrupts Taken",
432	"description": "Counts the number of interrupts taken.",
433	"units": [ {
434		"name": "NumInterrupts",
435		"bit": 0,
436		"rw": "Read-write",
437		"description": "Number of interrupts taken. This event is also counted when UnitMask[7:0]=0."
438	} ]
439},
440{
441	"mnemonic": "Core::X86::Pmc::Core::Store_to_Load_Forward",
442	"name":"Store_to_Load_Forward",
443	"code": "0x035",
444	"summary": "Store to Load Forward",
445	"description": "Number of STLF hits."
446},
447{
448	"mnemonic": "Core::X86::Pmc::Core::Store_Globally_Visible_Cancels_2",
449	"name":"Store_Globally_Visible_Cancels_2",
450	"code": "0x037",
451	"summary": "Store Globally Visible Cancels 2",
452	"description": "Counts reasons why a Store Coalescing Buffer (SCB) commit is canceled.",
453	"units": [ {
454		"name": "OlderStVisibleDepCancel",
455		"bit": 0,
456		"rw": "Read-write",
457		"description": "Older SCB we are waiting on to become globally visible was unable to become globally visible."
458	} ]
459},
460{
461	"mnemonic": "Core::X86::Pmc::Core::LS_MAB_Allocates_by_Type",
462	"name":"LS_MAB_Allocates_by_Type",
463	"code": "0x041",
464	"summary": "LS MAB Allocates by Type",
465	"description": "Counts when an LS pipe allocates a Miss Address Buffer (MAB) entry to make a miss request.",
466	"unit_mode": "or-value",
467	"units": [ {
468		"name": "LsMabAllocation",
469		"bit-range": "6:0",
470		"rw": "Read-write",
471		"values": [
472			{ "value": "0x07", "description": "Load Store Allocations" },
473			{ "value": "0x08", "description": "Hardware Prefetcher Allocations" },
474			{ "value": "0x0F", "description": "All Allocations" }
475		]
476	} ]
477},
478{
479	"mnemonic": "Core::X86::Pmc::Core::Demand_DC_Fills_by_Data_Source",
480	"name":"Demand_DC_Fills_by_Data_Source",
481	"code": "0x043",
482	"summary": "Demand Data Cache Fills by Data Source",
483	"description": "Counts fills into the DC that were initiated by demand ops, per data source.",
484	"units": [ {
485		"name": "AlternateMemories_NearFar",
486		"bit": 7,
487		"rw": "Read-write",
488		"description": "Requests that return from Extension Memory."
489	}, {
490		"name": "DramIO_Far",
491		"bit": 6,
492		"rw": "Read-write",
493		"description": "Requests that target another NUMA node and return from DRAM or MMIO."
494	}, {
495		"name": "NearFarCache_Far",
496		"bit": 4,
497		"rw": "Read-write",
498		"description": "Requests that target another NUMA node and return from another CCX's cache."
499	}, {
500		"name": "DramIO_Near",
501		"bit": 3,
502		"rw": "Read-write",
503		"description": "Requests that target the same NUMA node and return from DRAM or MMIO."
504	}, {
505		"name": "NearFarCache_Near",
506		"bit": 2,
507		"rw": "Read-write",
508		"description": "Requests that target the same NUMA node and return from another CCX's cache."
509	}, {
510		"name": "LocalCcx",
511		"bit": 1,
512		"rw": "Read-write",
513		"description": "Data returned from L3 or different L2 in the same CCX."
514	}, {
515		"name": "LocalL2",
516		"bit": 0,
517		"rw": "Read-write",
518		"description": "Data returned from local L2."
519	} ]
520},
521{
522	"mnemonic": "Core::X86::Pmc::Core::Any_DC_Fills_by_Data_Source",
523	"name":"Any_DC_Fills_by_Data_Source",
524	"code": "0x044",
525	"summary": "Any Data Cache Fills by Data Source",
526	"description": "Counts all fills into the DC, per data source.",
527	"units": [ {
528		"name": "AlternateMemories_NearFar",
529		"bit": 7,
530		"rw": "Read-write",
531		"description": "Requests that return from Extension Memory."
532	}, {
533		"name": "DramIO_Far",
534		"bit": 6,
535		"rw": "Read-write",
536		"description": "Requests that target another NUMA node and return from DRAM or MMIO."
537	}, {
538		"name": "NearFarCache_Far",
539		"bit": 4,
540		"rw": "Read-write",
541		"description": "Requests that target another NUMA node and return from another CCX's cache."
542	}, {
543		"name": "DramIO_Near",
544		"bit": 3,
545		"rw": "Read-write",
546		"description": "Requests that target the same NUMA node and return from DRAM or MMIO."
547	}, {
548		"name": "NearFarCache_Near",
549		"bit": 2,
550		"rw": "Read-write",
551		"description": "Requests that target the same NUMA node and return from another CCX's cache."
552	}, {
553		"name": "LocalCcx",
554		"bit": 1,
555		"rw": "Read-write",
556		"description": "Data returned from L3 or different L2 in the same CCX."
557	}, {
558		"name": "LocalL2",
559		"bit": 0,
560		"rw": "Read-write",
561		"description": "Data returned from local L2."
562	} ]
563},
564{
565	"mnemonic": "Core::X86::Pmc::Core::L1_DTLB_Reloads",
566	"name":"L1_DTLB_Reloads",
567	"code": "0x045",
568	"summary": "L1 DTLB Reloads",
569	"description": "Counts L1DTLB reloads",
570	"units": [ {
571		"name": "TlbReload1GL2Miss",
572		"bit": 7,
573		"rw": "Read-write",
574		"description": "DTLB reload to a 1G page that missed in the L2DTLB."
575	}, {
576		"name": "TlbReload2ML2Miss",
577		"bit": 6,
578		"rw": "Read-write",
579		"description": "DTLB reload to a 2M page that missed in the L2DTLB."
580	}, {
581		"name": "TlbReloadCoalescedPageMiss",
582		"bit": 5,
583		"rw": "Read-write",
584		"description": "DTLB reload to a coalesced page that missed in the L2DTLB."
585	}, {
586		"name": "TlbReload4KL2Miss",
587		"bit": 4,
588		"rw": "Read-write",
589		"description": "DTLB reload to a 4K page that missed in the L2DTLB."
590	}, {
591		"name": "TlbReload1GL2Hit",
592		"bit": 3,
593		"rw": "Read-write",
594		"description": "DTLB reload to a 1G page that hit in the L2DTLB."
595	}, {
596		"name": "TlbReload2ML2Hit",
597		"bit": 2,
598		"rw": "Read-write",
599		"description": "DTLB reload to a 2M page that hit in the L2DTLB."
600	}, {
601		"name": "TlbReloadCoalescedPageHit",
602		"bit": 1,
603		"rw": "Read-write",
604		"description": "DTLB reload to a coalesced page that hit in the L2DTLB."
605	}, {
606		"name": "TlbReload4KL2Hit",
607		"bit": 0,
608		"rw": "Read-write",
609		"description": "DTLB reload to a 4K page that hit in the L2DTLB."
610	} ]
611},
612{
613	"mnemonic": "Core::X86::Pmc::Core::Misaligned_Load_Flows",
614	"name":"Misaligned_Load_Flows",
615	"code": "0x047",
616	"summary": "Misaligned Load Flows",
617	"description": "The number of misaligned load flows.",
618	"units": [ {
619		"name": "MA4K",
620		"bit": 1,
621		"rw": "Read-write",
622		"description": "The number of 4KB misaligned (i.e., page crossing) loads or LdOpSt."
623	}, {
624		"name": "MA64",
625		"bit": 0,
626		"rw": "Read-write",
627		"description": "The number of 64B misaligned (i.e., cacheline crossing) loads or LdOpSt."
628	} ]
629},
630{
631	"mnemonic": "Core::X86::Pmc::Core::Software_Prefetch_Dispatched",
632	"name":"Software_Prefetch_Dispatched",
633	"code": "0x04B",
634	"summary": "Prefetch Instructions Dispatched",
635	"description": "Software Prefetch Instructions Dispatched (speculative)",
636	"units": [ {
637		"name": "PREFETCHNTA",
638		"bit": 2,
639		"rw": "Read-write",
640		"description": "PrefetchNTA instruction. See docAPM3 PREFETCHlevel."
641	}, {
642		"name": "PREFETCHW",
643		"bit": 1,
644		"rw": "Read-write",
645		"description": "PrefetchW instruction. See docAPM3 PREFETCHlevel."
646	}, {
647		"name": "PREFETCH",
648		"bit": 0,
649		"rw": "Read-write",
650		"description": "PrefetchT0, T1, and T2 instructions. See docAPM3 PREFETCHlevel."
651	} ]
652},
653{
654	"mnemonic": "Core::X86::Pmc::Core::WCB_Close",
655	"name":"WCB_Close",
656	"code": "0x050",
657	"summary": "Write Combining Buffer Close",
658	"description": "Counts events that cause a Write Combining Buffer (WCB) entry to close.",
659	"units": [ {
660		"name": "FullLine64B",
661		"bit": 0,
662		"rw": "Read-write",
663		"description": "All 64 bytes of the WCB entry have been written."
664	} ]
665},
666{
667	"mnemonic": "Core::X86::Pmc::Core::Ineffective_Software_Prefetches",
668	"name":"Ineffective_Software_Prefetches",
669	"code": "0x052",
670	"summary": "Ineffective Software Prefetches",
671	"description": "The number of software prefetches that did not fetch data outside of the processor core.",
672	"units": [ {
673		"name": "MabHit",
674		"bit": 1,
675		"rw": "Read-write",
676		"description": "Software PREFETCH instruction saw a match on an already-allocated miss request."
677	}, {
678		"name": "DcHit",
679		"bit": 0,
680		"rw": "Read-write",
681		"description": "Software PREFETCH instruction saw a DC hit."
682	} ]
683},
684{
685	"mnemonic": "Core::X86::Pmc::Core::Software_Prefetch_Data_Cache_Fills",
686	"name":"Software_Prefetch_Data_Cache_Fills",
687	"code": "0x059",
688	"summary": "Software Prefetch Data Cache Fills by Data Source",
689	"description": "Counts fills into the DC that were initiated by software prefetch instructions, per data source.",
690	"units": [ {
691		"name": "AlternateMemories_NearFar",
692		"bit": 7,
693		"rw": "Read-write",
694		"description": "Requests that return from Extension Memory."
695	}, {
696		"name": "DramIO_Far",
697		"bit": 6,
698		"rw": "Read-write",
699		"description": "Requests that target another NUMA node and return from DRAM or MMIO."
700	}, {
701		"name": "NearFarCache_Far",
702		"bit": 4,
703		"rw": "Read-write",
704		"description": "Requests that target another NUMA node and return from another CCX's cache."
705	}, {
706		"name": "DramIO_Near",
707		"bit": 3,
708		"rw": "Read-write",
709		"description": "Requests that target the same NUMA node and return from DRAM or MMIO."
710	}, {
711		"name": "NearFarCache_Near",
712		"bit": 2,
713		"rw": "Read-write",
714		"description": "Requests that target the same NUMA node and return from another CCX's cache."
715	}, {
716		"name": "LocalCcx",
717		"bit": 1,
718		"rw": "Read-write",
719		"description": "Data returned from L3 or different L2 in the same CCX."
720	}, {
721		"name": "LocalL2",
722		"bit": 0,
723		"rw": "Read-write",
724		"description": "Data returned from local L2."
725	} ]
726},
727{
728	"mnemonic": "Core::X86::Pmc::Core::Hardware_Prefetch_Data_Cache_Fills",
729	"name":"Hardware_Prefetch_Data_Cache_Fills",
730	"code": "0x05A",
731	"summary": "Hardware Prefetch Data Cache Fills by Data Source",
732	"description": "Counts fills into the DC that were initiated by hardware prefetches, per data source.",
733	"units": [ {
734		"name": "AlternateMemories_NearFar",
735		"bit": 7,
736		"rw": "Read-write",
737		"description": "Requests that return from Extension Memory."
738	}, {
739		"name": "DramIO_Far",
740		"bit": 6,
741		"rw": "Read-write",
742		"description": "Requests that target another NUMA node and return from DRAM or MMIO."
743	}, {
744		"name": "NearFarCache_Far",
745		"bit": 4,
746		"rw": "Read-write",
747		"description": "Requests that target another NUMA node and return from another CCX's cache."
748	}, {
749		"name": "DramIO_Near",
750		"bit": 3,
751		"rw": "Read-write",
752		"description": "Requests that target the same NUMA node and return from DRAM or MMIO."
753	}, {
754		"name": "NearFarCache_Near",
755		"bit": 2,
756		"rw": "Read-write",
757		"description": "Requests that target the same NUMA node and return from another CCX's cache."
758	}, {
759		"name": "LocalCcx",
760		"bit": 1,
761		"rw": "Read-write",
762		"description": "Data returned from L3 or different L2 in the same CCX."
763	}, {
764		"name": "LocalL2",
765		"bit": 0,
766		"rw": "Read-write",
767		"description": "Data returned from local L2."
768	} ]
769},
770{
771	"mnemonic": "Core::X86::Pmc::Core::Allocated_DC_misses",
772	"name":"Allocated_DC_misses",
773	"code": "0x05F",
774	"summary": "Allocated DC misses",
775	"description": "Counts the number of in-flight DC misses each cycle."
776},
777{
778	"mnemonic": "Core::X86::Pmc::Core::Cycles_Not_in_Halt",
779	"name":"Cycles_Not_in_Halt",
780	"code": "0x076",
781	"summary": "Cycles Not in Halt",
782	"description": "Counts cycles when the thread is not in a HALTed state"
783},
784{
785	"mnemonic": "Core::X86::Pmc::Core::TLB_Flush_Events",
786	"name":"TLB_Flush_Events",
787	"code": "0x078",
788	"summary": "All TLB Flushes",
789	"description": "TLB flush events.",
790	"unit_mode": "or-value",
791	"units": [ {
792		"name": "events",
793		"bit-range": "7:0",
794		"rw": "Read-write",
795		"description": "All TLB Flushes",
796		"values": [
797			{ "value": "0xFF", "description": "Counts all TLB Flushes" }
798		]
799	} ]
800},
801{
802	"mnemonic": "Core::X86::Pmc::Core::P0_frequency_Cycles_Not_in_Halt",
803	"name":"P0_frequency_Cycles_Not_in_Halt",
804	"code": "0x120",
805	"summary": "P0 Freq Cycles not in Halt",
806	"description": "Counts cycles not in Halt, at the P0 P-state frequency, regardless of the current Pstate.",
807	"units": [ {
808		"name": "P0_frequency_Cycles_Not_in_Halt",
809		"bit": 0,
810		"rw": "Read-write",
811		"description": "Counts at the P0 frequency (same as Core::X86::Msr::MPERF) when not in Halt."
812	} ]
813},
814{
815	"mnemonic": "Core::X86::Pmc::Core::Instruction_Cache_Refills_from_L2",
816	"name":"Instruction_Cache_Refills_from_L2",
817	"code": "0x082",
818	"summary": "Instruction Cache Refills From L2",
819	"description": "The number of 64 byte instruction cache lines fulfilled from the L2 cache."
820},
821{
822	"mnemonic": "Core::X86::Pmc::Core::Instruction_Cache_Refills_from_System",
823	"name":"Instruction_Cache_Refills_from_System",
824	"code": "0x083",
825	"summary": "Instruction Cache Refills from System",
826	"description": "The number of 64 byte instruction cache line fulfilled from system memory or another cache."
827},
828{
829	"mnemonic": "Core::X86::Pmc::Core::L1_ITLB_Miss_L2_ITLB_Hit",
830	"name":"L1_ITLB_Miss_L2_ITLB_Hit",
831	"code": "0x084",
832	"summary": "L1 ITLB Miss, L2ITLB Hit",
833	"description": "The number of instruction fetches that miss in the L1 ITLB but hit in the L2 ITLB."
834},
835{
836	"mnemonic": "Core::X86::Pmc::Core::ITLB_Reload_from_Page_Table_walk",
837	"name":"ITLB_Reload_from_Page_Table_walk",
838	"code": "0x085",
839	"summary": "L1 ITLB Miss, L2 ITLB Miss",
840	"description": "The number of instruction fetches that miss in both the L1 ITLB and L2 ITLB.",
841	"units": [ {
842		"name": "Coalesced_4k",
843		"bit": 3,
844		"rw": "Read-write",
845		"description": "Walk for >4k Coalesced page (implemented as 16k)"
846	}, {
847		"name": "walk_1G",
848		"bit": 2,
849		"rw": "Read-write",
850		"description": "Walk for 1G page"
851	}, {
852		"name": "walk_2M",
853		"bit": 1,
854		"rw": "Read-write",
855		"description": "Walk for 2M page"
856	}, {
857		"name": "walk_4K",
858		"bit": 0,
859		"rw": "Read-write",
860		"description": "Walk to 4k page"
861	} ]
862},
863{
864	"mnemonic": "Core::X86::Pmc::Core::BP_Correct",
865	"name":"BP_Correct",
866	"code": "0x08B",
867	"summary": "BP Pipe Correction or Cancel",
868	"description": "The Branch Predictor flushed its own pipeline due to internal conditions such as a second level prediction structure. Does not count the number of bubbles caused by these internal flushes."
869},
870{
871	"mnemonic": "Core::X86::Pmc::Core::Variable_Target_Predictions",
872	"name":"Variable_Target_Predictions",
873	"code": "0x08E",
874	"summary": "Variable Target Predictions",
875	"description": "The number of times a branch used the indirect predictor to make a prediction."
876},
877{
878	"mnemonic": "Core::X86::Pmc::Core::Decoder_Overrides_Existing_Branch_Prediction_Speculative",
879	"name":"Decoder_Overrides_Existing_Branch_Prediction_Speculative",
880	"code": "0x091",
881	"summary": "Early Redirects",
882	"description": "Number of times that an Early Redirect is sent to Branch Predictor. This happens when either the decoder or dispatch logic is able to detect that the Branch Predictor needs to be redirected."
883},
884{
885	"mnemonic": "Core::X86::Pmc::Core::ITLB_Hits",
886	"name":"ITLB_Hits",
887	"code": "0x094",
888	"summary": "ITLB Instruction Fetch Hits",
889	"description": "The number of instruction fetches that hit in the L1ITLB.",
890	"units": [ {
891		"name": "IF1G",
892		"bit": 2,
893		"rw": "Read-write",
894		"description": "L1 Instruction TLB Hit (1G page size)"
895	}, {
896		"name": "IF2M",
897		"bit": 1,
898		"rw": "Read-write",
899		"description": "L1 Instruction TLB Hit (2M page size)"
900	}, {
901		"name": "IF4K",
902		"bit": 0,
903		"rw": "Read-write",
904		"description": "L1 Instruction TLB Hit (4k or 16k coalesced page size)"
905	} ]
906},
907{
908	"mnemonic": "Core::X86::Pmc::Core::BP_redirects",
909	"name":"BP_redirects",
910	"code": "0x09F",
911	"summary": "BP Redirects",
912	"description": "Counts redirects of the branch predictor. To support legacy software, counts both EX mispredict and resyncs when unit_mask[7:0] is set to 0.",
913	"units": [ {
914		"name": "ExRedir",
915		"bit": 1,
916		"rw": "Read-write",
917		"description": "Mispredict redirect from EX (execution-time)"
918	}, {
919		"name": "Resync",
920		"bit": 0,
921		"rw": "Read-write",
922		"description": "Resync redirect (Retire-time) from RT"
923	} ]
924},
925{
926	"mnemonic": "Core::X86::Pmc::Core::Fetch_IBS_events",
927	"name":"Fetch_IBS_events",
928	"code": "0x188",
929	"summary": "Fetch IBS events",
930	"description": "Counts significant Fetch IBS State transitions.",
931	"units": [ {
932		"name": "SampleVal",
933		"bit": 4,
934		"rw": "Read-write",
935		"description": "Counts the number of valid Fetch Instruction Based Sampling (fetch IBS) samples that were collected. Each valid sample also created an IBS interrupt."
936	}, {
937		"name": "SampleFiltered",
938		"bit": 3,
939		"rw": "Read-write",
940		"description": "Counts the number of Fetch IBS tagged fetches that were discarded due to IBS filtering. When a tagged fetch is discarded the Fetch IBS facility will automatically tag a new fetch."
941	}, {
942		"name": "SampleDiscarded",
943		"bit": 2,
944		"rw": "Read-write",
945		"description": "Counts when the Fetch IBS facility discards an IBS tagged fetch for reasons other than IBS filtering. When a tagged fetch is discarded the Fetch IBS facility will automatically tag a new fetch."
946	}, {
947		"name": "FetchTagged",
948		"bit": 1,
949		"rw": "Read-write",
950		"description": "Counts the number of fetches tagged for Fetch IBS. Not all tagged fetches create an IBS interrupt and valid fetch sample."
951	} ]
952},
953{
954	"mnemonic": "Core::X86::Pmc::Core::IC_Tag_Hit_Miss_events",
955	"name":"IC_Tag_Hit_Miss_events",
956	"code": "0x18E",
957	"summary": "IC Tag Hit and Miss Events",
958	"description": "Counts the number of microtag and full tag events as selected by unit mask.",
959	"unit_mode": "or-value",
960	"units": [ {
961		"name": "IcAccessTypes",
962		"bit-range": "4:0",
963		"rw": "Read-write",
964		"description": "Instruction Cache accesses.",
965		"values": [
966			{ "value": "0x07", "description": "Instruction Cache Hit." },
967			{ "value": "0x18", "description": "Instruction Cache Miss." },
968			{ "value": "0x1F", "description": "All Instruction Cache Accesses." }
969		]
970	} ]
971},
972{
973	"mnemonic": "Core::X86::Pmc::Core::Op_Cache_hit_miss",
974	"name":"Op_Cache_hit_miss",
975	"code": "0x28F",
976	"summary": "Op Cache Hit or Miss",
977	"description": "Counts Op Cache micro-tag hit/miss events.",
978	"unit_mode": "or-value",
979	"units": [ {
980		"name": "OpCacheAccesses",
981		"bit-range": "2:0",
982		"rw": "Read-write",
983		"description": "OpCacheAccesses",
984		"values": [
985			{ "value": "0x3", "description": "Op Cache Hit." },
986			{ "value": "0x4", "description": "Op Cache Miss." },
987			{ "value": "0x7", "description": "All Op Cache accesses." }
988		]
989	} ]
990},
991{
992	"mnemonic": "Core::X86::Pmc::Core::Dispatch_Empty",
993	"name":"Dispatch_Empty",
994	"code": "0x0A9",
995	"summary": "Op Queue Empty",
996	"description": "Cycles where the Op Queue is empty."
997},
998{
999	"mnemonic": "Core::X86::Pmc::Core::Source_of_Op_Dispatched_From_Decoder",
1000	"name":"Source_of_Op_Dispatched_From_Decoder",
1001	"code": "0x0AA",
1002	"summary": "Source of Op Dispatched From Decoder",
1003	"description": "Counts the number of ops dispatched from the decoder classified by op source.",
1004	"units": [ {
1005		"name": "Op_Cache",
1006		"bit": 1,
1007		"rw": "Read-write",
1008		"description": "Count of ops dispatched from OpCache"
1009	}, {
1010		"name": "x86_decoder",
1011		"bit": 0,
1012		"rw": "Read-write",
1013		"description": "Count of ops dispatched from x86 decoder"
1014	} ]
1015},
1016{
1017	"mnemonic": "Core::X86::Pmc::Core::Types_of_Ops_Dispatched_From_Decoder",
1018	"name":"Types_of_Ops_Dispatched_From_Decoder",
1019	"code": "0x0AB",
1020	"summary": "Types of Ops Dispatched From Decoder",
1021	"description": "Counts the number of ops dispatched from the decoder classified by op type. The UnitMask value encodes which types of ops are counted.",
1022	"unit_mode": "or-value",
1023	"units": [ {
1024		"name": "DispOpType",
1025		"bit-range": "4:0",
1026		"rw": "Read-write",
1027		"description": "DispOpType.",
1028		"values": [
1029			{ "value": "0x04", "description": "Any FP dispatch." },
1030			{ "value": "0x08", "description": "Any Integer dispatch." }
1031		]
1032	} ]
1033},
1034{
1035	"mnemonic": "Core::X86::Pmc::Core::Dispatch_Stall_Cycles_Dynamic_Tokens_Part_1",
1036	"name":"Dispatch_Stall_Cycles_Dynamic_Tokens_Part_1",
1037	"code": "0x0AE",
1038	"summary": "Dynamic Tokens Dispatch Stall Cycles 1",
1039	"description": "Cycles where a dispatch group is valid but does not get dispatched due to a Token Stall. UnitMask bits select the stall types included in the count.",
1040	"units": [ {
1041		"name": "FPSchRsrcStall",
1042		"bit": 6,
1043		"rw": "Read-write",
1044		"description": "FP NSQ token stall"
1045	}, {
1046		"name": "TakenBrnchBufferRsrc",
1047		"bit": 4,
1048		"rw": "Read-write",
1049		"description": "taken branch buffer resource stall."
1050	}, {
1051		"name": "StoreQueueRsrcStall",
1052		"bit": 2,
1053		"rw": "Read-write",
1054		"description": "STQ Tokens unavailable"
1055	}, {
1056		"name": "LoadQueueRsrcStall",
1057		"bit": 1,
1058		"rw": "Read-write",
1059		"description": "Load Queue Token Stall."
1060	}, {
1061		"name": "IntPhyRegFileRsrcStall",
1062		"bit": 0,
1063		"rw": "Read-write",
1064		"description": "Integer Physical Register File resource stall."
1065	} ]
1066},
1067{
1068	"mnemonic": "Core::X86::Pmc::Core::Dispatch_Stall_Cycles_Dynamic_Tokens_Part_2",
1069	"name":"Dispatch_Stall_Cycles_Dynamic_Tokens_Part_2",
1070	"code": "0x0AF",
1071	"summary": "Dynamic Tokens Dispatch Stall Cycles 2",
1072	"description": "Cycles where a dispatch group is valid but does not get dispatched due to a token stall. UnitMask bits select the stall types included in the count.",
1073	"units": [ {
1074		"name": "RetQ",
1075		"bit": 5,
1076		"rw": "Read-write",
1077		"description": "Retire queue tokens unavailable"
1078	}, {
1079		"name": "EX_Flush_recovery",
1080		"bit": 2,
1081		"rw": "Read-write",
1082		"description": "Integer Execution flush recovery pending"
1083	}, {
1084		"name": "AGTokens",
1085		"bit": 1,
1086		"rw": "Read-write",
1087		"description": "Agen tokens unavailable"
1088	}, {
1089		"name": "ALTokens",
1090		"bit": 0,
1091		"rw": "Read-write",
1092		"description": "ALU tokens unavailable"
1093	} ]
1094},
1095{
1096	"mnemonic": "Core::X86::Pmc::Core::No_Dispatch_per_Slot",
1097	"name":"No_Dispatch_per_Slot",
1098	"code": "0x1A0",
1099	"summary": "No_Dispatch_per_Slot",
1100	"description": "Counts the number of dispatch slots (each cycle) that remained unused for reasons selected by UnitMask.",
1101	"unit_mode": "or-value",
1102	"units": [ {
1103		"name": "StallReason",
1104		"bit-range": "7:0",
1105		"rw": "Read-write",
1106		"description": "Reasons",
1107		"values": [
1108			{ "value": "0x01", "description": "Counts dispatch slots left empty because the front-end did not supply ops." },
1109			{ "value": "0x1E", "description": "Counts ops unable to dispatch due to back-end stalls." },
1110			{ "value": "0x60", "description": "Counts ops unable to dispatch because the dispatch cycle was granted to the other SMT thread." }
1111		]
1112	} ]
1113},
1114{
1115	"mnemonic": "Core::X86::Pmc::Core::Additional_Resource_Stalls",
1116	"name":"Additional_Resource_Stalls",
1117	"code": "0x1A2",
1118	"summary": "Dispatch Additional Resource Stalls",
1119	"description": "This PMC event counts additional resource stalls that are not captured by Dispatch_Stall_Cycle_Dynamic_Tokens_Part_1 or Dispatch_Stall_Cycles_Dynamic_Tokens_Part_2.",
1120	"unit_mode": "or-value",
1121	"units": [ {
1122		"name": "Stall",
1123		"bit-range": "7:0",
1124		"rw": "Read-write",
1125		"description": "Stalls.",
1126		"values": [
1127			{ "value": "0x30", "description": "Counts additional cycles dispatch is stalled due to the lack of dispatch resources." }
1128		]
1129	} ]
1130},
1131{
1132	"mnemonic": "Core::X86::Pmc::Core::Retired_Instructions",
1133	"name":"Retired_Instructions",
1134	"code": "0x0C0",
1135	"summary": "Retired Instructions",
1136	"description": "The number of instructions retired."
1137},
1138{
1139	"mnemonic": "Core::X86::Pmc::Core::Retired_Macro_Ops",
1140	"name":"Retired_Macro_Ops",
1141	"code": "0x0C1",
1142	"summary": "Retired Macro-Ops",
1143	"description": "The number of macro-ops retired."
1144},
1145{
1146	"mnemonic": "Core::X86::Pmc::Core::Retired_Branch_Instructions",
1147	"name":"Retired_Branch_Instructions",
1148	"code": "0x0C2",
1149	"summary": "Retired Branch Instructions",
1150	"description": "The number of branch instructions retired. This includes all types of architectural control flow changes, including exceptions and interrupts."
1151},
1152{
1153	"mnemonic": "Core::X86::Pmc::Core::Retired_Branch_Instructions_Mispredicted",
1154	"name":"Retired_Branch_Instructions_Mispredicted",
1155	"code": "0x0C3",
1156	"summary": "Retired Branch Instructions Mispredicted.",
1157	"description": "The number of retired branch instructions, that were mispredicted. Note that only EX mispredicts are counted."
1158},
1159{
1160	"mnemonic": "Core::X86::Pmc::Core::Retired_Taken_Branch_Instructions",
1161	"name":"Retired_Taken_Branch_Instructions",
1162	"code": "0x0C4",
1163	"summary": "Retired Taken Branch Instructions",
1164	"description": "The number of taken branches that were retired. This includes all types of architectural control flow changes, including exceptions and interrupts."
1165},
1166{
1167	"mnemonic": "Core::X86::Pmc::Core::Retired_Taken_Branch_Instructions_Mispredicted",
1168	"name":"Retired_Taken_Branch_Instructions_Mispredicted",
1169	"code": "0x0C5",
1170	"summary": "Retired Taken Branch Instructions Mispredicted.",
1171	"description": "The number of retired taken branch instructions that were mispredicted. Note that only EX mispredicts are counted."
1172},
1173{
1174	"mnemonic": "Core::X86::Pmc::Core::Retired_Far_Control_Transfers",
1175	"name":"Retired_Far_Control_Transfers",
1176	"code": "0x0C6",
1177	"summary": "Retired Far Control Transfers",
1178	"description": "The number of far control transfers retired including far call/jump/return, IRET, SYSCALL and SYSRET, plus exceptions and interrupts. Far control transfers are not subject to branch prediction."
1179},
1180{
1181	"mnemonic": "Core::X86::Pmc::Core::Retired_Near_Return_Branch_Instructions",
1182	"name":"Retired_Near_Return_Branch_Instructions",
1183	"code": "0x0C8",
1184	"summary": "Retired Near Return Branch Instructions",
1185	"description": "The number of near return instructions (RET [C3] or RET Iw [C2]) retired."
1186},
1187{
1188	"mnemonic": "Core::X86::Pmc::Core::Retired_Near_Return_Branch_Instructions_Mispredicted",
1189	"name":"Retired_Near_Return_Branch_Instructions_Mispredicted",
1190	"code": "0x0C9",
1191	"summary": "Retired Near Return Branch Instructions Mispredicted",
1192	"description": "The number of near returns retired that were not correctly predicted by the return address predictor. Each such mispredict incurs the same penalty as a mispredicted conditional branch instruction. Note that only EX mispredicts are counted."
1193},
1194{
1195	"mnemonic": "Core::X86::Pmc::Core::Retired_Indirect_Branch_Instructions_Mispredicted",
1196	"name":"Retired_Indirect_Branch_Instructions_Mispredicted",
1197	"code": "0x0CA",
1198	"summary": "Retired Indirect Branch Instructions Mispredicted",
1199	"description": "The number of indirect branches retired that were not correctly predicted. Each such mispredict incurs the same penalty as a mispredicted conditional branch instruction. Note that only EX mispredicts are counted."
1200},
1201{
1202	"mnemonic": "Core::X86::Pmc::Core::Retired_MMX_FP_Instructions",
1203	"name":"Retired_MMX_FP_Instructions",
1204	"code": "0x0CB",
1205	"summary": "Retired MMX FP Instructions",
1206	"description": "The number of MMX, SSE or x87 instructions retired. The UnitMask allows the selection of the individual classes of instructions as given in the table. Each increment represents one complete instruction. Since this event includes non-numeric instructions it is not suitable for measuring MFLOPs",
1207	"units": [ {
1208		"name": "SSE",
1209		"bit": 2,
1210		"rw": "Read-write",
1211		"description": "SSE instructions (SSE, SSE2, SSE3, SSSE3, SSE4A, SSE41, SSE42, AVX)."
1212	}, {
1213		"name": "MMX",
1214		"bit": 1,
1215		"rw": "Read-write",
1216		"description": "MMX instructions"
1217	}, {
1218		"name": "X87",
1219		"bit": 0,
1220		"rw": "Read-write",
1221		"description": "x87 instructions"
1222	} ]
1223},
1224{
1225	"mnemonic": "Core::X86::Pmc::Core::Retired_Indirect_Branch_Instructions",
1226	"name":"Retired_Indirect_Branch_Instructions",
1227	"code": "0x0CC",
1228	"summary": "Retired Indirect Branch Instructions",
1229	"description": "The number of indirect branches retired."
1230},
1231{
1232	"mnemonic": "Core::X86::Pmc::Core::Retired_Conditional_Branch_Instructions",
1233	"name":"Retired_Conditional_Branch_Instructions",
1234	"code": "0x0D1",
1235	"summary": "Retired Conditional Branch Instructions",
1236	"description": "Count of conditional branch instructions that retired"
1237},
1238{
1239	"mnemonic": "Core::X86::Pmc::Core::Div_Cycles_Busy_count",
1240	"name":"Div_Cycles_Busy_count",
1241	"code": "0x0D3",
1242	"summary": "Div Cycles Busy count",
1243	"description": "Counts cycles when the divider is busy"
1244},
1245{
1246	"mnemonic": "Core::X86::Pmc::Core::Div_Op_Count",
1247	"name":"Div_Op_Count",
1248	"code": "0x0D4",
1249	"summary": "Div Op Count",
1250	"description": "Counts number of divide ops"
1251
1252},
1253{
1254	"mnemonic": "Core::X86::Pmc::Core::Cycles_with_no_retire",
1255	"name":"Cycles_with_no_retire",
1256	"code": "0x0D6",
1257	"summary": "Cycles with no retire",
1258	"description": "This event counts cycles when the hardware thread does not retire any ops for reasons selected by UnitMask[4:0].  UnitMask events [4:0] are mutually exclusive. If multiple reasons apply for a given cycle, the lowest numbered UnitMask event is counted.",
1259	"units": [ {
1260		"name": "ThreadNotSelected",
1261		"bit": 4,
1262		"rw": "Read-write",
1263		"description": "The number cycles where ops could have retired (i.e. did not fall into the sub-events [0]...[3]) but did not retire because the thread arbitration did not select the thread for retire."
1264	}, {
1265		"name": "Other",
1266		"bit": 3,
1267		"rw": "Read-write",
1268		"description": "The number of cycles where ops could have retired (self and older ops are complete), but were stopped from retirement for other reasons: retire breaks, traps, faults, etc."
1269	}, {
1270		"name": "NotCompleteSelf",
1271		"bit": 1,
1272		"rw": "Read-write",
1273		"description": "The number of cycles where the oldest retire slot did not have its completion bits set."
1274	}, {
1275		"name": "Empty",
1276		"bit": 0,
1277		"rw": "Read-write",
1278		"description": "The number of cycles when there were no valid ops in the retire queue. This may be caused by front-end bottlenecks or pipeline redirects."
1279	} ]
1280},
1281{
1282	"mnemonic": "Core::X86::Pmc::Core::Retired_Microcoded_Instructions",
1283	"name":"Retired_Microcoded_Instructions",
1284	"code": "0x1C1",
1285	"summary": "Retired Microcoded Instructions",
1286	"description": "The number of retired microcoded instructions."
1287},
1288{
1289	"mnemonic": "Core::X86::Pmc::Core::Retired_Microcode_Ops",
1290	"name":"Retired_Microcode_Ops",
1291	"code": "0x1C2",
1292	"summary": "Retired Microcode Ops",
1293	"description": "The number of microcode ops that have retired."
1294},
1295{
1296	"mnemonic": "Core::X86::Pmc::Core::Retired_Conditional_Branch_Instructions_Mispredicted",
1297	"name":"Retired_Conditional_Branch_Instructions_Mispredicted",
1298	"code": "0x1C7",
1299	"summary": "Retired Conditional Branch Instructions Mispredicted",
1300	"description": "The number of retired conditional branch instructions that were not correctly predicted because of a branch direction mismatch."
1301},
1302{
1303	"mnemonic": "Core::X86::Pmc::Core::Retired_Unconditional_Branch_Instructions_Mispredicted",
1304	"name":"Retired_Unconditional_Branch_Instructions_Mispredicted",
1305	"code": "0x1C8",
1306	"summary": "Retired Unconditional Branch Instructions Mispredicted",
1307	"description": "The number of retired unconditional indirect branch instructions that were mispredicted."
1308},
1309{
1310	"mnemonic": "Core::X86::Pmc::Core::Retired_Unconditional_Branch_Instructions",
1311	"name":"Retired_Unconditional_Branch_Instructions",
1312	"code": "0x1C9",
1313	"summary": "Retired Unconditional Branch Instructions",
1314	"description": "Retired Unconditional Branch Instructions"
1315},
1316{
1317	"mnemonic": "Core::X86::Pmc::Core::Tagged_IBS_Ops",
1318	"name":"Tagged_IBS_Ops",
1319	"code": "0x1CF",
1320	"summary": "Tagged IBS Ops",
1321	"description": "Counts Op IBS related events",
1322	"units": [ {
1323		"name": "IbsCountRollover",
1324		"bit": 2,
1325		"rw": "Read-write",
1326		"description": "Number of times an op could not be tagged by IBS because of a previous tagged op that has not yet signaled interrupt."
1327	}, {
1328		"name": "IbsTaggedOpsRet",
1329		"bit": 1,
1330		"rw": "Read-write",
1331		"description": "Number of Ops tagged by IBS that retired"
1332	}, {
1333		"name": "IbsTaggedOps",
1334		"bit": 0,
1335		"rw": "Read-write",
1336		"description": "Number of Ops tagged by IBS"
1337	} ]
1338},
1339{
1340	"mnemonic": "Core::X86::Pmc::Core::Retired_fused_instructions",
1341	"name":"Retired_fused_instructions",
1342	"code": "0x1D0",
1343	"summary": "Retired Fused Instructions",
1344	"description": "Counts retired fused instructions."
1345},
1346{
1347	"mnemonic": "Core::X86::Pmc::L2::L2RequestG1",
1348	"name":"L2RequestG1",
1349	"code": "0x060",
1350	"summary": "Requests to L2 Group1",
1351	"description": "All L2 Cache Requests (Breakdown 1 - Common)",
1352	"units": [ {
1353		"name": "RdBlkL",
1354		"bit": 7,
1355		"rw": "Read-write",
1356		"description": "Data Cache Reads (including hardware and software prefetch)."
1357	}, {
1358		"name": "RdBlkX",
1359		"bit": 6,
1360		"rw": "Read-write",
1361		"description": "Data Cache Stores"
1362	}, {
1363		"name": "LsRdBlkC_S",
1364		"bit": 5,
1365		"rw": "Read-write",
1366		"description": "Data Cache Shared Reads"
1367	}, {
1368		"name": "CacheableIcRead",
1369		"bit": 4,
1370		"rw": "Read-write",
1371		"description": "Instruction Cache Reads."
1372	}, {
1373		"name": "LsPrefetchL2Cmd",
1374		"bit": 2,
1375		"rw": "Read-write"
1376	}, {
1377		"name": "L2HwPf",
1378		"bit": 1,
1379		"rw": "Read-write",
1380		"description": "All prefetches accepted by L2 pipeline, hit or miss. Types of PF and L2 hit/miss broken out in a separate perfmon event"
1381	}, {
1382		"name": "Group2",
1383		"bit": 0,
1384		"rw": "Read-write",
1385		"description": "Various Noncacheable requests. Non-cached Data Reads, Non- cached Instruction Reads, Self-modifying code checks."
1386	} ]
1387},
1388{
1389	"mnemonic": "Core::X86::Pmc::L2::L2RequestG2",
1390	"name":"L2RequestG2",
1391	"code": "0x061",
1392	"summary": "Requests to L2 Group2",
1393	"description": "All L2 Cache Requests (Breakdown 2 - Rare).",
1394	"units": [ {
1395		"name": "LsRdSized",
1396		"bit": 6,
1397		"rw": "Read-write",
1398		"description": "LS sized read, coherent non-cacheable."
1399	}, {
1400		"name": "LsRdSizedNC",
1401		"bit": 5,
1402		"rw": "Read-write",
1403		"description": "LS sized read, non-coherent, non-cacheable."
1404	} ]
1405},
1406{
1407	"mnemonic": "Core::X86::Pmc::L2::L2WcbReq",
1408	"name":"L2WcbReq",
1409	"code": "0x063",
1410	"summary": "Write Combining Buffer Requests",
1411	"description": "Write Combining Buffer operations. For information on Write Combining see docAPM2 sections: Memory System, Memory Types, Buffering and Combining Memory Writes.",
1412	"units": [ {
1413		"name": "WcbClose",
1414		"bit": 5,
1415		"rw": "Read-write",
1416		"description": "Write Combining Buffer close"
1417	} ]
1418},
1419{
1420	"mnemonic": "Core::X86::Pmc::L2::L2CacheReqStat",
1421	"name":"L2CacheReqStat",
1422	"code": "0x064",
1423	"summary": "Core to L2 Cacheable Request Access Status",
1424	"description": "L2 Cache Request Outcomes (not including L2 Prefetch).",
1425	"units": [ {
1426		"name": "LsRdBlkCS",
1427		"bit": 7,
1428		"rw": "Read-write",
1429		"description": "Data Cache Shared Read Hit in L2. "
1430	}, {
1431		"name": "LsRdBlkLHitX: Data Cache Read Hit in L2",
1432		"bit": 6,
1433		"rw": "Read-write",
1434		"description": "Modifiable"
1435	}, {
1436		"name": "LsRdBlkLHitS",
1437		"bit": 5,
1438		"rw": "Read-write",
1439		"description": "Data Cache Read Hit Non-Modifiable Line in L2."
1440	}, {
1441		"name": "LsRdBlkX",
1442		"bit": 4,
1443		"rw": "Read-write",
1444		"description": "Data Cache Store Hit in L2. "
1445	}, {
1446		"name": "LsRdBlkC",
1447		"bit": 3,
1448		"rw": "Read-write",
1449		"description": "Data Cache Req Miss in L2. "
1450	}, {
1451		"name": "IcFillHitX",
1452		"bit": 2,
1453		"rw": "Read-write",
1454		"description": "Instruction Cache Hit Modifiable Line in L2."
1455	}, {
1456		"name": "IcFillHitS",
1457		"bit": 1,
1458		"rw": "Read-write",
1459		"description": "Instruction Cache Hit Non-Modifiable Line in L2."
1460	}, {
1461		"name": "IcFillMiss",
1462		"bit": 0,
1463		"rw": "Read-write",
1464		"description": "Instruction Cache Req Miss in L2."
1465	} ]
1466},
1467{
1468	"mnemonic": "Core::X86::Pmc::L2::L2PfHitL2",
1469	"name":"L2PfHitL2",
1470	"code": "0x070",
1471	"summary": "L2 Prefetch Hit in L2",
1472	"description": "Counts all L2 prefetches accepted by L2 pipeline which hit in the L2 cache.",
1473	"unit_mode": "or-value",
1474	"units": [ {
1475		"name": "Prefetches",
1476		"bit-range": "7:0",
1477		"rw": "Read-write",
1478		"description": "Prefetches.",
1479		"values": [
1480			{ "value": "0x1F", "description": "Counts requests generated from L2 Hardware Prefetchers." },
1481			{ "value": "0xE0", "description": "Counts requests generated from L1 DC Hardware Prefetchers." },
1482			{ "value": "0xFF", "description": "Counts requests generated from L1 DC and L2 Hardware Prefetchers." }
1483		]
1484	} ]
1485},
1486{
1487	"mnemonic": "Core::X86::Pmc::L2::L2PfMissL2HitL3",
1488	"name":"L2PfMissL2HitL3",
1489	"code": "0x071",
1490	"summary": "L2 Prefetcher Hits in L3",
1491	"description": "Counts all L2 prefetches accepted by the L2 pipeline which miss the L2 cache and hit the L3.",
1492	"unit_mode": "or-value",
1493	"units": [ {
1494		"name": "Prefetches",
1495		"bit-range": "7:0",
1496		"rw": "Read-write",
1497		"description": "L2Stream",
1498		"values": [
1499			{ "value": "0x1F", "description": "Counts requests generated from L2 Hardware Prefetchers." },
1500			{ "value": "0xE0", "description": "Counts requests generated from L1 DC Hardware Prefetchers." },
1501			{ "value": "0xFF", "description": "Counts requests generated from L1 DC and L2 Hardware Prefetchers." }
1502		]
1503	} ]
1504},
1505{
1506	"mnemonic": "Core::X86::Pmc::L2::L2PfMissL2L3",
1507	"name":"L2PfMissL2L3",
1508	"code": "0x072",
1509	"summary": "L2 Prefetcher Misses in L3",
1510	"description": "Counts all L2 prefetches accepted by the L2 pipeline which miss the L2 and the L3 caches",
1511	"unit_mode": "or-value",
1512	"units": [ {
1513		"name": "Prefetches",
1514		"bit-range": "7:0",
1515		"rw": "Read-write",
1516		"description": "L2Stream",
1517		"values": [
1518			{ "value": "0x1F", "description": "Counts requests generated from L2 Hardware Prefetchers." },
1519			{ "value": "0xE0", "description": "Counts requests generated from L1 DC Hardware Prefetchers." },
1520			{ "value": "0xFF", "description": "Counts requests generated from L1 DC and L2 Hardware Prefetchers." }
1521		]
1522	} ]
1523},
1524{
1525	"mnemonic": "Core::X86::Pmc::L2::L2FillRspSrc",
1526	"name":"L2FillRspSrc",
1527	"code": "0x165",
1528	"summary": "L2 Fill Response Source",
1529	"description": "Counts fill responses based on their source. Selecting an event mask of 0xfe will count all L3 responses.  This will count all L3 responses to fill requests.  This event is similar to LS PMC 0x44",
1530	"units": [ {
1531		"name": "AlternateMemories_NearFar",
1532		"bit": 7,
1533		"rw": "Read-write",
1534		"description": "Requests that return from Extension Memory"
1535	}, {
1536		"name": "DramIO_Far",
1537		"bit": 6,
1538		"rw": "Read-write",
1539		"description": "Requests that target another NUMA node and return from either DRAM or MMIO from another NUMA node, either from the same or different NUMA node."
1540	}, {
1541		"name": "NearFarCache_Far",
1542		"bit": 4,
1543		"rw": "Read-write",
1544		"description": "Requests that target another NUMA node and return from another CCX's cache."
1545	}, {
1546		"name": "DramIO_Near",
1547		"bit": 3,
1548		"rw": "Read-write",
1549		"description": "Requests that target the same NUMA node and return from either DRAM or MMIO from the same NUMA node."
1550	}, {
1551		"name": "NearFarCache_Near",
1552		"bit": 2,
1553		"rw": "Read-write",
1554		"description": "Requests that target the same NUMA node and return from another CCX's cache."
1555	}, {
1556		"name": "LocalCcx",
1557		"bit": 1,
1558		"rw": "Read-write",
1559		"description": "Data returned from L3 or different L2 in the same CCX."
1560	} ]
1561} ]
1562