Blame src/perfctr-2.7.x/usr.lib/event_set_centaur.c

Packit 577717
/* $Id: event_set_centaur.c,v 1.1 2003/02/16 21:08:54 mikpe Exp $
Packit 577717
 * Performance counter event descriptions for Centaur chips:
Packit 577717
 * IDT WinChip C6/2/3 and VIA C3.
Packit 577717
 *
Packit 577717
 * Copyright (C) 2003  Mikael Pettersson
Packit 577717
 *
Packit 577717
 * References
Packit 577717
 * ----------
Packit 577717
 * [WinChip C6] "WinChip C6 Processor Data Sheet".
Packit 577717
 * [WinChip 2A] "WinChip 2 Processor Version A Data Sheet".
Packit 577717
 * [WinChip 3] "WinChip 3 Processor Data Sheet".
Packit 577717
 * (at http://www.centtech.com/)
Packit 577717
 *
Packit 577717
 * [VIA C3] "VIA C3 Samuel 2 Processor Datasheet", Ver. 1.03, April 2001.
Packit 577717
 * Note: The C3 was originally called "Cyrix III", but it is a Centaur
Packit 577717
 * design developed as a replacement for Cyrix' "Joshua".
Packit 577717
 * (at http://www.viatech.com/)
Packit 577717
 */
Packit 577717
#include <stddef.h>	/* for NULL */
Packit 577717
#include "libperfctr.h"
Packit 577717
#include "event_set.h"
Packit 577717
Packit 577717
/*
Packit 577717
 * Centaur WinChip C6 events.
Packit 577717
 * Note: The manual lists the codes in decimal, not hex as done here.
Packit 577717
 */
Packit 577717
Packit 577717
static const struct perfctr_event wcc6_events[] = {
Packit 577717
    { 0x00, 0x3, NULL, "INTERNAL_CLOCKS" },
Packit 577717
    { 0x01, 0x3, NULL, "VALID_CYCLES_REACHING_WRITEBACKS" },
Packit 577717
    { 0x02, 0x3, NULL, "X86_INSTRUCTIONS" },
Packit 577717
    { 0x47, 0x3, NULL, "DATA_READ_CACHE_MISSES" },
Packit 577717
    { 0x4A, 0x3, NULL, "DATA_WRITE_CACHE_MISSES" },
Packit 577717
    { 0x63, 0x3, NULL, "INSTRUCTION_FETCH_CACHE_MISSES" },
Packit 577717
};
Packit 577717
Packit 577717
const struct perfctr_event_set perfctr_wcc6_event_set = {
Packit 577717
    .cpu_type = PERFCTR_X86_WINCHIP_C6,
Packit 577717
    .event_prefix = "WCC6_",
Packit 577717
    .include = NULL,
Packit 577717
    .nevents = ARRAY_SIZE(wcc6_events),
Packit 577717
    .events = wcc6_events,
Packit 577717
};
Packit 577717
Packit 577717
/*
Packit 577717
 * Centaur WinChip 2 and 3 events.
Packit 577717
 * Note: The manual lists the codes in decimal, not hex as done here.
Packit 577717
 */
