51 SUBDBG(
"Old native index was %#08x with %#08x mask\n",
tmp, mask );
63 unsigned int *mask_values )
67 SUBDBG(
"Native base event is %#08x with %d masks\n",
tmp, num_mask );
68 for (
i = 0;
i < num_mask;
i++ ) {
69 SUBDBG(
"Mask index is %#08x\n", mask_values[
i] );
82 unsigned int tevent, major, minor;
92 SUBDBG(
"EventCode %#08x is event %d, umask %#x\n", EventCode, major,
101 unsigned int tmp = foo,
i;
105 while ( (
i = (
unsigned int ) ffs( (
int )
tmp ) ) ) {
106 tmp =
tmp ^ ( 1 << (
i - 1 ) );
115static inline unsigned int
119 unsigned int i, code,
tmp = 0;
125 SUBDBG(
"Mask value is %#08x\n", code );
140 memset( &gete, 0,
sizeof ( gete ) );
151 switch ( pfm_error ) {
190 SUBDBG(
"pfm_find_full_event(%s,%p)\n",
name, &event );
193 SUBDBG(
"Full event name found\n" );
201 for (
i = 0;
i <
event.num_masks;
i++ ) {
203 SUBDBG(
"mask index (%d) > max masks (%d)\n",
214 SUBDBG(
"UMASK error, looking for base event only\n" );
228 unsigned int event, umask;
231 memset( &gete, 0,
sizeof ( gete ) );
249 (
"pfm_get_full_event_name(%p(event %d,%s,%d masks),%p,%d): %d -- %s",
264 unsigned int event, umask;
265 char *eventd, **maskd, *
tmp;
268 size_t total_len = 0;
270 memset( &gete, 0,
sizeof ( gete ) );
277 PAPIERROR(
"pfm_get_event_description(%d,%p): %s",
284 maskd = (
char ** ) malloc( gete.
num_masks * sizeof (
char * ) );
285 if ( maskd == NULL ) {
294 PAPIERROR(
"pfm_get_event_mask_description(%d,%d,%p): %s",
297 for ( ;
i >= 0;
i-- )
302 total_len += strlen( maskd[
i] );
305 (
char * ) malloc( strlen( eventd ) + strlen(
", masks:" ) +
314 strcat(
tmp, eventd );
315 strcat(
tmp,
", masks:" );
319 strcat(
tmp, maskd[
i] );
324 tmp = (
char * ) malloc( strlen( eventd ) + 1 );
330 strcat(
tmp, eventd );
333 strncpy( ntv_descr,
tmp, (
size_t ) len );
334 if ( (
int ) strlen(
tmp ) > len - 1 )
347 SUBDBG(
"ENTER %#x\n",EventCode);
362 unsigned int event, umask, num_masks;
375 PAPIERROR(
"pfm_get_num_event_masks(%d,%p): %s", event, &num_masks,
381 SUBDBG(
"This is umask %d of %d\n", umask, num_masks );
391 if ( umask + 1 < (
unsigned int ) ( 1 << num_masks ) ) {
398 int thisbit = ffs( (
int ) umask );
400 SUBDBG(
"First bit is %d in %08x\b\n", thisbit - 1, umask );
401 thisbit = 1 << thisbit;
403 if ( thisbit & ( ( 1 << num_masks ) - 1 ) ) {
418 unsigned int event, umask;
452 SUBDBG(
"pfm_initialize()\n" );
471 PAPIERROR(
"Version mismatch of libpfm: compiled %#x vs. installed %#x\n",
504 SUBDBG(
"pfm_get_num_events(%p)\n", &ncnt );
506 PAPIERROR(
"pfm_get_num_events(%p): %s\n", &ncnt,
510 SUBDBG(
"pfm_get_num_events: %d\n", ncnt );
539 long long escr_addr) {
555 P4_EVENT_TC_DELIVER_MODE,
556 P4_EVENT_BPU_FETCH_REQUEST,
557 P4_EVENT_ITLB_REFERENCE,
558 P4_EVENT_MEMORY_CANCEL,
559 P4_EVENT_MEMORY_COMPLETE,
560 P4_EVENT_LOAD_PORT_REPLAY,
561 P4_EVENT_STORE_PORT_REPLAY,
562 P4_EVENT_MOB_LOAD_REPLAY,
563 P4_EVENT_PAGE_WALK_TYPE,
564 P4_EVENT_BSQ_CACHE_REFERENCE,
565 P4_EVENT_IOQ_ALLOCATION,
566 P4_EVENT_IOQ_ACTIVE_ENTRIES,
567 P4_EVENT_FSB_DATA_ACTIVITY,
568 P4_EVENT_BSQ_ALLOCATION,
569 P4_EVENT_BSQ_ACTIVE_ENTRIES,
570 P4_EVENT_SSE_INPUT_ASSIST,
571 P4_EVENT_PACKED_SP_UOP,
572 P4_EVENT_PACKED_DP_UOP,
573 P4_EVENT_SCALAR_SP_UOP,
574 P4_EVENT_SCALAR_DP_UOP,
575 P4_EVENT_64BIT_MMX_UOP,
576 P4_EVENT_128BIT_MMX_UOP,
579 P4_EVENT_GLOBAL_POWER_EVENTS,
581 P4_EVENT_UOP_QUEUE_WRITES,
582 P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE,
583 P4_EVENT_RETIRED_BRANCH_TYPE,
584 P4_EVENT_RESOURCE_STALL,
590 P4_EVENT_FRONT_END_EVENT,
591 P4_EVENT_EXECUTION_EVENT,
592 P4_EVENT_REPLAY_EVENT,
593 P4_EVENT_INSTR_RETIRED,
594 P4_EVENT_UOPS_RETIRED,
596 P4_EVENT_BRANCH_RETIRED,
597 P4_EVENT_MISPRED_BRANCH_RETIRED,
599 P4_EVENT_MACHINE_CLEAR,
600 P4_EVENT_INSTR_COMPLETED,
604 int eventsel=(escr>>25)&0x3f;
605 int cccrsel=(cccr>>13)&0x7;
610 case 0x1:
if (cccrsel==1) {
611 if (escr_addr>0x3c8) {
613 event_key=P4_EVENT_TC_DELIVER_MODE;
617 event_key=P4_EVENT_RESOURCE_STALL;
621 if (escr_addr<0x3af) {
623 event_key=P4_EVENT_PAGE_WALK_TYPE;
627 event_key=P4_EVENT_UOPS_RETIRED;
631 case 0x2:
if (cccrsel==5) {
632 if (escr_addr<0x3a8) {
634 event_key=P4_EVENT_MEMORY_CANCEL;
637 event_key=P4_EVENT_MACHINE_CLEAR;
639 }
else if (cccrsel==1) {
640 event_key=P4_EVENT_64BIT_MMX_UOP;
641 }
else if (cccrsel==4) {
642 event_key=P4_EVENT_INSTR_RETIRED;
643 }
else if (cccrsel==2) {
644 event_key=P4_EVENT_UOP_TYPE;
647 case 0x3:
if (cccrsel==0) {
648 event_key=P4_EVENT_BPU_FETCH_REQUEST;
651 event_key=P4_EVENT_MOB_LOAD_REPLAY;
654 event_key=P4_EVENT_IOQ_ALLOCATION;
657 event_key=P4_EVENT_MISPRED_BRANCH_RETIRED;
660 event_key=P4_EVENT_X87_ASSIST;
663 case 0x4:
if (cccrsel==2) {
664 if (escr_addr<0x3b0) {
666 event_key=P4_EVENT_LOAD_PORT_REPLAY;
670 event_key=P4_EVENT_RETIRED_BRANCH_TYPE;
674 event_key=P4_EVENT_X87_FP_UOP;
677 event_key=P4_EVENT_RESPONSE;
680 case 0x5:
if (cccrsel==2) {
681 if (escr_addr<0x3b0) {
683 event_key=P4_EVENT_STORE_PORT_REPLAY;
687 event_key=P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE;
691 event_key=P4_EVENT_BSQ_ALLOCATION;
694 event_key=P4_EVENT_TC_MS_XFER;
697 event_key=P4_EVENT_WC_BUFFER;
700 case 0x6:
if (cccrsel==7) {
701 event_key=P4_EVENT_BSQ_ACTIVE_ENTRIES;
704 event_key=P4_EVENT_TC_MISC;
707 event_key=P4_EVENT_SNOOP;
710 event_key=P4_EVENT_BRANCH_RETIRED;
713 case 0x7: event_key=P4_EVENT_INSTR_COMPLETED;
break;
714 case 0x8:
if (cccrsel==2) {
715 event_key=P4_EVENT_MEMORY_COMPLETE;
718 event_key=P4_EVENT_PACKED_SP_UOP;
721 event_key=P4_EVENT_BNR;
724 event_key=P4_EVENT_FRONT_END_EVENT;
727 case 0x9:
if (cccrsel==0) {
728 event_key=P4_EVENT_UOP_QUEUE_WRITES;
731 event_key=P4_EVENT_REPLAY_EVENT;
734 case 0xa: event_key=P4_EVENT_SCALAR_SP_UOP;
break;
735 case 0xc:
if (cccrsel==7) {
736 event_key=P4_EVENT_BSQ_CACHE_REFERENCE;
739 event_key=P4_EVENT_PACKED_DP_UOP;
742 event_key=P4_EVENT_EXECUTION_EVENT;
745 case 0xe: event_key=P4_EVENT_SCALAR_DP_UOP;
break;
746 case 0x13: event_key=P4_EVENT_GLOBAL_POWER_EVENTS;
break;
747 case 0x16: event_key=P4_EVENT_B2B_CYCLES;
break;
748 case 0x17: event_key=P4_EVENT_FSB_DATA_ACTIVITY;
break;
749 case 0x18: event_key=P4_EVENT_ITLB_REFERENCE;
break;
750 case 0x1a:
if (cccrsel==6) {
751 event_key=P4_EVENT_IOQ_ACTIVE_ENTRIES;
754 event_key=P4_EVENT_128BIT_MMX_UOP;
757 case 0x34: event_key= P4_EVENT_SSE_INPUT_ASSIST;
break;
760 pe_event=(escr&0x1ffffff)<<32;
761 pe_event|=(cccr&0xfffff000);
762 pe_event|=(((
long long)(event_key))<<57);
782#if defined(__powerpc__)
790 SUBDBG(
"Stuffing native event index (code %#x, raw code %#x) into events array.\n",
797 memset( &inp, 0,
sizeof ( inp ) );
798 memset( &outp, 0,
sizeof ( outp ) );
806 SUBDBG(
"Error: pfm_dispatch_events returned: %d\n", ret);
#define PAPI_NTV_ENUM_UMASK_COMBOS
#define PAPI_VENDOR_INTEL
#define PAPI_NTV_ENUM_UMASKS
#define PAPI_2MAX_STR_LEN
static long long values[NUM_EVENTS]
#define PFM_VERSION_MAJOR(x)
#define PFM_VERSION_MINOR(x)
#define PAPI_NATIVE_AND_MASK
Return codes and api definitions.
#define SUBDBG(format, args...)
void PAPIERROR(char *format,...)
unsigned int PAPI_NATIVE_EVENT_AND_MASK
int _papi_libpfm_init(papi_vector_t *my_vector, int cidx)
int _perfmon2_pfm_pmu_type
int _papi_libpfm_ntv_code_to_name(unsigned int EventCode, char *ntv_name, int len)
int _papi_libpfm_ntv_enum_events(unsigned int *EventCode, int modifier)
int _papi_libpfm_shutdown(void)
int _papi_libpfm_ntv_name_to_code(const char *name, unsigned int *event_code)
int _papi_libpfm_ntv_code_to_info(unsigned int EventCode, PAPI_event_info_t *info)
static int encode_native_event_raw(unsigned int event, unsigned int mask)
int _papi_libpfm_ntv_code_to_descr(unsigned int EventCode, char *ntv_descr, int len)
int _pfm_decode_native_event(unsigned int EventCode, unsigned int *event, unsigned int *umask)
unsigned int PAPI_NATIVE_UMASK_AND_MASK
static int encode_native_event(unsigned int event, unsigned int num_mask, unsigned int *mask_values)
unsigned int PAPI_NATIVE_EVENT_SHIFT
unsigned int PAPI_NATIVE_UMASK_SHIFT
long long generate_p4_event(long long escr, long long cccr, long long escr_addr)
pfmlib_event_t pfm_register_t
static unsigned int convert_pfm_masks(pfmlib_event_t *gete)
int prepare_umask(unsigned int foo, unsigned int *values)
unsigned int _pfm_convert_umask(unsigned int event, unsigned int umask)
unsigned int PAPI_NATIVE_UMASK_MAX
int _papi_libpfm_ntv_code_to_bits(unsigned int EventCode, hwd_register_t *bits)
int _papi_libpfm_error(int pfm_error)
int _papi_libpfm_setup_counters(struct perf_event_attr *attr, hwd_register_t *ni_bits)
int _papi_load_preset_table(char *pmu_str, int pmu_type, int cidx)
papi_mdi_t _papi_hwi_system_info
pfm_err_t pfm_get_pmu_name(char *name, int maxlen)
#define PFMLIB_ERR_FEATCOMB
char * pfm_strerror(int code)
pfm_err_t pfm_dispatch_events(pfmlib_input_param_t *p, void *model_in, pfmlib_output_param_t *q, void *model_out)
pfm_err_t pfm_get_event_code_counter(unsigned int idx, unsigned int cnt, int *code)
#define PFMLIB_ERR_BADHOST
#define PFMLIB_ERR_IRRALIGN
pfm_err_t pfm_get_num_events(unsigned int *count)
#define PFMLIB_ERR_EVTSET
static int pfm_regmask_set(pfmlib_regmask_t *h, unsigned int b)
pfm_err_t pfm_get_event_mask_description(unsigned int event_idx, unsigned int mask_idx, char **desc)
#define PFMLIB_ERR_EVTINCOMP
pfm_err_t pfm_get_full_event_name(pfmlib_event_t *e, char *name, size_t maxlen)
pfm_err_t pfm_get_event_name(unsigned int idx, char *name, size_t maxlen)
#define PFMLIB_ERR_NOTFOUND
#define PFMLIB_ERR_DRRTOOMANY
#define PFMLIB_ERR_DRRINVAL
pfm_err_t pfm_get_event_description(unsigned int idx, char **str)
#define PFMLIB_ERR_TOOMANY
#define PFMLIB_ERR_IRRTOOBIG
pfm_err_t pfm_initialize(void)
#define PFMLIB_ERR_NOINIT
pfm_err_t pfm_find_full_event(const char *str, pfmlib_event_t *e)
#define PFMLIB_ERR_IRRTOOMANY
#define PFMLIB_ERR_NOASSIGN
pfm_err_t pfm_get_pmu_type(int *type)
#define PFMLIB_ERR_IRREMPTY
#define PFMLIB_ERR_IRRINVAL
pfm_err_t pfm_get_num_event_masks(unsigned int event_idx, unsigned int *count)
#define PFMLIB_ERR_IRRFLAGS
#define PFMLIB_ERR_NOTSUPP
#define PFMLIB_ERR_EVTMANY
pfm_err_t pfm_get_event_mask_code(unsigned int idx, unsigned int mask_idx, unsigned int *code)
pfm_err_t pfm_get_version(unsigned int *version)
pfm_err_t pfm_find_event(const char *str, unsigned int *idx)
pfm_err_t pfm_get_num_counters(unsigned int *num)
char support_version[PAPI_MIN_STR_LEN]
char symbol[PAPI_HUGE_STR_LEN]
char long_descr[PAPI_HUGE_STR_LEN]
PAPI_component_info_t cmp_info
unsigned int unit_masks[PFMLIB_MAX_MASKS_PER_EVENT]
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
unsigned long long reg_value
unsigned long long reg_addr