539 {
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554 enum P4_EVENTS {
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,
577 P4_EVENT_X87_FP_UOP,
578 P4_EVENT_TC_MISC,
579 P4_EVENT_GLOBAL_POWER_EVENTS,
580 P4_EVENT_TC_MS_XFER,
581 P4_EVENT_UOP_QUEUE_WRITES,
582 P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE,
583 P4_EVENT_RETIRED_BRANCH_TYPE,
584 P4_EVENT_RESOURCE_STALL,
585 P4_EVENT_WC_BUFFER,
586 P4_EVENT_B2B_CYCLES,
587 P4_EVENT_BNR,
588 P4_EVENT_SNOOP,
589 P4_EVENT_RESPONSE,
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,
595 P4_EVENT_UOP_TYPE,
596 P4_EVENT_BRANCH_RETIRED,
597 P4_EVENT_MISPRED_BRANCH_RETIRED,
598 P4_EVENT_X87_ASSIST,
599 P4_EVENT_MACHINE_CLEAR,
600 P4_EVENT_INSTR_COMPLETED,
601 };
602
603
604 int eventsel=(escr>>25)&0x3f;
605 int cccrsel=(cccr>>13)&0x7;
606 int event_key=-1;
607 long long pe_event;
608
609 switch(eventsel) {
610 case 0x1: if (cccrsel==1) {
611 if (escr_addr>0x3c8) {
612
613 event_key=P4_EVENT_TC_DELIVER_MODE;
614 }
615 else {
616
617 event_key=P4_EVENT_RESOURCE_STALL;
618 }
619 }
620 if (cccrsel==4) {
621 if (escr_addr<0x3af) {
622
623 event_key=P4_EVENT_PAGE_WALK_TYPE;
624 }
625 else {
626
627 event_key=P4_EVENT_UOPS_RETIRED;
628 }
629 }
630 break;
631 case 0x2: if (cccrsel==5) {
632 if (escr_addr<0x3a8) {
633
634 event_key=P4_EVENT_MEMORY_CANCEL;
635 } else {
636
637 event_key=P4_EVENT_MACHINE_CLEAR;
638 }
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;
645 }
646 break;
647 case 0x3: if (cccrsel==0) {
648 event_key=P4_EVENT_BPU_FETCH_REQUEST;
649 }
650 if (cccrsel==2) {
651 event_key=P4_EVENT_MOB_LOAD_REPLAY;
652 }
653 if (cccrsel==6) {
654 event_key=P4_EVENT_IOQ_ALLOCATION;
655 }
656 if (cccrsel==4) {
657 event_key=P4_EVENT_MISPRED_BRANCH_RETIRED;
658 }
659 if (cccrsel==5) {
660 event_key=P4_EVENT_X87_ASSIST;
661 }
662 break;
663 case 0x4: if (cccrsel==2) {
664 if (escr_addr<0x3b0) {
665
666 event_key=P4_EVENT_LOAD_PORT_REPLAY;
667 }
668 else {
669
670 event_key=P4_EVENT_RETIRED_BRANCH_TYPE;
671 }
672 }
673 if (cccrsel==1) {
674 event_key=P4_EVENT_X87_FP_UOP;
675 }
676 if (cccrsel==3) {
677 event_key=P4_EVENT_RESPONSE;
678 }
679 break;
680 case 0x5: if (cccrsel==2) {
681 if (escr_addr<0x3b0) {
682
683 event_key=P4_EVENT_STORE_PORT_REPLAY;
684 }
685 else {
686
687 event_key=P4_EVENT_RETIRED_MISPRED_BRANCH_TYPE;
688 }
689 }
690 if (cccrsel==7) {
691 event_key=P4_EVENT_BSQ_ALLOCATION;
692 }
693 if (cccrsel==0) {
694 event_key=P4_EVENT_TC_MS_XFER;
695 }
696 if (cccrsel==5) {
697 event_key=P4_EVENT_WC_BUFFER;
698 }
699 break;
700 case 0x6: if (cccrsel==7) {
701 event_key=P4_EVENT_BSQ_ACTIVE_ENTRIES;
702 }
703 if (cccrsel==1) {
704 event_key=P4_EVENT_TC_MISC;
705 }
706 if (cccrsel==3) {
707 event_key=P4_EVENT_SNOOP;
708 }
709 if (cccrsel==5) {
710 event_key=P4_EVENT_BRANCH_RETIRED;
711 }
712 break;
713 case 0x7: event_key=P4_EVENT_INSTR_COMPLETED; break;
714 case 0x8: if (cccrsel==2) {
715 event_key=P4_EVENT_MEMORY_COMPLETE;
716 }
717 if (cccrsel==1) {
718 event_key=P4_EVENT_PACKED_SP_UOP;
719 }
720 if (cccrsel==3) {
721 event_key=P4_EVENT_BNR;
722 }
723 if (cccrsel==5) {
724 event_key=P4_EVENT_FRONT_END_EVENT;
725 }
726 break;
727 case 0x9: if (cccrsel==0) {
728 event_key=P4_EVENT_UOP_QUEUE_WRITES;
729 }
730 if (cccrsel==5) {
731 event_key=P4_EVENT_REPLAY_EVENT;
732 }
733 break;
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;
737 }
738 if (cccrsel==1) {
739 event_key=P4_EVENT_PACKED_DP_UOP;
740 }
741 if (cccrsel==5) {
742 event_key=P4_EVENT_EXECUTION_EVENT;
743 }
744 break;
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;
752 }
753 if (cccrsel==1) {
754 event_key=P4_EVENT_128BIT_MMX_UOP;
755 }
756 break;
757 case 0x34: event_key= P4_EVENT_SSE_INPUT_ASSIST; break;
758 }
759
760 pe_event=(escr&0x1ffffff)<<32;
761 pe_event|=(cccr&0xfffff000);
762 pe_event|=(((
long long)(event_key))<<57);
763
764 return pe_event;
765}