opd_ibs_trans.c revision 5a4eb4eb367eccd4b976d1feae96cea96d2c50f2
15a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/**
25a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @file daemon/opd_ibs_trans.c
35a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * AMD Family10h Instruction Based Sampling (IBS) translation.
45a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
55a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Copyright 2008 OProfile authors
65a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @remark Read the file COPYING
75a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
85a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Jason Yeh <jason.yeh@amd.com>
95a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Paul Drongowski <paul.drongowski@amd.com>
105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * @author Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * Copyright (c) 2008 Advanced Micro Devices, Inc.
125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs.h"
155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs_macro.h"
165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_ibs_trans.h"
175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_trans.h"
185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include "opd_printf.h"
195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdlib.h>
215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#include <stdio.h>
225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng#define MAX_EVENTS_PER_GROUP	32
245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/*
265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP DERIVED FUNCTION
275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_fetch (struct transient * trans, unsigned int selected_flag, unsigned int size)
295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{
305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct ibs_fetch_sample * trans_fetch = ((struct ibs_sample*)(trans->ext))->fetch;
315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	unsigned int i, j, mask = 1;
325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	for (i = IBS_FETCH_BASE, j =0 ; i <= IBS_FETCH_END && j < size ; i++, mask = mask << 1) {
345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		if ((selected_flag & mask) == 0)
365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			continue;
375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		j++;
395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		switch (i) {
415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_ALL:
435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS all fetch samples (kills + attempts) */
445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			AGG_IBS_EVENT(DE_IBS_FETCH_ALL);
455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_KILLED:
485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS killed fetches ("case 0") -- All interesting event
495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			 * flags are clear */
505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_KILLED(trans_fetch))
515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_KILLED);
525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_ATTEMPTED:
555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* Any non-killed fetch is an attempted fetch */
565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			AGG_IBS_EVENT(DE_IBS_FETCH_ATTEMPTED);
575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_COMPLETED:
605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_FETCH_COMPLETION(trans_fetch))
615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* IBS Fetch Completed */
625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_COMPLETED);
635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_ABORTED:
665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_FETCH_FETCH_COMPLETION(trans_fetch))
675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* IBS Fetch Aborted */
685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_ABORTED);
695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_L1_ITLB_HIT:
725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS L1 ITLB hit */
735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_L1_TLB_HIT(trans_fetch))
745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_L1_ITLB_HIT);
755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_ITLB_L1M_L2H:
785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS L1 ITLB miss and L2 ITLB hit */
795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_ITLB_L1M_L2H(trans_fetch))
805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2H);
815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_ITLB_L1M_L2M:
845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS L1 & L2 ITLB miss; complete ITLB miss */
855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_ITLB_L1M_L2M(trans_fetch))
865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_ITLB_L1M_L2M);
875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_IC_MISS:
905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS instruction cache miss */
915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_INST_CACHE_MISS(trans_fetch))
925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_IC_MISS);
935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_IC_HIT:
965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS instruction cache hit */
975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_INST_CACHE_HIT(trans_fetch))
985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_IC_HIT);
995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_4K_PAGE:
1025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
1035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) ==  L1TLB4K)
1045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_4K_PAGE);
1055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_2M_PAGE:
1085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
1095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) ==  L1TLB2M)
1105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_2M_PAGE);
1115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_1G_PAGE:
1145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_PHYS_ADDR_VALID(trans_fetch)
1155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_FETCH_TLB_PAGE_SIZE(trans_fetch) ==  L1TLB1G)
1165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_FETCH_1G_PAGE);
1175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_XX_PAGE:
1205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_FETCH_LATENCY:
1235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_FETCH_FETCH_LATENCY(trans_fetch))
1245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_FETCH_LATENCY,
1255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					      IBS_FETCH_FETCH_LATENCY(trans_fetch));
1265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		default:
1285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		}
1305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	}
1315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}
1325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/*
1345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP DERIVED FUNCTION
1355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
1365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op (struct transient * trans, unsigned int selected_flag, unsigned int size)
1375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{
1385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
1395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	unsigned int i, j, mask = 1;
1405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	for (i = IBS_OP_BASE, j =0 ; i <= IBS_OP_END && j < size ; i++, mask = mask << 1) {
1425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		if ((selected_flag & mask) == 0)
1445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			continue;
1455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		j++;
1475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		switch (i) {
1495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_OP_ALL:
1515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* All IBS op samples */
1525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			AGG_IBS_EVENT(DE_IBS_OP_ALL);
1535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_OP_TAG_TO_RETIRE:
1565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* Tally retire cycle counts for all sampled macro-ops
1575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			 * IBS tag to retire cycles */
1585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op))
1595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_OP_TAG_TO_RETIRE,
1605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					IBS_OP_TAG_TO_RETIRE_CYCLES(trans_op));
1615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_OP_COMP_TO_RETIRE:
1645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* IBS completion to retire cycles */
1655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_COM_TO_RETIRE_CYCLES(trans_op))
1665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_OP_COMP_TO_RETIRE,
1675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					IBS_OP_COM_TO_RETIRE_CYCLES(trans_op));
1685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_BRANCH_RETIRED:
1715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op))
1725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* IBS Branch retired op */
1735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_BRANCH_RETIRED) ;
1745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_BRANCH_MISP:
1775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op)
1785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* Test branch-specific event flags */
1795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* IBS mispredicted Branch op */
1805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_BRANCH_MISPREDICT(trans_op))
1815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_BRANCH_MISP) ;
1825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_BRANCH_TAKEN:
1855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op)
1865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* IBS taken Branch op */
1875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_BRANCH_TAKEN(trans_op))
1885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_BRANCH_TAKEN);
1895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_BRANCH_MISP_TAKEN:
1925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op)
1935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* IBS mispredicted taken branch op */
1945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_BRANCH_TAKEN(trans_op)
1955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_BRANCH_MISPREDICT(trans_op))
1965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_BRANCH_MISP_TAKEN);
1975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
1985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
1995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_RETURN:
2005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op)
2015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* IBS return op */
2025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_RETURN(trans_op))
2035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_RETURN);
2045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_RETURN_MISP:
2075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RETIRED(trans_op)
2085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* IBS mispredicted return op */
2095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_RETURN(trans_op)
2105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_OP_BRANCH_MISPREDICT(trans_op))
2115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_RETURN_MISP);
2125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_RESYNC:
2155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* Test for a resync macro-op */
2165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_OP_BRANCH_RESYNC(trans_op))
2175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_RESYNC);
2185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		default:
2205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		}
2225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	}
2235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}
2245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/*
2275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP LS DERIVED FUNCTION
2285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
2295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op_ls (struct transient * trans, unsigned int selected_flag, unsigned int size)
2305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{
2315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
2325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	unsigned int i, j, mask = 1;
2335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	/* Preliminary check */
2355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	if (!IBS_OP_IBS_LD_OP(trans_op) && !IBS_OP_IBS_ST_OP(trans_op))
2365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		return;
2375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	for (i = IBS_OP_LS_BASE, j =0 ; i <= IBS_OP_LS_END && j < size ; i++, mask = mask << 1) {
2405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		if ((selected_flag & mask) == 0)
2425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			continue;
2435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		j++;
2455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		switch (i) {
2475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_ALL_OP:
2495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* Count the number of LS op samples */
2505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			AGG_IBS_EVENT(DE_IBS_LS_ALL_OP) ;
2515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_LOAD_OP:
2545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_LD_OP(trans_op))
2555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* TALLy an IBS load derived event */
2565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_LOAD_OP) ;
2575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_STORE_OP:
2605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_ST_OP(trans_op))
2615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* Count and handle store operations */
2625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_STORE_OP);
2635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DTLB_L1H:
2665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
2675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op))
2685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* L1 DTLB hit -- This is the most frequent case */
2695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1H);
2705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DTLB_L1M_L2H:
2735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l2_translation_size = 1 */
2745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
2755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
2765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op))
2775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* L1 DTLB miss, L2 DTLB hit */
2785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2H);
2795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DTLB_L1M_L2M:
2825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
2835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
2845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L2_TLB_MISS(trans_op))
2855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* L1 DTLB miss, L2 DTLB miss */
2865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_DTLB_L1M_L2M);
2875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DC_MISS:
2905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_MISS(trans_op))
2915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_DC_MISS);
2925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DC_HIT:
2955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_IBS_DC_MISS(trans_op))
2965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_DC_HIT);
2975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
2985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
2995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_MISALIGNED:
3005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_MISS_ACC(trans_op))
3015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_MISALIGNED);
3025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_BNK_CONF_LOAD:
3055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LD_BNK_CON(trans_op))
3065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_LOAD);
3075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_BNK_CONF_STORE:
3105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_ST_BNK_CON(trans_op))
3115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_BNK_CONF_STORE);
3125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_STL_FORWARDED:
3155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_LD_OP(trans_op)
3165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* Data forwarding info are valid only for load ops */
3175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_ST_TO_LD_FWD(trans_op))
3185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_STL_FORWARDED) ;
3195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_STL_CANCELLED:
3225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_LD_OP(trans_op))
3235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_ST_TO_LD_CAN(trans_op))
3245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_STL_CANCELLED) ;
3255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_UC_MEM_ACCESS:
3285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_UC_MEM_ACC(trans_op))
3295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_UC_MEM_ACCESS);
3305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_WC_MEM_ACCESS:
3335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_WC_MEM_ACC(trans_op))
3345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_WC_MEM_ACCESS);
3355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_LOCKED_OP:
3385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_LOCKED_OP(trans_op))
3395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_LOCKED_OP);
3405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_MAB_HIT:
3435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_MAB_HIT(trans_op))
3445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_MAB_HIT);
3455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L1_DTLB_4K:
3485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l1_translation */
3495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
3505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
3515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)
3535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op))
3545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* This is the most common case, unfortunately */
3555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_4K) ;
3565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L1_DTLB_2M:
3595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l1_translation */
3605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
3615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
3625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op))
3645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* 2M L1 DTLB page translation */
3655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_2M);
3665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L1_DTLB_1G:
3695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l1_translation */
3705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
3715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
3725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L1_TLB_HIT_2MB(trans_op)
3745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_HIT_1GB(trans_op))
3755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* 1G L1 DTLB page translation */
3765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L1_DTLB_1G);
3775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L1_DTLB_RES:
3805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L2_DTLB_4K:
3835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l2_translation_size = 1 */
3845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
3855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
3865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
3875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* L2 DTLB page translation */
3895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
3905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
3915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* 4K L2 DTLB page translation */
3925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_4K);
3935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
3945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
3955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L2_DTLB_2M:
3965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l2_translation_size = 1 */
3975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
3985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
3995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
4005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* L2 DTLB page translation */
4025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
4035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
4045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* 2M L2 DTLB page translation */
4055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_2M);
4065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L2_DTLB_1G:
4095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			/* l2_translation_size = 1 */
4105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_DC_LIN_ADDR_VALID(trans_op)
4115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L1_TLB_MISS(trans_op)
4125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_MISS(trans_op)
4135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* L2 DTLB page translation */
4155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_IBS_DC_L2_TLB_HIT_2MB(trans_op)
4165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_L2_TLB_HIT_1GB(trans_op))
4175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* 2M L2 DTLB page translation */
4185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_LS_L2_DTLB_1G);
4195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_L2_DTLB_RES2:
4225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_LS_DC_LOAD_LAT:
4255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_IBS_LD_OP(trans_op)
4265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    /* If the load missed in DC, tally the DC load miss latency */
4275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_IBS_DC_MISS(trans_op))
4285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* DC load miss latency is only reliable for load ops */
4295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_LS_DC_LOAD_LAT,
4305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					      IBS_OP_DC_MISS_LATENCY(trans_op)) ;
4315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		default:
4345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		}
4365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	}
4375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}
4385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng/*
4405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * --------------------- OP NB DERIVED FUNCTION
4415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng *
4425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * NB data is only guaranteed reliable for load operations
4435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * that miss in L1 and L2 cache. NB data arrives too late
4445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng * to be reliable for store operations
4455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng */
4465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Chengvoid trans_ibs_op_nb (struct transient * trans, unsigned int selected_flag, unsigned int size)
4475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng{
4485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	struct ibs_op_sample * trans_op = ((struct ibs_sample*)(trans->ext))->op;
4495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	unsigned int i, j, mask = 1;
4505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	/* Preliminary check */
4525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	if (!IBS_OP_IBS_LD_OP(trans_op))
4535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		return;
4545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4555a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	if (!IBS_OP_IBS_DC_MISS(trans_op))
4565a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		return;
4575a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4585a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	if (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0)
4595a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		return;
4605a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4615a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	for (i = IBS_OP_NB_BASE, j =0 ; i <= IBS_OP_NB_END && j < size ; i++, mask = mask << 1) {
4625a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4635a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		if ((selected_flag & mask) == 0)
4645a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			continue;
4655a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4665a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		j++;
4675a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4685a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		switch (i) {
4695a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4705a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL:
4715a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
4725a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* Request was serviced by local processor */
4735a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_LOCAL) ;
4745a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4755a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4765a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_REMOTE:
4775a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
4785a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* Request was serviced by remote processor */
4795a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_REMOTE) ;
4805a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4815a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4825a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL_L3:
4835a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
4845a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x1))
4855a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_LOCAL_L3);
4865a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4875a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4885a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL_CACHE:
4895a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
4905a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2))
4915a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_LOCAL_CACHE);
4925a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4935a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
4945a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_REMOTE_CACHE:
4955a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
4965a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2))
4975a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_REMOTE_CACHE) ;
4985a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
4995a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5005a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL_DRAM:
5015a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
5025a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x3))
5035a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_LOCAL_DRAM);
5045a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5055a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5065a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_REMOTE_DRAM:
5075a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
5085a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x3))
5095a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_REMOTE_DRAM) ;
5105a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5115a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5125a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL_OTHER:
5135a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
5145a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x7))
5155a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_LOCAL_OTHER);
5165a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5175a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5185a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_REMOTE_OTHER:
5195a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op)
5205a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && (IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x7))
5215a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_REMOTE_OTHER) ;
5225a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5235a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5245a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_CACHE_STATE_M:
5255a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if ((IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2)
5265a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && !IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op))
5275a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_M) ;
5285a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5295a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5305a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_CACHE_STATE_O:
5315a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if ((IBS_OP_NB_IBS_REQ_SRC(trans_op) == 0x2)
5325a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			    && IBS_OP_NB_IBS_CACHE_HIT_ST(trans_op))
5335a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_EVENT(DE_IBS_NB_CACHE_STATE_O) ;
5345a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5355a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5365a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_LOCAL_LATENCY:
5375a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (!IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
5385a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* Request was serviced by local processor */
5395a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_NB_LOCAL_LATENCY,
5405a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					      IBS_OP_DC_MISS_LATENCY(trans_op));
5415a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5425a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5435a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		case DE_IBS_NB_REMOTE_LATENCY:
5445a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			if (IBS_OP_NB_IBS_REQ_DST_PROC(trans_op))
5455a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				/* Request was serviced by remote processor */
5465a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng				AGG_IBS_COUNT(DE_IBS_NB_REMOTE_LATENCY,
5475a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng					      IBS_OP_DC_MISS_LATENCY(trans_op));
5485a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5495a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng
5505a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		default:
5515a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng			break;
5525a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng		}
5535a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng	}
5545a4eb4eb367eccd4b976d1feae96cea96d2c50f2Ben Cheng}
555