1/* $NetBSD: pmc_i386.c,v 1.3 2002/08/09 10:13:07 wiz Exp $ */ 2 3/* 4 * Copyright (c) 2001, 2002 Wasabi Systems, Inc. 5 * All rights reserved. 6 * 7 * Written by Frank van der Linden and Jason R. Thorpe for 8 * Wasabi Systems, Inc. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed for the NetBSD Project by 21 * Wasabi Systems, Inc. 22 * 4. The name of Wasabi Systems, Inc. may not be used to endorse 23 * or promote products derived from this software without specific prior 24 * written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39#include <sys/cdefs.h> 40__RCSID("$NetBSD$"); 41 42#include <sys/param.h> 43#include <pmc.h> 44 45#include <machine/specialreg.h> 46 47#include "pmc_private.h" 48 49static const struct pmc_event i586_pmc_evids[] = { 50 { "tlb-data-miss", PMC5_DATA_TLB_MISS }, 51 { "tlb-ins-miss", PMC5_INST_TLB_MISS }, 52 { "l1cache-ins-miss", PMC5_INST_CACHE_MISS }, 53 { "l1cache-data-miss", PMC5_DATA_RW_MISS }, 54 { "l1cache-data-miss-read", PMC5_DATA_READ_MISS }, 55 { "l1cache-data-miss-write", PMC5_DATA_WRITE_MISS }, 56 { "l1cache-writeback", PMC5_DATA_LINES_WBACK }, 57 { "l1cache-writeback-hit", PMC5_WRITE_M_E }, 58 { "l2cache-data-snoop", PMC5_DATA_CACHE_SNOOP }, 59 { "l2cache-data-snoop-hit", PMC5_DATA_CACHE_SNOOP_HIT }, 60 { "mem-read", PMC5_DATA_READ }, 61 { "mem-write", PMC5_DATA_WRITE }, 62 { "mem-access", PMC5_DATA_RW }, 63 { "mem-access-both-pipes", PMC5_MEM_ACCESS_BOTH_PIPES }, 64 { "mem-bank-conflicts", PMC5_BANK_CONFLICTS }, 65 { "mem-misalign-ref", PMC5_MISALIGNED_DATA }, 66 { "mem-uncached-read", PMC5_NONCACHE_MEM_READ }, 67 { "seg-load-any", PMC5_SEGMENT_REG_LOAD }, 68 { "branch", PMC5_BRANCHES }, 69 { "branch-btb-hit", PMC5_BTB_HITS }, 70 { "branch-taken", PMC5_BRANCH_TAKEN }, 71 { "ins-read", PMC5_INST_READ }, 72 { "ins-pipeline-flush", PMC5_PIPELINE_FLUSH }, 73 { "ins-executed", PMC5_INST_EXECUTED }, 74 { "ins-executed-vpipe", PMC5_INST_EXECUTED_V_PIPE }, 75 { "ins-stall-agi", PMC5_AGI_STALL }, 76 { "ins-stall-write", PMC5_WRITE_BACKUP_STALL }, 77 { "ins-stall-data", PMC5_DATA_READ_STALL }, 78 { "ins-stall-writeline", PMC5_WRITE_E_M_STALL }, 79 { "bus-utilization", PMC5_BUS_UTILIZATION }, 80 { "bus-locked", PMC5_LOCKED_BUS }, 81 { "bus-io-cycle", PMC5_IO_CYCLE }, 82 { "fpu-flops", PMC5_FLOPS }, 83 { "int-hw", PMC5_HARDWARE_INTR }, 84 { "break-match0", PMC5_BP0_MATCH }, 85 { "break-match1", PMC5_BP1_MATCH }, 86 { "break-match2", PMC5_BP2_MATCH }, 87 { "break-match3", PMC5_BP3_MATCH }, 88 89 { NULL, 0 }, 90}; 91 92static const struct pmc_event i686_pmc_evids[] = { 93 { "mem-refs", PMC6_DATA_MEM_REFS }, 94 { "l1cache-lines", PMC6_DCU_LINES_IN }, 95 { "l1cache-mlines", PMC6_DCU_M_LINES_IN }, 96 { "l1cache-mlines-evict", PMC6_DCU_M_LINES_OUT }, 97 { "l1cache-miss-wait", PMC6_DCU_MISS_OUTSTANDING }, 98 { "ins-fetch", PMC6_IFU_IFETCH }, 99 { "ins-fetch-misses", PMC6_IFU_IFETCH_MISS }, 100 { "itlb-misses", PMC6_IFU_IFETCH_MISS }, 101 { "insfetch-mem-stall", PMC6_IFU_MEM_STALL }, 102 { "insfetch-decode-stall", PMC6_ILD_STALL }, 103 { "l2cache-insfetch", 104 PMC6_L2_IFETCH | __PMC_UNIT(0x0f) }, 105 { "l2cache-data-loads", 106 PMC6_L2_LD | __PMC_UNIT(0x0f) }, 107 { "l2cache-data-stores", 108 PMC6_L2_ST | __PMC_UNIT(0x0f) }, 109 { "l2cache-lines", PMC6_L2_LINES_IN }, 110 { "l2cache-lines-evict", PMC6_L2_LINES_OUT }, 111 { "l2cache-mlines", PMC6_L2_M_LINES_INM }, 112 { "l2cache-mlines-evict", 113 PMC6_L2_M_LINES_OUTM | __PMC_UNIT(0x0f) }, 114 { "l2cache-reqs", PMC6_L2_RQSTS }, 115 { "l2cache-addr-strobes", PMC6_L2_ADS }, 116 { "l2cache-data-busy", PMC6_L2_DBUS_BUSY }, 117 { "l2cache-data-busy-read", PMC6_L2_DBUS_BUSY_RD }, 118 { "bus-drdy-clocks-self", PMC6_BUS_DRDY_CLOCKS }, 119 { "bus-drdy-clocks-any", 120 PMC6_BUS_DRDY_CLOCKS | __PMC_UNIT(0x20) }, 121 { "bus-lock-clocks-self", PMC6_BUS_LOCK_CLOCKS }, 122 { "bus-lock-clocks-any", 123 PMC6_BUS_LOCK_CLOCKS | __PMC_UNIT(0x20) }, 124 { "bus-req-outstanding-self", PMC6_BUS_REQ_OUTSTANDING }, 125 { "bus-req-outstanding-any", 126 PMC6_BUS_REQ_OUTSTANDING | __PMC_UNIT(0x20) }, 127 { "bus-burst-reads-self", PMC6_BUS_TRAN_BRD }, 128 { "bus-burst-reads-any", 129 PMC6_BUS_TRAN_BRD | __PMC_UNIT(0x20) }, 130 { "bus-read-for-ownership-self",PMC6_BUS_TRAN_RFO }, 131 { "bus-read-for-ownership-any", 132 PMC6_BUS_TRAN_RFO | __PMC_UNIT(0x20) }, 133 { "bus-write-back-self", PMC6_BUS_TRANS_WB }, 134 { "bus-write-back-any", 135 PMC6_BUS_TRANS_WB | __PMC_UNIT(0x20) }, 136 { "bus-ins-fetches-self", PMC6_BUS_TRAN_IFETCH }, 137 { "bus-ins-fetches-any", 138 PMC6_BUS_TRAN_IFETCH | __PMC_UNIT(0x20) }, 139 { "bus-invalidates-self", PMC6_BUS_TRAN_INVAL }, 140 { "bus-invalidates-any", 141 PMC6_BUS_TRAN_INVAL | __PMC_UNIT(0x20) }, 142 { "bus-partial-writes-self", PMC6_BUS_TRAN_PWR }, 143 { "bus-partial-writes-any", 144 PMC6_BUS_TRAN_PWR | __PMC_UNIT(0x20) }, 145 { "bus-partial-trans-self", PMC6_BUS_TRANS_P }, 146 { "bus-partial-trans-any", 147 PMC6_BUS_TRANS_P | __PMC_UNIT(0x20) }, 148 { "bus-io-trans-self", PMC6_BUS_TRANS_IO }, 149 { "bus-io-trans-any", 150 PMC6_BUS_TRANS_IO | __PMC_UNIT(0x20) }, 151 { "bus-deferred-trans-self", PMC6_BUS_TRAN_DEF }, 152 { "bus-deferred-trans-any", 153 PMC6_BUS_TRAN_DEF | __PMC_UNIT(0x20) }, 154 { "bus-burst-trans-self", PMC6_BUS_TRAN_BURST }, 155 { "bus-burst-trans-any", 156 PMC6_BUS_TRAN_BURST | __PMC_UNIT(0x20) }, 157 { "bus-total-trans-self", PMC6_BUS_TRAN_ANY }, 158 { "bus-total-trans-any", 159 PMC6_BUS_TRAN_ANY | __PMC_UNIT(0x20) }, 160 { "bus-mem-trans-self", PMC6_BUS_TRAN_MEM }, 161 { "bus-mem-trans-any", 162 PMC6_BUS_TRAN_MEM | __PMC_UNIT(0x20) }, 163 { "bus-recv-cycles", PMC6_BUS_DATA_RCV }, 164 { "bus-bnr-cycles", PMC6_BUS_BNR_DRV }, 165 { "bus-hit-cycles", PMC6_BUS_HIT_DRV }, 166 { "bus-hitm-cycles", PMC6_BUS_HITM_DRDV }, 167 { "bus-snoop-stall", PMC6_BUS_SNOOP_STALL }, 168 { "fpu-flops", PMC6_FLOPS }, 169 { "fpu-comp-ops", PMC6_FP_COMP_OPS_EXE }, 170 { "fpu-except-assist", PMC6_FP_ASSIST }, 171 { "fpu-mul", PMC6_MUL }, 172 { "fpu-div", PMC6_DIV }, 173 { "fpu-div-busy", PMC6_CYCLES_DIV_BUSY }, 174 { "mem-sb-blocks", PMC6_LD_BLOCKS }, 175 { "mem-sb-drains", PMC6_SB_DRAINS }, 176 { "mem-misalign-ref", PMC6_MISALIGN_MEM_REF }, 177 { "ins-pref-dispatch-nta", 178 PMC6_EMON_KNI_PREF_DISPATCHED | __PMC_UNIT(0x01) }, 179 { "ins-pref-dispatch-t1", 180 PMC6_EMON_KNI_PREF_DISPATCHED | __PMC_UNIT(0x01) }, 181 { "ins-pref-dispatch-t2", 182 PMC6_EMON_KNI_PREF_DISPATCHED | __PMC_UNIT(0x02) }, 183 { "ins-pref-dispatch-weak", 184 PMC6_EMON_KNI_PREF_DISPATCHED | __PMC_UNIT(0x03) }, 185 { "ins-pref-miss-nta", 186 PMC6_EMON_KNI_PREF_MISS | __PMC_UNIT(0x01) }, 187 { "ins-pref-miss-t1", 188 PMC6_EMON_KNI_PREF_MISS | __PMC_UNIT(0x01) }, 189 { "ins-pref-miss-t2", 190 PMC6_EMON_KNI_PREF_MISS | __PMC_UNIT(0x02) }, 191 { "ins-pref-miss-weak", 192 PMC6_EMON_KNI_PREF_MISS | __PMC_UNIT(0x03) }, 193 { "ins-retired", PMC6_INST_RETIRED }, 194 { "uops-retired", PMC6_UOPS_RETIRED }, 195 { "ins-decoded", PMC6_INST_DECODED }, 196 { "ins-stream-retired-packed-scalar", 197 PMC6_EMON_KNI_INST_RETIRED }, 198 { "ins-stream-retired-scalar", 199 PMC6_EMON_KNI_INST_RETIRED | __PMC_UNIT(0x01) }, 200 { "ins-stream-comp-retired-packed-scalar", 201 PMC6_EMON_KNI_COMP_INST_RET }, 202 { "ins-stream-comp-retired-scalar", 203 PMC6_EMON_KNI_COMP_INST_RET | __PMC_UNIT(0x01) }, 204 { "int-hw", PMC6_HW_INT_RX }, 205 { "int-cycles-masked", PMC6_CYCLES_INT_MASKED }, 206 { "int-cycles-masked-pending", 207 PMC6_CYCLES_INT_PENDING_AND_MASKED }, 208 { "branch-retired", PMC6_BR_INST_RETIRED }, 209 { "branch-miss-retired", PMC6_BR_MISS_PRED_RETIRED }, 210 { "branch-taken-retired", PMC6_BR_TAKEN_RETIRED }, 211 { "branch-taken-mispred-retired", PMC6_BR_MISS_PRED_TAKEN_RET }, 212 { "branch-decoded", PMC6_BR_INST_DECODED }, 213 { "branch-btb-miss", PMC6_BTB_MISSES }, 214 { "branch-bogus", PMC6_BR_BOGUS }, 215 { "branch-baclear", PMC6_BACLEARS }, 216 { "stall-resource", PMC6_RESOURCE_STALLS }, 217 { "stall-partial", PMC6_PARTIAL_RAT_STALLS }, 218 { "seg-loads", PMC6_SEGMENT_REG_LOADS }, 219 { "unhalted-cycles", PMC6_CPU_CLK_UNHALTED }, 220 { "mmx-exec", PMC6_MMX_INSTR_EXEC }, 221 { "mmx-sat-exec", PMC6_MMX_SAT_INSTR_EXEC }, 222 { "mmx-uops-exec", 223 PMC6_MMX_UOPS_EXEC | __PMC_UNIT(0x0f) }, 224 { "mmx-exec-packed-mul", 225 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x01) }, 226 { "mmx-exec-packed-shift", 227 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x02) }, 228 { "mmx-exec-pack-ops", 229 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x04) }, 230 { "mmx-exec-unpack-ops", 231 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x08) }, 232 { "mmx-exec-packed-logical", 233 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x10) }, 234 { "mmx-exec-packed-arith", 235 PMC6_MMX_INSTR_TYPE_EXEC | __PMC_UNIT(0x20) }, 236 { "mmx-trans-mmx-float", PMC6_FP_MMX_TRANS }, 237 { "mmx-trans-float-mmx", 238 PMC6_FP_MMX_TRANS | __PMC_UNIT(0x01) }, 239 { "mmx-assist", PMC6_MMX_ASSIST }, 240 { "mmx-retire", PMC6_MMX_INSTR_RET }, 241 { "seg-rename-stalls-es", 242 PMC6_SEG_RENAME_STALLS | __PMC_UNIT(0x01) }, 243 { "seg-rename-stalls-ds", 244 PMC6_SEG_RENAME_STALLS | __PMC_UNIT(0x02) }, 245 { "seg-rename-stalls-fs", 246 PMC6_SEG_RENAME_STALLS | __PMC_UNIT(0x04) }, 247 { "seg-rename-stalls-gs", 248 PMC6_SEG_RENAME_STALLS | __PMC_UNIT(0x08) }, 249 { "seg-rename-stalls-all", 250 PMC6_SEG_RENAME_STALLS | __PMC_UNIT(0x0f) }, 251 { "seg-rename-es", 252 PMC6_SEG_REG_RENAMES | __PMC_UNIT(0x01) }, 253 { "seg-rename-ds", 254 PMC6_SEG_REG_RENAMES | __PMC_UNIT(0x02) }, 255 { "seg-rename-fs", 256 PMC6_SEG_REG_RENAMES | __PMC_UNIT(0x04) }, 257 { "seg-rename-gs", 258 PMC6_SEG_REG_RENAMES | __PMC_UNIT(0x08) }, 259 { "seg-rename-all", 260 PMC6_SEG_REG_RENAMES | __PMC_UNIT(0x0f) }, 261 { "seg-rename-retire", PMC6_RET_SEG_RENAMES }, 262 263 { NULL, 0 }, 264}; 265 266static const struct pmc_event k7_pmc_evids[] = { 267 { "seg-load-all", 268 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x7f) }, 269 { "seg-load-es", 270 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x01) }, 271 { "seg-load-cs", 272 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x02) }, 273 { "seg-load-ss", 274 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x04) }, 275 { "seg-load-ds", 276 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x08) }, 277 { "seg-load-fs", 278 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x10) }, 279 { "seg-load-gs", 280 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x20) }, 281 { "seg-load-hs", 282 K7_SEGMENT_REG_LOADS | __PMC_UNIT(0x40) }, 283 { "seg-load-stall", K7_SEGMENT_LOAD_STALL }, 284 { "l1cache-access", K7_DATA_CACHE_ACCESS }, 285 { "l1cache-miss", K7_DATA_CACHE_MISS }, 286 { "l1cache-refill", 287 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x1f) }, 288 { "l1cache-refill-invalid", 289 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x01) }, 290 { "l1cache-refill-shared", 291 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x02) }, 292 { "l1cache-refill-exclusive", 293 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x04) }, 294 { "l1cache-refill-owner", 295 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x08) }, 296 { "l1cache-refill-modified", 297 K7_DATA_CACHE_REFILL | __PMC_UNIT(0x10) }, 298 { "l1cache-load", 299 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x1f) }, 300 { "l1cache-load-invalid", 301 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x01) }, 302 { "l1cache-load-shared", 303 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x02) }, 304 { "l1cache-load-exclusive", 305 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x04) }, 306 { "l1cache-load-owner", 307 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x08) }, 308 { "l1cache-load-modified", 309 K7_DATA_CACHE_REFILL_SYSTEM | __PMC_UNIT(0x10) }, 310 { "l1cache-writeback", 311 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x1f) }, 312 { "l1cache-writeback-invalid", 313 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x01) }, 314 { "l1cache-writeback-shared", 315 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x02) }, 316 { "l1cache-writeback-exclusive", 317 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x04) }, 318 { "l1cache-writeback-owner", 319 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x08) }, 320 { "l1cache-writeback-modified", 321 K7_DATA_CACHE_WBACK | __PMC_UNIT(0x10) }, 322 { "l2cache-access", 323 K7_L2_REQUEST | __PMC_UNIT(0xff) }, 324 { "l2cache-tag-read", 325 K7_L2_REQUEST | __PMC_UNIT(0x01) }, 326 { "l2cache-tag-write", 327 K7_L2_REQUEST | __PMC_UNIT(0x02) }, 328 { "l2cache-inst-read", 329 K7_L2_REQUEST | __PMC_UNIT(0x04) }, 330 { "l2cache-inst-load", 331 K7_L2_REQUEST | __PMC_UNIT(0x08) }, 332 { "l2cache-data-store", 333 K7_L2_REQUEST | __PMC_UNIT(0x10) }, 334 { "l2cache-data-loadmem", 335 K7_L2_REQUEST | __PMC_UNIT(0x20) }, 336 { "l2cache-data-write", 337 K7_L2_REQUEST | __PMC_UNIT(0x40) }, 338 { "l2cache-data-move", 339 K7_L2_REQUEST | __PMC_UNIT(0x80) }, 340 { "l2cache-access-busy", K7_L2_REQUEST_BUSY }, 341 { "l2cache-hit", K7_L2_DTLB_HIT }, 342 { "l2cache-miss", K7_L2_DTLB_MISS }, 343 { "mem-misalign-ref", K7_MISALIGNED_DATA_REF }, 344 { "mem-access", K7_SYSTEM_REQUEST }, 345 { "mem-access-uc", 346 K7_SYSTEM_REQUEST_TYPE | __PMC_UNIT(0x01) }, 347 { "mem-access-wc", 348 K7_SYSTEM_REQUEST_TYPE | __PMC_UNIT(0x04) }, 349 { "mem-access-wt", 350 K7_SYSTEM_REQUEST_TYPE | __PMC_UNIT(0x10) }, 351 { "mem-access-wp", 352 K7_SYSTEM_REQUEST_TYPE | __PMC_UNIT(0x20) }, 353 { "mem-access-wb", 354 K7_SYSTEM_REQUEST_TYPE | __PMC_UNIT(0x40) }, 355 { "ins-fetch", K7_IFU_IFETCH }, 356 { "ins-fetch-miss", K7_IFU_IFETCH_MISS }, 357 { "ins-refill-l2", K7_IFU_REFILL_FROM_L2 }, 358 { "ins-refill-mem", K7_IFU_REFILL_FROM_SYSTEM }, 359 { "ins-fetch-stall", K7_IFU_STALL }, 360 { "ins-retired", K7_RETIRED_INST }, 361 { "ins-empty", K7_INSTRUCTION_DECODER_EMPTY }, 362 { "itlb-miss-l1", K7_ITLB_L1_MISS }, 363 { "itlb-miss-l2", K7_ITLB_L2_MISS }, 364 { "ops-retired", K7_RETIRED_OPS }, 365 { "branch-retired", K7_RETIRED_BRANCHES }, 366 { "branch-miss-retired", K7_RETIRED_BRANCH_MISPREDICTED }, 367 { "branch-taken-retired", K7_RETIRED_TAKEN_BRANCH }, 368 { "branch-taken-miss-retired", 369 K7_RETIRED_TAKEN_BRANCH_MISPREDICTED }, 370 { "branch-far-retired", 371 K7_RETIRED_FAR_CONTROL_TRANSFER }, 372 { "branch-resync-retired", K7_RETIRED_RESYNC_BRANCH }, 373 { "branch-near-retired", K7_RETIRED_NEAR_RETURNS }, 374 { "branch-near-miss-retired", 375 K7_RETIRED_NEAR_RETURNS_MISPREDICTED }, 376 { "branch-indirect-miss-retired", 377 K7_RETIRED_INDIRECT_MISPREDICTED }, 378 { "int-hw", K7_HW_INTR_RECV }, 379 { "int-cycles-masked", K7_CYCLES_INT_MASKED }, 380 { "int-cycles-masked-pending", 381 K7_CYCLES_INT_PENDING_AND_MASKED }, 382 { "break-match0", K7_BP0_MATCH }, 383 { "break-match1", K7_BP1_MATCH }, 384 { "break-match2", K7_BP2_MATCH }, 385 { "break-match3", K7_BP3_MATCH }, 386 387 { NULL, 0 }, 388}; 389 390static const struct pmc_class2evid i386_pmc_classes[] = { 391 { PMC_CLASS_I586, "i586", 392 i586_pmc_evids }, 393 { PMC_TYPE_I586_TSC, "i586 cycle counter", 394 NULL }, 395 { PMC_TYPE_I586_PMCx, "i586 performance counter", 396 NULL }, 397 398 { PMC_CLASS_I686, "i686", 399 i686_pmc_evids }, 400 { PMC_TYPE_I686_TSC, "i686 cycle counter", 401 NULL }, 402 { PMC_TYPE_I686_PMCx, "i686 performance counter", 403 NULL }, 404 405 { PMC_CLASS_K7, "K7", 406 k7_pmc_evids }, 407 { PMC_TYPE_K7_TSC, "K7 cycle counter", 408 NULL }, 409 { PMC_TYPE_K7_PMCx, "K7 performance counter", 410 NULL }, 411 412 { 0, NULL, 413 NULL }, 414}; 415 416const struct pmc_class2evid *_pmc_md_classes = i386_pmc_classes; 417