version 1.1, 1996/08/08 18:47:03 |
version 1.2, 1996/08/14 03:02:52 |
|
|
#include <sys/stat.h> |
#include <sys/stat.h> |
#include <sys/ioctl.h> |
#include <sys/ioctl.h> |
#include <fcntl.h> |
#include <fcntl.h> |
|
#include <machine/cpu.h> |
#include <machine/pctr.h> |
#include <machine/pctr.h> |
|
|
char *progname; |
char *progname; |
|
|
|
|
for (i = 0; i < PCTR_NUM; i++) |
for (i = 0; i < PCTR_NUM; i++) |
printf (" ctr%d = %16qd [%c%c%c %02x (%s)]\n", i, st.pctr_hwc[i], |
printf (" ctr%d = %16qd [%c%c%c %02x (%s)]\n", i, st.pctr_hwc[i], |
(st.pctr_fn[i] & PCTR_C) ? 'c' : 'e', |
(st.pctr_fn[i] & P5CTR_C) ? 'c' : 'e', |
(st.pctr_fn[i] & PCTR_U) ? 'u' : '-', |
(st.pctr_fn[i] & P5CTR_U) ? 'u' : '-', |
(st.pctr_fn[i] & PCTR_K) ? 'k' : '-', |
(st.pctr_fn[i] & P5CTR_K) ? 'k' : '-', |
(st.pctr_fn[i] & 0x3f), |
(st.pctr_fn[i] & 0x3f), |
(((st.pctr_fn[i] & 0x3f) < pctr_name_size |
(((st.pctr_fn[i] & 0x3f) < pctr_name_size |
&& pctr_name[st.pctr_fn[i] & 0x3f]) |
&& pctr_name[st.pctr_fn[i] & 0x3f]) |
|
|
} |
} |
|
|
static void |
static void |
setctr (int ctr, u_short val) |
setctr (int ctr, u_int val) |
{ |
{ |
int fd; |
int fd; |
|
|
|
|
u_int ctr; |
u_int ctr; |
char *cp; |
char *cp; |
u_short fn; |
u_short fn; |
|
pctrval id = __cpuid (); |
|
|
|
if (__hasp6ctr (id)) { |
|
fprintf (stderr, "Pentium Pro not supported\n"); |
|
exit (1); |
|
} |
|
|
if (progname = strrchr (argv[0], '/')) |
if (progname = strrchr (argv[0], '/')) |
progname++; |
progname++; |
else |
else |
|
|
for (cp = argv[3]; *cp; cp++) { |
for (cp = argv[3]; *cp; cp++) { |
switch (*cp) { |
switch (*cp) { |
case 'c': |
case 'c': |
fn |= PCTR_C; |
fn |= P5CTR_C; |
break; |
break; |
case 'e': |
case 'e': |
fn &= ~PCTR_C; |
fn &= ~P5CTR_C; |
break; |
break; |
case 'k': |
case 'k': |
fn |= PCTR_K; |
fn |= P5CTR_K; |
break; |
break; |
case 'u': |
case 'u': |
fn |= PCTR_U; |
fn |= P5CTR_U; |
break; |
break; |
default: |
default: |
usage (); |
usage (); |
|
|
fn = strtoul (argv[3], NULL, 16); |
fn = strtoul (argv[3], NULL, 16); |
if (fn & ~0x3f) |
if (fn & ~0x3f) |
usage (); |
usage (); |
fn |= PCTR_K | PCTR_U; |
fn |= P5CTR_K | P5CTR_U; |
} |
} |
setctr (ctr, fn); |
setctr (ctr, fn); |
} |
} |