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

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