aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/tier0/P5P6PerformanceCounters.h
blob: a7657567b916f1b2527f59b90a1be356f7e0d3ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef P5P6PERFORMANCECOUNTERS_H
#define P5P6PERFORMANCECOUNTERS_H

// defined for < Pentium 4

//---------------------------------------------------------------------------
// Format of the performance event IDs within this header file in case you
// wish to add any additional events that may not be present here.
//
// BITS 0-8	Unit Mask, Unsed on P5 processors
// BIT  9	Set if event can be set on counter 0
// BIT  10	Set if event can be set on counter 1
// BITS 11-15	Unused Set to zero
// BITS 16-23	Event Select ID, Only bits 16-21 used on P5 Family
// BITS 24-27	Unused set to zero
// BITS 28-32	Process family that the event belong to, as returned by
//		the CPUID instruction.
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// PENTIUM PERFORMANCE COUNTERS.
//---------------------------------------------------------------------------
#define	P5_DTCRD 0x50000300 //Data Cache Reads
#define	P5_DWRIT 0x50010300 //Data Cache Writes
#define	P5_DTTLB 0x50020300 //Data TLB Miss
#define	P5_DTRMS 0x50030300 //Data Read Misses
#define	P5_DWRMS 0x50040300 //Data Write Miss
#define	P5_WHLCL 0x50050300 //Write (Hit) to M- or E-state line
#define	P5_DCLWB 0x50060300 //Data Cache Lines Written Back
#define	P5_DCSNP 0x50070300 //External Snoops
#define	P5_DCSHT 0x50080300 //Data Cache Snoop Hits
#define	P5_MAIBP 0x50090300 //Memory Access in Both Pipes
#define	P5_BANKS 0x500A0300 //Bank Conflicts
#define	P5_MISAL 0x500B0300 //Misaligned Data Memory Reference
#define	P5_COCRD 0x500C0300 //Code Cache Reads
#define	P5_COTLB 0x500D0300 //Code TLB Misses
#define	P5_COCMS 0x500E0300 //Code Cache Misses
#define	P5_ANYSG 0x500F0300 //Any Segment Register Loaded
#define	P5_BRANC 0x50120300 //Branches
#define	P5_BTBHT 0x50130300 //BTB Hits
#define	P5_TBRAN 0x50140300 //Taken Branch or BTB hit
#define	P5_PFLSH 0x50150300 //Pipeline flushes
#define	P5_INSTR 0x50160300 //Instructions Executed
#define	P5_INSTV 0x50170300 //Instructions Executed in the V-Pipe (Pairing)
#define	P5_CLOCL 0x50180300 //Bus active
#define	P5_PSDWR 0x50190300 //Full write buffers
#define	P5_PSWDR 0x501A0300 //Waiting for Data Memory Read
#define	P5_NCLSW 0x501B0300 //Clocks stalled writing an E or M state line
#define	P5_IORWC 0x501D0300 //I/O Read or Write Cycle
#define	P5_NOCMR 0x501E0300 //Non-Cacheable Memory Reads
#define	P5_PSLDA 0x501F0300 //Clocks stalled due to AGI
#define	P5_FLOPS 0x50220300 //Floating Point Operations
#define P5_DBGR0 0x50230300 //Breakpoint match on DR0
#define P5_DBGR1 0x50240300 //Breakpoint match on DR1
#define P5_DBGR2 0x50250300 //Breakpoint match on DR2
#define P5_DBGR3 0x50260300 //Breakpoint match on DR3
#define	P5_HWINT 0x50270300 //Hardware interrupts
#define	P5_DTRWR 0x50280300 //Data reads or writes
#define	P5_DTRWM 0x50290300 //Data read or write miss
#define P5_BOLAT 0x502A0100 //Bus ownership latency
#define P5_BOTFR 0x502A0200 //Bus ownership transfer
#define	P5_MMXA1 0x502B0100 //MMX Instruction Executed in U-pipe
#define	P5_MMXA2 0x502B0200 //MMX Instruction Executed in V-pipe
#define P5_MMXMS 0x502C0100 //Cache M state line sharing
#define P5_MMSLS 0x502C0200 //Cache line sharing
#define	P5_MMXB1 0x502D0100 //EMMS Instructions Executed
#define	P5_MMXB2 0x502D0200 //Transition from MMX to FP instructions
#define	P5_NOCMW 0x502E0200 //Non-Cacheable Memory Writes
#define	P5_MMXC1 0x502F0100 //Saturated MMX Instructions Executed
#define	P5_MMXC2 0x502F0200 //Saturations Performed
#define	P5_MMXHS 0x50300100 //Cycles Not in HALT State
#define	P5_MMXD2 0x50310100 //MMX Data Read
#define	P5_MMXFP 0x50320100 //Floating Point Stalls
#define	P5_MMXTB 0x50320200 //Taken Branches
#define	P5_MMXD0 0x50330100 //D1 Starvation and FIFO Empty
#define	P5_MMXD1 0x50330200 //D1 Starvation and one instruction in FIFO
#define	P5_MMXE1 0x50340100 //MMX Data Writes
#define	P5_MMXE2 0x50340200 //MMX Data Write Misses
#define	P5_MMXWB 0x50350100 //Pipeline flushes, wrong branch prediction
#define	P5_MMXWJ 0x50350200 //Pipeline flushes, branch prediction WB-stage
#define	P5_MMXF1 0x50360100 //Misaligned MMX Data Memory Reference
#define	P5_MMXF2 0x50360200 //Pipeline Stalled Waiting for MMX data read
#define	P5_MMXRI 0x50370100 //Returns Predicted Incorrectly
#define	P5_MMXRP 0x50370200 //Returns Predicted
#define	P5_MMXG1 0x50380100 //MMX Multiply Unit Interlock
#define	P5_MMXG2 0x50380200 //MOVD/MOVQ store stall, previous operation
#define	P5_MMXRT 0x50390100 //Returns
#define	P5_MMXRO 0x50390200 //RSB Overflows
#define	P5_MMXBF 0x503A0100 //BTB False entries
#define	P5_MMXBM 0x503A0200 //BTB misprediction on a Not-Taken Branch
#define	P5_PXDWR 0x503B0100 //stalled due MMX Full write buffers
#define	P5_PXZWR 0x503B0200 //stalled on MMX write to E or M state line

