Blame src/perfctr-2.7.x/usr.lib/ppc.h

Packit Service a1973e
/* $Id: ppc.h,v 1.2 2005/04/09 10:25:47 mikpe Exp $
Packit Service a1973e
 * PPC32-specific code for performance counters library.
Packit Service a1973e
 *
Packit Service a1973e
 * Copyright (C) 2004  Mikael Pettersson
Packit Service a1973e
 */
Packit Service a1973e
#ifndef __LIB_PERFCTR_PPC_H
Packit Service a1973e
#define __LIB_PERFCTR_PPC_H
Packit Service a1973e
Packit Service a1973e
static __inline__ unsigned long get_tbl(void)
Packit Service a1973e
{
Packit Service a1973e
    unsigned long tbl;
Packit Service a1973e
    asm volatile("mftb %0" : "=r" (tbl));
Packit Service a1973e
    return tbl;
Packit Service a1973e
}
Packit Service a1973e
#define rdtscl(x)	do { (x) = get_tbl(); } while(0)
Packit Service a1973e
Packit Service a1973e
#define SPRN_PVR	0x11F
Packit Service a1973e
#define PVR_VER(pvr)	(((pvr) >> 16) & 0xFFFF)
Packit Service a1973e
Packit Service a1973e
#define SPRN_UPMC1	0x3A9
Packit Service a1973e
#define SPRN_UPMC2	0x3AA
Packit Service a1973e
#define SPRN_UPMC3	0x3AD
Packit Service a1973e
#define SPRN_UPMC4	0x3AE
Packit Service a1973e
#define SPRN_UPMC5	0x3A1
Packit Service a1973e
#define SPRN_UPMC6	0x3A2
Packit Service a1973e
Packit Service a1973e
#define __stringify_1(x)	#x
Packit Service a1973e
#define __stringify(x)		__stringify_1(x)
Packit Service a1973e
#define mfspr(rn)	({unsigned int rval; \
Packit Service a1973e
			asm volatile("mfspr %0," __stringify(rn) \
Packit Service a1973e
				: "=r" (rval)); rval; })
Packit Service a1973e
Packit Service a1973e
static __inline__ unsigned int read_pmc(unsigned int pmc)
Packit Service a1973e
{
Packit Service a1973e
    switch( pmc ) {
Packit Service a1973e
      default: /* impossible, but silences gcc warning */
Packit Service a1973e
      case 0:
Packit Service a1973e
	return mfspr(SPRN_UPMC1);
Packit Service a1973e
      case 1:
Packit Service a1973e
	return mfspr(SPRN_UPMC2);
Packit Service a1973e
      case 2:
Packit Service a1973e
	return mfspr(SPRN_UPMC3);
Packit Service a1973e
      case 3:
Packit Service a1973e
	return mfspr(SPRN_UPMC4);
Packit Service a1973e
      case 4:
Packit Service a1973e
	return mfspr(SPRN_UPMC5);
Packit Service a1973e
      case 5:
Packit Service a1973e
	return mfspr(SPRN_UPMC6);
Packit Service a1973e
    }
Packit Service a1973e
}
Packit Service a1973e
#define rdpmcl(pmc,x)	do { (x) = read_pmc((pmc)); } while(0)
Packit Service a1973e
Packit Service a1973e
#define vperfctr_has_rdpmc(vperfctr)	((vperfctr)->have_rdpmc)
Packit Service a1973e
Packit Service a1973e
extern void perfctr_info_cpu_init(struct perfctr_info*);
Packit Service a1973e
Packit Service a1973e
#endif /* __LIB_PERFCTR_PPC_H */