Packit 577717
Packit 577717
static const struct perfctr_event wc2_events[] = {
Packit 577717
    { 0x00, 0x3, NULL, "DATA_READ" },
Packit 577717
    { 0x01, 0x3, NULL, "DATA_WRITE" },
Packit 577717
    { 0x02, 0x3, NULL, "DATA_TLB_MISS" },
Packit 577717
    { 0x03, 0x3, NULL, "DATA_READ_CACHE_MISS" },
Packit 577717
    { 0x04, 0x3, NULL, "DATA_WRITE_CACHE_MISS" },
Packit 577717
    { 0x06, 0x3, NULL, "DATA_CACHE_WRITEBACKS" },
Packit 577717
    { 0x08, 0x3, NULL, "DATA_CACHE_SNOOP_HITS" },
Packit 577717
    { 0x09, 0x3, NULL, "PUSH_PUSH_POP_POP_PAIRING" },
Packit 577717
    { 0x0B, 0x3, NULL, "MISALIGNED_DATA_MEMORY_NOT_IO" },
Packit 577717
    { 0x0C, 0x3, NULL, "CODE_READ" },
Packit 577717
    { 0x0D, 0x3, NULL, "CODE_TLB_MISS" },
Packit 577717
    { 0x0E, 0x3, NULL, "INSTRUCTION_FETCH_CACHE_MISS" },
Packit 577717
    { 0x13, 0x3, NULL, "BHT_HITS" },
Packit 577717
    { 0x14, 0x3, NULL, "BHT_CANDIDATE" },
Packit 577717
    { 0x16, 0x3, NULL, "INSTRUCTIONS_EXECUTED" },
Packit 577717
    { 0x17, 0x3, NULL, "INSTRUCTIONS_IN_PIPE_2" },
Packit 577717
    { 0x18, 0x3, NULL, "BUS_UTILIZATION" },
Packit 577717
    { 0x1D, 0x3, NULL, "IO_READ_OR_WRITE_CYCLE" },
Packit 577717
    { 0x28, 0x3, NULL, "DATA_READ_OR_DATA_WRITE" },
Packit 577717
    { 0x2B, 0x1, NULL, "MMX_INSTRUCTIONS_U_PIPE" },
Packit 577717
    { 0x2B, 0x2, NULL, "MMX_INSTRUCTIONS_V_PIPE" },
Packit 577717
    { 0x37, 0x1, NULL, "RETURNS_PREDICTED_INCORRECTLY" },
Packit 577717
    { 0x37, 0x2, NULL, "RETURNS_PREDICTED_CORRECTLY" },
Packit 577717
    { 0x3F, 0x3, NULL, "INTERNAL_CLOCKS" },
Packit 577717
};
Packit 577717
Packit 577717
const struct perfctr_event_set perfctr_wc2_event_set = {
Packit 577717
    .cpu_type = PERFCTR_X86_WINCHIP_2,
Packit 577717
    .event_prefix = "WC2_",
Packit 577717
    .include = NULL,
Packit 577717
    .nevents = ARRAY_SIZE(wc2_events),
Packit 577717
    .events = wc2_events,
Packit 577717
};
Packit 577717
Packit 577717
/*
Packit 577717
 * VIA C3 events.
Packit 577717
 * This processor is a Centaur design, tweaked to look like a Celeron.
Packit 577717
 * Its perfctr MSRs have the same addresses as in the P6, but PERFCTR0
Packit 577717
 * is an alias for the TSC and EVNTSEL0 is read-only. It appears that
Packit 577717
 * rdpmc(0) returns the TSC truncated to 40 bits. Only EVNTSEL1 and
Packit 577717
 * PERFCTR1 can be used. EVNTSEL1 has a different format than in P6: the
Packit 577717
 * event selection field is 9 bits, and no other fields are defined.
Packit 577717
 * The data sheet only lists the three events defined below.
Packit 577717
 */
Packit 577717
Packit 577717
static const struct perfctr_event vc3_events[] = {
Packit 577717
    { 0x079, 0x2, NULL, "INTERNAL_CLOCKS" },
Packit 577717
    { 0x0C0, 0x2, NULL, "INSTRUCTIONS_EXECUTED" },
Packit 577717
    { 0x1C0, 0x2, NULL, "INSTRUCTIONS_EXECUTED_AND_STRING_ITERATIONS" },
Packit 577717
};
Packit 577717
Packit 577717
const struct perfctr_event_set perfctr_vc3_event_set = {
Packit 577717
    .cpu_type = PERFCTR_X86_VIA_C3,
Packit 577717
    .event_prefix = "VC3_",
Packit 577717
    .include = NULL,
Packit 577717
    .nevents = ARRAY_SIZE(vc3_events),
Packit 577717
    .events = vc3_events,
Packit 577717
};