#define	P5_CLOCK 0x503F0300 //Special value to count clocks on P5


//---------------------------------------------------------------------------
// PENTIUM PRO / PENTIUM II  PERFORMANCE COUNTERS.
//---------------------------------------------------------------------------
#define	P6_STRBB 0x60030300 //Store Buffer Block
#define	P6_STBDC 0x60040300 //Store Buffer Drain Cycles
#define	P6_MISMM 0x60050300 //Misaligned Data Memory Reference
#define	P6_SEGLD 0x60060300 //Segment register loads
#define	P6_FPOPE 0x60100100 //FP Computational Op. (COUNTER 0 ONLY)
#define	P6_FPEOA 0x60110200 //FP Microcode Exceptions (COUNTER 1 ONLY)
#define	P6_FMULT 0x60120200 //Multiplies (COUNTER 1 ONLY)
#define	P6_FPDIV 0x60130200 //Divides (COUNTER 1 ONLY)
#define	P6_DBUSY 0x60140200 //Cycles Divider Busy  (COUNTER 1 ONLY)
#define	P6_L2STR 0x60210300 //L2 address strobes => address bus utilization
#define	P6_L2BBS 0x60220300 //Cycles L2 Bus Busy
#define	P6_L2BBT 0x60230300 //Cycles L2 Bus Busy transferring data to CPU
#define	P6_L2ALO 0x60240300 //L2 Lines Allocated
#define	P6_L2MAL 0x60250300 //L2 M-state Lines Allocated
#define	P6_L2CEV 0x60260300 //L2 Lines Evicted
#define	P6_L2MEV 0x60270300 //L2 M-state Lines Evicted
#define	P6_L2MCF 0x60280301 //L2 Cache Instruction Fetch Misses
#define	P6_L2FET 0x6028030F //L2 Cache Instruction Fetches
#define	P6_L2DRM 0x60290301 //L2 Cache Read Misses
#define	P6_L2DMR 0x6029030F //L2 Cache Reads
#define	P6_L2DWM 0x602A0301 //L2 Cache Write Misses
#define	P6_L2DMW 0x602A030F //L2 Cache Writes
#define	P6_L2CMS 0x602E0301 //L2 Cache Request Misses
#define	P6_L2DCR 0x602E030F //L2 Cache Requests
#define	P6_DMREF 0x60430300 //Data Memory References
#define	P6_DCALO 0x6045030F //L1 Lines Allocated
#define	P6_DCMAL 0x60460300 //L1 M-state Data Cache Lines Allocated
#define	P6_DCMEV 0x60470300 //L1 M-state Data Cache Lines Evicted
#define	P6_DCOUT 0x60480300 //L1 Misses outstanding
#define	P6_TSMCD 0x60520300 //Time Self-Modifiying Code Detected
#define	P6_BRWRA 0x60600300 //External Bus Cycles While Receive Active
#define	P6_BRDCD 0x60600300 //External Bus Request Outstanding
#define	P6_BRBNR 0x60610300 //External Bus Cycles While BNR Asserted
#define	P6_BUSBS 0x60620300 //External Bus Cycles-DRDY Asserted (busy)
#define	P6_BLOCK 0x60630300 //External Bus Cycles-LOCK signal asserted
#define	P6_BBRCV 0x60640300 //External Bus Cycles-Processor receiving data
#define	P6_BURST 0x60650300 //External Bus Burst Read Operations
#define	P6_BRINV 0x60660300 //External Bus Read for Ownership Transaction
#define	P6_BMLEV 0x60670300 //External Bus Writeback M-state Evicted
#define	P6_BBIFT 0x60680300 //External Bus Burst Instruction Fetches
#define	P6_BINVL 0x60690300 //External Bus Invalidate Transactions
#define	P6_BPRBT 0x606A0300 //External Bus Partial Read Transactions
#define	P6_BPTMO 0x606B0300 //External Bus Partial Memory Transactions
#define	P6_BUSIO 0x606C0300 //External Bus I/O Bus Transactions
#define	P6_BUSDF 0x606D0300 //External Bus Deferred Transactions
#define	P6_BUSTB 0x606E0300 //External Bus Burst Transactions
#define	P6_BMALL 0x606F0300 //External Bus Memory Transactions
#define	P6_BSALL 0x60700300 //External Bus Transactions
#define	P6_CLOCK 0x60790300 //Clockticks
#define	P6_BRHIT 0x607A0300 //External Bus Cycles While HIT Asserted
#define	P6_BRHTM 0x607B0300 //External Bus Cycles While HITM Asserted
#define	P6_BRSST 0x607E0300 //External Bus Cycles While Snoop Stalled
#define	P6_CMREF 0x60800300 //Total Instruction Fetches
#define	P6_TOIFM 0x60810300 //Total Instruction Fetch Misses
#define	P6_INTLB 0x60850300 //Instructions TLB Misses
#define	P6_CSFET 0x60860300 //Cycles Instruction Fetch Stalled
#define	P6_FTSTL 0x60870300 //Cycles Instruction Fetch stalled
#define	P6_RSTAL 0x60A20300 //Resource Related Stalls
#define	P6_MMXIE 0x60B00300 //MMX Instructions Executed
#define	P6_SAISE 0x60B10300 //Saturated Arithmetic Instructions Executed
#define	P6_PORT0 0x60B20301 //MMX micro-ops executed on Port 0
#define	P6_PORT1 0x60B20302 //MMX micro-ops executed on Port 1
#define	P6_PORT2 0x60B20304 //MMX micro-ops executed on Port 2
#define	P6_PORT3 0x60B20308 //MMX micro-ops executed on Port 3
#define	P6_MMXPA 0x60B30300 //MMX Packed Arithmetic
#define	P6_MMXPM 0x60B30301 //MMX Packed Multiply
#define	P6_MMXPS 0x60B30302 //MMX Packed Shift
#define	P6_MMXPO 0x60B30304 //MMX Packed Operations
#define	P6_MMXUO 0x60B30308 //MMX Unpacked Operations
#define	P6_MMXPL 0x60B30310 //MMX Packed Logical
#define	P6_INSTR 0x60C00300 //Instructions Retired
#define	P6_FPOPS 0x60C10100 //FP operations retired (COUNTER 0 ONLY)
#define	P6_UOPSR 0x60C20300 //Micro-Ops Retired
#define	P6_BRRET 0x60C40300 //Branch Instructions Retired
#define	P6_BRMSR 0x60C50300 //Branch Mispredictions Retired
#define	P6_MASKD 0x60C60300 //Clocks while interrupts masked
#define	P6_MSKPN 0x60C70300 //Clocks while interrupt is pending
#define	P6_HWINT 0x60C80300 //Hardware Interrupts Received
#define	P6_BTAKR 0x60C90300 //Taken Branch Retired
#define	P6_BTAKM 0x60CA0300 //Taken Branch Mispredictions
#define	P6_FPMMX 0x60CC0301 //Transitions from Floating Point to MMX
#define	P6_MMXFP 0x60CC0300 //Transitions from MMX to Floating Point
#define	P6_SIMDA 0x60CD0300 //SIMD Assists (EMMS Instructions Executed)
#define	P6_MMXIR 0x60CE0300 //MMX Instructions Retired
#define	P6_SAISR 0x60CF0300 //Saturated Arithmetic Instructions Retired
#define	P6_INSTD 0x60D00300 //Instructions Decoded
#define	P6_NPRTL 0x60D20300 //Renaming Stalls
#define	P6_SRSES 0x60D40301 //Segment Rename Stalls - ES
#define	P6_SRSDS 0x60D40302 //Segment Rename Stalls - DS
#define	P6_SRSFS 0x60D40304 //Segment Rename Stalls - FS
#define	P6_SRSGS 0x60D40308 //Segment Rename Stalls - GS
#define	P6_SRSXS 0x60D4030F //Segment Rename Stalls - ES DS FS GS
#define	P6_SRNES 0x60D50301 //Segment Renames - ES
#define	P6_SRNDS 0x60D50302 //Segment Renames - DS
#define	P6_SRNFS 0x60D50304 //Segment Renames - FS
#define	P6_SRNGS 0x60D50308 //Segment Renames - GS
#define	P6_SRNXS 0x60D5030F //Segment Renames - ES DS FS GS
#define	P6_BRDEC 0x60E00300 //Branch Instructions Decoded
#define	P6_BTBMS 0x60E20301 //BTB Misses
#define	P6_RETDC 0x60E40300 //Bogus Branches
#define	P6_BACLR 0x60E60300 //BACLEARS Asserted (Testing)






// INTEL
#define PENTIUM_FAMILY	  5	// define for pentium
#define PENTIUMPRO_FAMILY 6	// define for pentium pro
#define PENTIUM4_FAMILY   15	// define for pentium 4


// AMD
#define K6_FAMILY	       5	
#define K8_FAMILY           6	
#define EXTENDED_FAMILY   15  // AMD 64 and AMD Opteron

#endif // P5P6PERFORMANCECOUNTERS_H