|
Packit |
577717 |
/* $Id: gen-event-codes.c,v 1.7.2.2 2007/02/11 20:15:03 mikpe Exp $
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* Generate symbolic constants for performance counter events.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* Copyright (C) 2003-2007 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__)
|
|
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 |
#if defined(__arm__)
|
|
Packit |
577717 |
print_cpu_type(PERFCTR_ARM_XSC1);
|
|
Packit |
577717 |
#endif
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|