Blame src/perfctr-2.7.x/usr.lib/gen-event-codes.c

Packit 577717
/* $Id: gen-event-codes.c,v 1.9 2005/03/23 02:02:54 mikpe Exp $
Packit 577717
 *
Packit 577717
 * Generate symbolic constants for performance counter events.
Packit 577717
 *
Packit 577717
 * Copyright (C) 2003-2004  Mikael Pettersson
Packit 577717
 */
Packit 577717
#include <stdio.h>
Packit 577717
#include <stdlib.h>	/* for exit() */
Packit 577717
#include "libperfctr.h"
Packit 577717
Packit 577717
/* detect sharing in a DAG of immutable nodes */
Packit 577717
static int test_and_set(const struct perfctr_event_set *event_set)
Packit 577717
{
Packit 577717
    static const struct perfctr_event *marked[32];
Packit 577717
    unsigned int i;
Packit 577717
    const struct perfctr_event *events = event_set->events;
Packit 577717
Packit 577717
    for(i = 0; i < sizeof(marked)/sizeof(marked[0]); ++i) {
Packit 577717
	if( !marked[i] ) {
Packit 577717
	    marked[i] = events;
Packit 577717
	    return 0;
Packit 577717
	}
Packit 577717
	if( marked[i] == events )
Packit 577717
	    return 1;
Packit 577717
    }
Packit 577717
    fprintf(stderr, "gen-event-set: too many distinct event sets\n");
Packit 577717
    exit(1);
Packit 577717
    /*NOTREACHED*/
Packit 577717
}
Packit 577717
Packit 577717
static void print_event_set(const struct perfctr_event_set *event_set)
Packit 577717
{
Packit 577717
    unsigned int i;
Packit 577717
Packit 577717
    if( test_and_set(event_set) )
Packit 577717
	return;
Packit 577717
    if( event_set->include )
Packit 577717
	print_event_set(event_set->include);
Packit 577717
    printf("\n");
Packit 577717
    for(i = 0; i < event_set->nevents; ++i)
Packit 577717
	printf("#define %s%s\t0x%02X\n",
Packit 577717
	       event_set->event_prefix,
Packit 577717
	       event_set->events[i].name,
Packit 577717
	       event_set->events[i].evntsel);
Packit 577717
}
Packit 577717
Packit 577717
static void print_cpu_type(unsigned int cpu_type)
Packit 577717
{
Packit 577717
    print_event_set(perfctr_cpu_event_set(cpu_type));
Packit 577717
}
Packit 577717
Packit 577717
int main(void)
Packit 577717
{
Packit 577717
    printf("/* automatically generated, do not edit */\n");
Packit 577717
#if defined(__i386__)
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_P5);
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_P5MMX);
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_P6);
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_PII);
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_PIII);
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_PENTM);
Packit 577717
    print_cpu_type(PERFCTR_X86_CYRIX_MII);
Packit 577717
    print_cpu_type(PERFCTR_X86_VIA_C3);
Packit 577717
    print_cpu_type(PERFCTR_X86_WINCHIP_C6);
Packit 577717
    print_cpu_type(PERFCTR_X86_WINCHIP_2);
Packit 577717
    print_cpu_type(PERFCTR_X86_AMD_K7);
Packit 577717
#endif
Packit 577717
#if defined(__i386__) || defined(__x86_64__)
Packit 577717
    print_cpu_type(PERFCTR_X86_INTEL_P4M3);
Packit 577717
    print_cpu_type(PERFCTR_X86_AMD_K8);
Packit 577717
    print_cpu_type(PERFCTR_X86_AMD_K8C);
Packit 577717
#endif
Packit 577717
#if defined(__powerpc__) && !defined(PPC64)
Packit 577717
    print_cpu_type(PERFCTR_PPC_604);
Packit 577717
    print_cpu_type(PERFCTR_PPC_604e);
Packit 577717
    print_cpu_type(PERFCTR_PPC_750);
Packit 577717
#endif
Packit 577717
    return 0;
Packit 577717
}