Blame src/libpfm4/lib/events/intel_bdw_events.h

Packit Service a1973e
/*
Packit Service a1973e
 * Contributed by Stephane Eranian <eranian@gmail.com>
Packit Service a1973e
 *
Packit Service a1973e
 * Permission is hereby granted, free of charge, to any person obtaining a copy
Packit Service a1973e
 * of this software and associated documentation files (the "Software"), to deal
Packit Service a1973e
 * in the Software without restriction, including without limitation the rights
Packit Service a1973e
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
Packit Service a1973e
 * of the Software, and to permit persons to whom the Software is furnished to do so,
Packit Service a1973e
 * subject to the following conditions:
Packit Service a1973e
 *
Packit Service a1973e
 * The above copyright notice and this permission notice shall be included in all
Packit Service a1973e
 * copies or substantial portions of the Software.
Packit Service a1973e
 *
Packit Service a1973e
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Packit Service a1973e
 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
Packit Service a1973e
 * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
Packit Service a1973e
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Packit Service a1973e
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
Packit Service a1973e
 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Packit Service a1973e
 *
Packit Service a1973e
 * This file is part of libpfm, a performance monitoring support library for
Packit Service a1973e
 * applications on Linux.
Packit Service a1973e
 *
Packit Service a1973e
 * PMU: bdw (Intel Broadwell)
Packit Service a1973e
 */
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_baclears[]={
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "Number of front-end re-steers due to BPU misprediction",
Packit Service a1973e
    .ucode  = 0x1f00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_br_inst_exec[]={
Packit Service a1973e
  { .uname = "NONTAKEN_CONDITIONAL",
Packit Service a1973e
    .udesc  = "All macro conditional nontaken branch instructions",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NONTAKEN_COND",
Packit Service a1973e
    .udesc  = "All macro conditional nontaken branch instructions",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uequiv = "NONTAKEN_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
Packit Service a1973e
  { .uname = "TAKEN_CONDITIONAL",
Packit Service a1973e
    .udesc  = "Taken speculative and retired macro-conditional branches",
Packit Service a1973e
    .ucode  = 0x8100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_COND",
Packit Service a1973e
    .udesc  = "Taken speculative and retired macro-conditional branches",
Packit Service a1973e
    .ucode  = 0x8100,
Packit Service a1973e
    .uequiv = "TAKEN_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_DIRECT_JUMP",
Packit Service a1973e
    .udesc  = "Taken speculative and retired macro-conditional branch instructions excluding calls and indirects",
Packit Service a1973e
    .ucode  = 0x8200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_INDIRECT_JUMP_NON_CALL_RET",
Packit Service a1973e
    .udesc  = "Taken speculative and retired indirect branches excluding calls and returns",
Packit Service a1973e
    .ucode  = 0x8400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_INDIRECT_NEAR_RETURN",
Packit Service a1973e
    .udesc  = "Taken speculative and retired indirect branches with return mnemonic",
Packit Service a1973e
    .ucode  = 0x8800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_DIRECT_NEAR_CALL",
Packit Service a1973e
    .udesc  = "Taken speculative and retired direct near calls",
Packit Service a1973e
    .ucode  = 0x9000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_CONDITIONAL",
Packit Service a1973e
    .udesc  = "Speculative and retired macro-conditional branches",
Packit Service a1973e
    .ucode  = 0xc100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_COND",
Packit Service a1973e
    .udesc  = "Speculative and retired macro-conditional branches",
Packit Service a1973e
    .ucode  = 0xc100,
Packit Service a1973e
    .uequiv = "ALL_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY_COND",
Packit Service a1973e
    .udesc  = "Speculative and retired macro-conditional branches",
Packit Service a1973e
    .ucode  = 0xc100,
Packit Service a1973e
    .uequiv = "ALL_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DIRECT_JMP",
Packit Service a1973e
    .udesc  = "Speculative and retired macro-unconditional branches excluding calls and indirects",
Packit Service a1973e
    .ucode  = 0xc200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_INDIRECT_JUMP_NON_CALL_RET",
Packit Service a1973e
    .udesc  = "Speculative and retired indirect branches excluding calls and returns",
Packit Service a1973e
    .ucode  = 0xc400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_INDIRECT_NEAR_RETURN",
Packit Service a1973e
    .udesc  = "Speculative and retired indirect return branches",
Packit Service a1973e
    .ucode  = 0xc800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DIRECT_NEAR_CALL",
Packit Service a1973e
    .udesc  = "Speculative and retired direct near calls",
Packit Service a1973e
    .ucode  = 0xd000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_INDIRECT_NEAR_CALL",
Packit Service a1973e
    .udesc  = "All indirect calls, including both register and memory indirect",
Packit Service a1973e
    .ucode  = 0xa000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_BRANCHES",
Packit Service a1973e
    .udesc  = "All branch instructions executed",
Packit Service a1973e
    .ucode  = 0xff00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_br_inst_retired[]={
Packit Service a1973e
  { .uname = "CONDITIONAL",
Packit Service a1973e
    .udesc  = "Counts all taken and not taken macro conditional branch instructions",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "COND",
Packit Service a1973e
    .udesc  = "Counts all taken and not taken macro conditional branch instructions",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NEAR_CALL",
Packit Service a1973e
    .udesc  = "Counts all macro direct and indirect near calls",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_BRANCHES",
Packit Service a1973e
    .udesc  = "Counts all taken and not taken macro branches including far branches (architectural event)",
Packit Service a1973e
    .ucode  = 0x0,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NEAR_RETURN",
Packit Service a1973e
    .udesc  = "Counts the number of near ret instructions retired",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NOT_TAKEN",
Packit Service a1973e
    .udesc  = "Counts all not taken macro branch instructions retired",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NEAR_TAKEN",
Packit Service a1973e
    .udesc  = "Counts the number of near branch taken instructions retired",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "FAR_BRANCH",
Packit Service a1973e
    .udesc  = "Counts the number of far branch instructions retired",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_br_misp_exec[]={
Packit Service a1973e
  { .uname = "NONTAKEN_CONDITIONAL",
Packit Service a1973e
    .udesc  = "Not taken speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NONTAKEN_COND",
Packit Service a1973e
    .udesc  = "Not taken speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uequiv = "NONTAKEN_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_CONDITIONAL",
Packit Service a1973e
    .udesc  = "Taken speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0x8100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_COND",
Packit Service a1973e
    .udesc  = "Taken speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0x8100,
Packit Service a1973e
    .uequiv = "TAKEN_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_INDIRECT_JUMP_NON_CALL_RET",
Packit Service a1973e
    .udesc  = "Taken speculative and retired mispredicted indirect branches excluding calls and returns",
Packit Service a1973e
    .ucode  = 0x8400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_CONDITIONAL",
Packit Service a1973e
    .udesc  = "Speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0xc100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY_COND",
Packit Service a1973e
    .udesc  = "Speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0xc100,
Packit Service a1973e
    .uequiv = "ALL_CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_INDIRECT_JUMP_NON_CALL_RET",
Packit Service a1973e
    .udesc  = "All mispredicted indirect branches that are not calls nor returns",
Packit Service a1973e
    .ucode  = 0xc400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_BRANCHES",
Packit Service a1973e
    .udesc  = "Speculative and retired mispredicted macro conditional branches",
Packit Service a1973e
    .ucode  = 0xff00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_INDIRECT_NEAR_CALL",
Packit Service a1973e
    .udesc  = "Taken speculative and retired mispredicted indirect calls",
Packit Service a1973e
    .ucode  = 0xa000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TAKEN_RETURN_NEAR",
Packit Service a1973e
    .udesc  = "Taken speculative and retired mispredicted direct returns",
Packit Service a1973e
    .ucode  = 0x8800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_br_misp_retired[]={
Packit Service a1973e
  { .uname = "CONDITIONAL",
Packit Service a1973e
    .udesc  = "All mispredicted macro conditional branch instructions",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "COND",
Packit Service a1973e
    .udesc  = "All mispredicted macro conditional branch instructions",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "CONDITIONAL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_BRANCHES",
Packit Service a1973e
    .udesc  = "All mispredicted macro branches (architectural event)",
Packit Service a1973e
    .ucode  = 0x0, /* architectural encoding */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NEAR_TAKEN",
Packit Service a1973e
    .udesc  = "Number of near branch instructions retired that were mispredicted and taken",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RET",
Packit Service a1973e
    .udesc  = "Number of mispredicted ret instructions retired",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_cpl_cycles[]={
Packit Service a1973e
  { .uname = "RING0",
Packit Service a1973e
    .udesc  = "Unhalted core cycles when the thread is in ring 0",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RING123",
Packit Service a1973e
    .udesc  = "Unhalted core cycles when thread is in rings 1, 2, or 3",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RING0_TRANS",
Packit Service a1973e
    .udesc  = "Number of intervals between processor halts while thread is in ring 0",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_cpu_clk_thread_unhalted[]={
Packit Service a1973e
  { .uname = "REF_XCLK",
Packit Service a1973e
    .udesc  = "Count Xclk pulses (100Mhz) when the core is unhalted",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "REF_XCLK_ANY",
Packit Service a1973e
    .udesc  = "Count Xclk pulses (100Mhz) when the at least one thread on the physical core is unhalted",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "REF_XCLK:t",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname  = "REF_P",
Packit Service a1973e
    .udesc  = "Cycles when the core is unhalted (count at 100 Mhz)",
Packit Service a1973e
    .ucode = 0x100,
Packit Service a1973e
    .uequiv = "REF_XCLK",
Packit Service a1973e
    .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname  = "THREAD_P",
Packit Service a1973e
    .udesc  = "Cycles when thread is not halted",
Packit Service a1973e
    .ucode = 0x000,
Packit Service a1973e
    .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ONE_THREAD_ACTIVE",
Packit Service a1973e
    .udesc  = "Counts Xclk (100Mhz) pulses when this thread is unhalted and the other thread is halted",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_cycle_activity[]={
Packit Service a1973e
   { .uname  = "CYCLES_L2_PENDING",
Packit Service a1973e
     .udesc  = "Cycles with pending L2 miss loads (must use with HT off only)",
Packit Service a1973e
     .ucode  = 0x0100 | (0x1 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0xf,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "CYCLES_LDM_PENDING",
Packit Service a1973e
     .udesc  = "Cycles with pending memory loads",
Packit Service a1973e
     .ucode  = 0x0200 | (0x2 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .uequiv = "CYCLES_MEM_ANY",
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "CYCLES_MEM_ANY",
Packit Service a1973e
     .udesc  = "Cycles with pending memory loads",
Packit Service a1973e
     .ucode  = 0x0200 | (0x2 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "CYCLES_L1D_PENDING",
Packit Service a1973e
     .udesc  = "Cycles with pending L1D load cache misses",
Packit Service a1973e
     .ucode  = 0x0800 | (0x8 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0x4,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "STALLS_LDM_PENDING",
Packit Service a1973e
     .udesc  = "Executions stalls when there is at least one pending demand load request",
Packit Service a1973e
     .ucode  = 0x0600 | (0x6 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0x4,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "STALLS_L1D_PENDING",
Packit Service a1973e
     .udesc  = "Executions stalls while there is at least one L1D demand load outstanding",
Packit Service a1973e
     .ucode  = 0x0c00 | (0xc << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0x4,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "STALLS_L2_PENDING",
Packit Service a1973e
     .udesc  = "Execution stalls while there is at least one L2 demand load pending outstanding",
Packit Service a1973e
     .ucode  = 0x0500 | (0x5 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0xf,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "STALLS_TOTAL",
Packit Service a1973e
     .udesc  = "Cycles during which no instructions were executed in the execution stage of the pipeline",
Packit Service a1973e
     .ucode  = 0x0400 | (0x4 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .ucntmsk= 0xf,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "CYCLES_NO_EXECUTE",
Packit Service a1973e
     .udesc  = "Cycles during which no instructions were executed in the execution stage of the pipeline",
Packit Service a1973e
     .ucode  = 0x0400 | (0x4 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
     .uequiv = "STALLS_TOTAL",
Packit Service a1973e
     .ucntmsk= 0xf,
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_dtlb_load_misses[]={
Packit Service a1973e
  { .uname = "MISS_CAUSES_A_WALK",
Packit Service a1973e
    .udesc  = "Misses in all DTLB levels that cause page walks",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_4K",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk that completes (4K)",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_2M_4M",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk of 2MB/4MB page sizes that completes",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_1G",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk of 1GB page sizes that completes",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk of any page size that completes",
Packit Service a1973e
    .ucode  = 0xe00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_DURATION",
Packit Service a1973e
    .udesc  = "Cycles when PMH is busy with page walks",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT_4K",
Packit Service a1973e
    .udesc  = "Misses that miss the DTLB and hit the STLB (4KB)",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT_2M",
Packit Service a1973e
    .udesc  = "Misses that miss the DTLB and hit the STLB (2MB)",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT",
Packit Service a1973e
    .udesc  = "Number of cache load STLB hits. No page walk",
Packit Service a1973e
    .ucode  = 0x6000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_itlb_misses[]={
Packit Service a1973e
  { .uname = "MISS_CAUSES_A_WALK",
Packit Service a1973e
    .udesc  = "Misses in all DTLB levels that cause page walks",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_4K",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk that completes (4KB)",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_2M_4M",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk that completes (2MB/4MB)",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED_1G",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk that completes (1GB)",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_COMPLETED",
Packit Service a1973e
    .udesc  = "Misses in all TLB levels causes a page walk of any page size that completes",
Packit Service a1973e
    .ucode  = 0xe00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "WALK_DURATION",
Packit Service a1973e
    .udesc  = "Cycles when PMH is busy with page walks",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT_4K",
Packit Service a1973e
    .udesc  = "Misses that miss the DTLB and hit the STLB (4KB)",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT_2M",
Packit Service a1973e
    .udesc  = "Misses that miss the DTLB and hit the STLB (2MB)",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_HIT",
Packit Service a1973e
    .udesc  = "Number of cache load STLB hits. No page walk",
Packit Service a1973e
    .ucode  = 0x6000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_fp_assist[]={
Packit Service a1973e
  { .uname = "X87_OUTPUT",
Packit Service a1973e
    .udesc  = "Number of X87 FP assists due to output values",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "X87_INPUT",
Packit Service a1973e
    .udesc  = "Number of X87 FP assists due to input values",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SIMD_OUTPUT",
Packit Service a1973e
    .udesc  = "Number of SIMD FP assists due to output values",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SIMD_INPUT",
Packit Service a1973e
    .udesc  = "Number of SIMD FP assists due to input values",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "Cycles with any input/output SEE or FP assists",
Packit Service a1973e
    .ucode  = 0x1e00 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "Cycles with any input and output SSE or FP assist",
Packit Service a1973e
    .ucode  = 0x1e00 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "ANY",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_icache[]={
Packit Service a1973e
  { .uname = "MISSES",
Packit Service a1973e
    .udesc  = "Number of Instruction Cache, Streaming Buffer and Victim Cache Misses. Includes Uncacheable accesses",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "IFDATA_STALL",
Packit Service a1973e
    .udesc  = "Number of cycles where a code fetch is stalled due to L1 miss",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "HIT",
Packit Service a1973e
    .udesc  = "Number of Instruction Cache, Streaming Buffer and Victim Cache Reads. Includes cacheable and uncacheable accesses and uncacheable fetches",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_idq[]={
Packit Service a1973e
  { .uname = "EMPTY",
Packit Service a1973e
    .udesc  = "Cycles the Instruction Decode Queue (IDQ) is empty",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .ucntmsk= 0xf,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MITE_UOPS",
Packit Service a1973e
    .udesc  = "Number of uops delivered to Instruction Decode Queue (IDQ) from MITE path",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DSB_UOPS",
Packit Service a1973e
    .udesc  = "Number of uops delivered to Instruction Decode Queue (IDQ) from Decode Stream Buffer (DSB) path",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_DSB_UOPS",
Packit Service a1973e
    .udesc  = "Uops initiated by Decode Stream Buffer (DSB) that are being delivered to Instruction Decode Queue (IDQ) while Microcode Sequencer (MS) is busy",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_MITE_UOPS",
Packit Service a1973e
    .udesc  = "Uops initiated by MITE and delivered to Instruction Decode Queue (IDQ) while Microcode Sequencer (MS) is busy",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_UOPS",
Packit Service a1973e
    .udesc  = "Number of Uops were delivered into Instruction Decode Queue (IDQ) from MS, initiated by Decode Stream Buffer (DSB) or MITE",
Packit Service a1973e
    .ucode  = 0x3000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_UOPS_CYCLES",
Packit Service a1973e
    .udesc  = "Number of cycles that Uops were delivered into Instruction Decode Queue (IDQ) when MS_Busy, initiated by Decode Stream Buffer (DSB) or MITE",
Packit Service a1973e
    .ucode  = 0x3000 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "MS_UOPS:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_SWITCHES",
Packit Service a1973e
    .udesc  = "Number of cycles that Uops were delivered into Instruction Decode Queue (IDQ) when MS_Busy, initiated by Decode Stream Buffer (DSB) or MITE",
Packit Service a1973e
    .ucode  = 0x3000 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "MS_UOPS:c=1:e",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MITE_UOPS_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles when uops are being delivered to Instruction Decode Queue (IDQ) from MITE path",
Packit Service a1973e
    .ucode  = 0x400 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "MITE_UOPS:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DSB_UOPS_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles when uops are being delivered to Instruction Decode Queue (IDQ) from Decode Stream Buffer (DSB) path",
Packit Service a1973e
    .ucode  = 0x800 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "DSB_UOPS:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_DSB_UOPS_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles when uops initiated by Decode Stream Buffer (DSB) are being delivered to Instruction Decode Queue (IDQ) while Microcode Sequencer (MS) is busy",
Packit Service a1973e
    .ucode  = 0x1000 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "MS_DSB_UOPS:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MS_DSB_OCCUR",
Packit Service a1973e
    .udesc  = "Deliveries to Instruction Decode Queue (IDQ) initiated by Decode Stream Buffer (DSB) while Microcode Sequencer (MS) is busy",
Packit Service a1973e
    .ucode  = 0x1000 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "MS_DSB_UOPS:c=1:e=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DSB_CYCLES_4_UOPS",
Packit Service a1973e
    .udesc  = "Cycles Decode Stream Buffer (DSB) is delivering 4 Uops",
Packit Service a1973e
    .ucode  = 0x1800 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DSB_CYCLES_ANY_UOPS",
Packit Service a1973e
    .udesc  = "Cycles Decode Stream Buffer (DSB) is delivering any Uop",
Packit Service a1973e
    .ucode  = 0x1800 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_MITE_CYCLES_4_UOPS",
Packit Service a1973e
    .udesc  = "Cycles MITE is delivering 4 Uops",
Packit Service a1973e
    .ucode  = 0x2400 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_MITE_CYCLES_ANY_UOPS",
Packit Service a1973e
    .udesc  = "Cycles MITE is delivering any Uop",
Packit Service a1973e
    .ucode  = 0x2400 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_MITE_UOPS",
Packit Service a1973e
    .udesc  = "Number of uops delivered to Instruction Decode Queue (IDQ) from any path",
Packit Service a1973e
    .ucode  = 0x3c00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_idq_uops_not_delivered[]={
Packit Service a1973e
  { .uname = "CORE",
Packit Service a1973e
    .udesc  = "Count number of non-delivered uops to Resource Allocation Table (RAT)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_0_UOPS_DELIV_CORE",
Packit Service a1973e
    .udesc  = "Cycles per thread when 4 or more uops are not delivered to the Resource Allocation Table (RAT) when backend is not stalled",
Packit Service a1973e
    .ucode  = 0x100 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .uequiv = "CORE:c=4",
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_LE_1_UOP_DELIV_CORE",
Packit Service a1973e
    .udesc  = "Cycles per thread when 3 or more uops are not delivered to the Resource Allocation Table (RAT) when backend is not stalled",
Packit Service a1973e
    .ucode  = 0x100 | (3 << INTEL_X86_CMASK_BIT), /* cnt=3 */
Packit Service a1973e
    .uequiv = "CORE:c=3",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_LE_2_UOP_DELIV_CORE",
Packit Service a1973e
    .udesc  = "Cycles with less than 2 uops delivered by the front end",
Packit Service a1973e
    .ucode  = 0x100 | (2 << INTEL_X86_CMASK_BIT), /* cnt=2 */
Packit Service a1973e
    .uequiv = "CORE:c=2",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_LE_3_UOP_DELIV_CORE",
Packit Service a1973e
    .udesc  = "Cycles with less than 3 uops delivered by the front end",
Packit Service a1973e
    .ucode  = 0x100 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "CORE:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_FE_WAS_OK",
Packit Service a1973e
    .udesc  = "Cycles Front-End (FE) delivered 4 uops or Resource Allocation Table (RAT) was stalling FE",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 inv=1 */
Packit Service a1973e
    .uequiv = "CORE:c=1:i",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C | _INTEL_X86_ATTR_I,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_inst_retired[]={
Packit Service a1973e
  { .uname = "ANY_P",
Packit Service a1973e
    .udesc  = "Number of instructions retired. General Counter - architectural event",
Packit Service a1973e
    .ucode  = 0x000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "Precise instruction retired event with HW to reduce effect of PEBS shadow in IP distribution (Precise Event)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "PREC_DIST",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TOTAL_CYCLES",
Packit Service a1973e
    .udesc  = "Number of cycles using always true condition",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (10 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=10 */
Packit Service a1973e
    .uequiv = "PREC_DIST:i=1:c=10",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PREC_DIST",
Packit Service a1973e
    .udesc  = "Precise instruction retired event with HW to reduce effect of PEBS shadow in IP distribution (Precise event)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .ucntmsk= 0x2,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "X87",
Packit Service a1973e
    .udesc  = "Number of FPU operations retired (instructions with no exceptions)",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .ucntmsk= 0x2,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_int_misc[]={
Packit Service a1973e
  { .uname = "RECOVERY_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles waiting for the checkpoints in Resource Allocation Table (RAT) to be recovered after Nuke due to all other cases except JEClear (e.g. whenever a ucode assist is needed like SSE exception, memory disambiguation, etc...)",
Packit Service a1973e
    .ucode  = 0x300 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RECOVERY_CYCLES_ANY",
Packit Service a1973e
    .udesc  = "Core cycles the allocator was stalled due to recovery from earlier clear event for any thread running on the physical core (e.g. misprediction or memory nuke)",
Packit Service a1973e
    .ucode  = 0x300 | (1 << INTEL_X86_CMASK_BIT) | INTEL_X86_MOD_ANY, /* cnt=1 any=1 */
Packit Service a1973e
    .uequiv = "RECOVERY_CYCLES:t",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C | _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RECOVERY_STALLS_COUNT",
Packit Service a1973e
    .udesc  = "Number of occurrences waiting for Machine Clears",
Packit Service a1973e
    .ucode  = 0x300 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RAT_STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles when the Resource Allocation Table (RAT) external stall event is sent to the Instruction Decode Queue (IDQ) for the thread. Also includes cycles when the allocator is serving another thread",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_itlb[]={
Packit Service a1973e
  { .uname = "ITLB_FLUSH",
Packit Service a1973e
    .udesc  = "Flushing of the Instruction TLB (ITLB) pages independent of page size",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l1d[]={
Packit Service a1973e
  { .uname = "REPLACEMENT",
Packit Service a1973e
    .udesc  = "L1D Data line replacements",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_sq_misc[]={
Packit Service a1973e
  { .uname = "SPLIT_LOCK",
Packit Service a1973e
    .udesc  = "Number of split locks in the super queue (SQ)",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l1d_pend_miss[]={
Packit Service a1973e
  { .uname = "PENDING",
Packit Service a1973e
    .udesc  = "Cycles with L1D load misses outstanding",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .ucntmsk = 0x4,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PENDING_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles with L1D load misses outstanding",
Packit Service a1973e
    .ucode  = 0x100 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "PENDING:c=1",
Packit Service a1973e
    .ucntmsk = 0x4,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PENDING_CYCLES_ANY",
Packit Service a1973e
    .udesc  = "Cycles with L1D load misses outstanding from any thread",
Packit Service a1973e
    .ucode  = 0x100 | (1 << INTEL_X86_CMASK_BIT) | INTEL_X86_MOD_ANY, /* cnt=1 any=1 */
Packit Service a1973e
    .uequiv = "PENDING:c=1:t",
Packit Service a1973e
    .ucntmsk = 0x4,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C | _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "OCCURRENCES",
Packit Service a1973e
    .udesc  = "Number L1D miss outstanding",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "PENDING:c=1:e=1",
Packit Service a1973e
    .ucntmsk = 0x4,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "EDGE",
Packit Service a1973e
    .udesc  = "Number L1D miss outstanding",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "PENDING:c=1:e=1",
Packit Service a1973e
    .ucntmsk = 0x4,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "FB_FULL",
Packit Service a1973e
    .udesc  = "Number of cycles a demand request was blocked due to Fill Buffer (FB) unavailability",
Packit Service a1973e
    .ucode  = 0x200 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l2_demand_rqsts[]={
Packit Service a1973e
  { .uname = "WB_HIT",
Packit Service a1973e
    .udesc  = "WB requests that hit L2 cache",
Packit Service a1973e
    .ucode  = 0x5000,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l2_lines_in[]={
Packit Service a1973e
  { .uname = "I",
Packit Service a1973e
    .udesc  = "L2 cache lines in I state filling L2",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "S",
Packit Service a1973e
    .udesc  = "L2 cache lines in S state filling L2",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "E",
Packit Service a1973e
    .udesc  = "L2 cache lines in E state filling L2",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "L2 cache lines filling L2",
Packit Service a1973e
    .ucode  = 0x700,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "L2 cache lines filling L2",
Packit Service a1973e
    .uequiv = "ALL",
Packit Service a1973e
    .ucode  = 0x700,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l2_lines_out[]={
Packit Service a1973e
  { .uname = "DEMAND_CLEAN",
Packit Service a1973e
    .udesc  = "Number of clean L2 cachelines evicted by demand",
Packit Service a1973e
    .ucode  = 0x500,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l2_rqsts[]={
Packit Service a1973e
  { .uname = "DEMAND_DATA_RD_MISS",
Packit Service a1973e
    .udesc  = "Demand Data Read requests that miss L2 cache",
Packit Service a1973e
    .ucode  = 0x2100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DEMAND_DATA_RD_HIT",
Packit Service a1973e
    .udesc  = "Demand Data Read requests that hit L2 cache",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DEMAND_RFO_MISS",
Packit Service a1973e
    .udesc  = "RFO requests that miss L2 cache",
Packit Service a1973e
    .ucode  = 0x2200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RFO_MISS",
Packit Service a1973e
    .udesc  = "RFO requests that miss L2 cache",
Packit Service a1973e
    .ucode  = 0x2200,
Packit Service a1973e
    .uequiv = "DEMAND_RFO_MISS",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DEMAND_RFO_HIT",
Packit Service a1973e
    .udesc  = "RFO requests that hit L2 cache",
Packit Service a1973e
    .ucode  = 0x4200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RFO_HIT",
Packit Service a1973e
    .udesc  = "RFO requests that hit L2 cache",
Packit Service a1973e
    .ucode  = 0x4200,
Packit Service a1973e
    .uequiv = "DEMAND_RFO_HIT",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CODE_RD_MISS",
Packit Service a1973e
    .udesc  = "L2 cache misses when fetching instructions",
Packit Service a1973e
    .ucode  = 0x2400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DEMAND_MISS",
Packit Service a1973e
    .udesc  = "All demand requests that miss the L2 cache",
Packit Service a1973e
    .ucode  = 0x2700,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CODE_RD_HIT",
Packit Service a1973e
    .udesc  = "L2 cache hits when fetching instructions, code reads",
Packit Service a1973e
    .ucode  = 0x4400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_PF_MISS",
Packit Service a1973e
    .udesc  = "Requests from the L2 hardware prefetchers that miss L2 cache",
Packit Service a1973e
    .ucode  = 0x3800,
Packit Service a1973e
    .uequiv = "PF_MISS",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PF_MISS",
Packit Service a1973e
    .udesc  = "Requests from the L2 hardware prefetchers that miss L2 cache",
Packit Service a1973e
    .ucode  = 0x3800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MISS",
Packit Service a1973e
    .udesc  = "All requests that miss the L2 cache",
Packit Service a1973e
    .ucode  = 0x3f00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_PF_HIT",
Packit Service a1973e
    .udesc  = "Requests from the L2 hardware prefetchers that hit L2 cache",
Packit Service a1973e
    .ucode  = 0xd800,
Packit Service a1973e
    .uequiv = "PF_HIT",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PF_HIT",
Packit Service a1973e
    .udesc  = "Requests from the L2 hardware prefetchers that hit L2 cache",
Packit Service a1973e
    .ucode  = 0xd800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DEMAND_DATA_RD",
Packit Service a1973e
    .udesc  = "Any data read request to L2 cache",
Packit Service a1973e
    .ucode  = 0xe100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_RFO",
Packit Service a1973e
    .udesc  = "Any data RFO request to L2 cache",
Packit Service a1973e
    .ucode  = 0xe200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_CODE_RD",
Packit Service a1973e
    .udesc  = "Any code read request to L2 cache",
Packit Service a1973e
    .ucode  = 0xe400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DEMAND_REFERENCES",
Packit Service a1973e
    .udesc  = "All demand requests to L2 cache ",
Packit Service a1973e
    .ucode  = 0xe700,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_PF",
Packit Service a1973e
    .udesc  = "Any L2 HW prefetch request to L2 cache",
Packit Service a1973e
    .ucode  = 0xf800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "REFERENCES",
Packit Service a1973e
    .udesc  = "All requests to L2 cache",
Packit Service a1973e
    .ucode  = 0xff00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_l2_trans[]={
Packit Service a1973e
  { .uname = "DEMAND_DATA_RD",
Packit Service a1973e
    .udesc  = "Demand Data Read requests that access L2 cache",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RFO",
Packit Service a1973e
    .udesc  = "RFO requests that access L2 cache",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CODE_RD",
Packit Service a1973e
    .udesc  = "L2 cache accesses when fetching instructions",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_PF",
Packit Service a1973e
    .udesc  = "L2 or L3 HW prefetches that access L2 cache, including rejects",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L1D_WB",
Packit Service a1973e
    .udesc  = "L1D writebacks that access L2 cache",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_FILL",
Packit Service a1973e
    .udesc  = "L2 fill requests that access L2 cache",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_WB",
Packit Service a1973e
    .udesc  = "L2 writebacks that access L2 cache",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_REQUESTS",
Packit Service a1973e
    .udesc  = "Transactions accessing L2 pipe",
Packit Service a1973e
    .ucode  = 0x8000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_ld_blocks[]={
Packit Service a1973e
  { .uname = "STORE_FORWARD",
Packit Service a1973e
    .udesc  = "Counts the number of loads blocked by overlapping with store buffer entries that cannot be forwarded",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "NO_SR",
Packit Service a1973e
    .udesc  = "number of times that split load operations are temporarily blocked because all resources for handling the split accesses are in use",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_ld_blocks_partial[]={
Packit Service a1973e
  { .uname = "ADDRESS_ALIAS",
Packit Service a1973e
    .udesc  = "False dependencies in MOB due to partial compare on address",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_load_hit_pre[]={
Packit Service a1973e
  { .uname = "HW_PF",
Packit Service a1973e
    .udesc  = "Non software-prefetch load dispatches that hit FB allocated for hardware prefetch",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SW_PF",
Packit Service a1973e
    .udesc  = "Non software-prefetch load dispatches that hit FB allocated for software prefetch",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_lock_cycles[]={
Packit Service a1973e
  { .uname = "SPLIT_LOCK_UC_LOCK_DURATION",
Packit Service a1973e
    .udesc  = "Cycles in which the L1D and L2 are locked, due to a UC lock or split lock",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CACHE_LOCK_DURATION",
Packit Service a1973e
    .udesc  = "cycles that the L1D is locked",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_longest_lat_cache[]={
Packit Service a1973e
  { .uname = "MISS",
Packit Service a1973e
    .udesc  = "Core-originated cacheable demand requests missed LLC - architectural event",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "REFERENCE",
Packit Service a1973e
    .udesc  = "Core-originated cacheable demand requests that refer to LLC - architectural event",
Packit Service a1973e
    .ucode  = 0x4f00,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_machine_clears[]={
Packit Service a1973e
  { .uname = "CYCLES",
Packit Service a1973e
    .udesc  = "Cycles there was a Nuke. Account for both thread-specific and All Thread Nukes",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MEMORY_ORDERING",
Packit Service a1973e
    .udesc  = "Number of Memory Ordering Machine Clears detected",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SMC",
Packit Service a1973e
    .udesc  = "Number of Self-modifying code (SMC) Machine Clears detected",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MASKMOV",
Packit Service a1973e
    .udesc  = "This event counts the number of executed Intel AVX masked load operations that refer to an illegal address range with the mask bits set to 0",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "COUNT",
Packit Service a1973e
    .udesc  = "Number of machine clears (nukes) of any type",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_EDGE | (1 << INTEL_X86_CMASK_BIT), /* edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "CYCLES:c=1:e",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_E | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_mem_load_uops_l3_hit_retired[]={
Packit Service a1973e
  { .uname = "XSNP_MISS",
Packit Service a1973e
    .udesc  = "Retired load uops which data sources were L3 hit and cross-core snoop missed in on-pkg core cache",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "XSNP_HIT",
Packit Service a1973e
    .udesc  = "Retired load uops which data sources were L3 and cross-core snoop hits in on-pkg core cache",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "XSNP_HITM",
Packit Service a1973e
    .udesc  = "Load had HitM Response from a core on same socket (shared L3). (Non PEBS",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "XSNP_NONE",
Packit Service a1973e
    .udesc  = "Retired load uops which data sources were hits in L3 without snoops required",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_mem_load_uops_l3_miss_retired[]={
Packit Service a1973e
  { .uname = "LOCAL_DRAM",
Packit Service a1973e
    .udesc  = "Retired load uops missing L3 cache but hitting local memory (Precise Event)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS ,
Packit Service a1973e
  },
Packit Service a1973e
   { .uname  = "REMOTE_DRAM",
Packit Service a1973e
     .udesc  = "Number of retired load uops that missed L3 but were service by remote RAM, snoop not needed, snoop miss, snoop hit data not forwarded (Precise Event)",
Packit Service a1973e
     .ucode = 0x400,
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "REMOTE_HITM",
Packit Service a1973e
     .udesc  = "Number of retired load uops whose data sources was remote HITM (Precise Event)",
Packit Service a1973e
     .ucode = 0x1000,
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "REMOTE_FWD",
Packit Service a1973e
     .udesc  = "Load uops that miss in the L3 whose data source was forwarded from a remote cache (Precise Event)",
Packit Service a1973e
     .ucode = 0x2000,
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_mem_load_uops_retired[]={
Packit Service a1973e
  { .uname = "L1_HIT",
Packit Service a1973e
    .udesc  = "Retired load uops with L1 cache hits as data source",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_HIT",
Packit Service a1973e
    .udesc  = "Retired load uops with L2 cache hits as data source",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L3_HIT",
Packit Service a1973e
    .udesc  = "Retired load uops with L3 cache hits as data source",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L1_MISS",
Packit Service a1973e
    .udesc  = "Retired load uops which missed the L1D",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L2_MISS",
Packit Service a1973e
    .udesc  = "Retired load uops which missed the L2. Unknown data source excluded",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "L3_MISS",
Packit Service a1973e
    .udesc  = "Retired load uops which missed the L3",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "HIT_LFB",
Packit Service a1973e
    .udesc  = "Retired load uops which missed L1 but hit line fill buffer (LFB)",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_mem_trans_retired[]={
Packit Service a1973e
  { .uname  = "LOAD_LATENCY",
Packit Service a1973e
    .udesc  = "Memory load instructions retired above programmed clocks, minimum threshold value is 3 (Precise Event and ldlat required)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS | INTEL_X86_LDLAT | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname  = "LATENCY_ABOVE_THRESHOLD",
Packit Service a1973e
    .udesc  = "Memory load instructions retired above programmed clocks, minimum threshold value is 3 (Precise Event and ldlat required)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "LOAD_LATENCY",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS | INTEL_X86_LDLAT | INTEL_X86_NO_AUTOENCODE,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_mem_uops_retired[]={
Packit Service a1973e
  { .uname = "STLB_MISS_LOADS",
Packit Service a1973e
    .udesc  = "Load uops with true STLB miss retired to architected path",
Packit Service a1973e
    .ucode  = 0x1100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_MISS_STORES",
Packit Service a1973e
    .udesc  = "Store uops with true STLB miss retired to architected path",
Packit Service a1973e
    .ucode  = 0x1200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "LOCK_LOADS",
Packit Service a1973e
    .udesc  = "Load uops with locked access retired",
Packit Service a1973e
    .ucode  = 0x2100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SPLIT_LOADS",
Packit Service a1973e
    .udesc  = "Line-splitted load uops retired",
Packit Service a1973e
    .ucode  = 0x4100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SPLIT_STORES",
Packit Service a1973e
    .udesc  = "Line-splitted store uops retired",
Packit Service a1973e
    .ucode  = 0x4200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_LOADS",
Packit Service a1973e
    .udesc  = "All load uops retired",
Packit Service a1973e
    .ucode  = 0x8100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_STORES",
Packit Service a1973e
    .udesc  = "All store uops retired",
Packit Service a1973e
    .ucode  = 0x8200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_misalign_mem_ref[]={
Packit Service a1973e
  { .uname = "LOADS",
Packit Service a1973e
    .udesc  = "Speculative cache-line split load uops dispatched to the L1D",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STORES",
Packit Service a1973e
    .udesc  = "Speculative cache-line split store-address uops dispatched to L1D",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_move_elimination[]={
Packit Service a1973e
  { .uname = "INT_ELIMINATED",
Packit Service a1973e
    .udesc  = "Number of integer Move Elimination candidate uops that were eliminated",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SIMD_ELIMINATED",
Packit Service a1973e
    .udesc  = "Number of SIMD Move Elimination candidate uops that were eliminated",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "INT_NOT_ELIMINATED",
Packit Service a1973e
    .udesc  = "Number of integer Move Elimination candidate uops that were not eliminated",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SIMD_NOT_ELIMINATED",
Packit Service a1973e
    .udesc  = "Number of SIMD Move Elimination candidate uops that were not eliminated",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_offcore_requests[]={
Packit Service a1973e
  { .uname  = "DEMAND_DATA_RD",
Packit Service a1973e
    .udesc  = "Demand data read requests sent to uncore (use with HT off only)",
Packit Service a1973e
    .ucode = 0x100,
Packit Service a1973e
    .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DEMAND_CODE_RD",
Packit Service a1973e
    .udesc  = "Demand code read requests sent to uncore (use with HT off only)",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "DEMAND_RFO",
Packit Service a1973e
    .udesc  = "Demand RFOs requests sent to uncore (use with HT off only)",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL_DATA_RD",
Packit Service a1973e
    .udesc  = "Data read requests sent to uncore (use with HT off only)",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_other_assists[]={
Packit Service a1973e
  { .uname = "AVX_TO_SSE",
Packit Service a1973e
    .udesc  = "Number of transitions from AVX-256 to legacy SSE when penalty applicable",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SSE_TO_AVX",
Packit Service a1973e
    .udesc  = "Number of transitions from legacy SSE to AVX-256 when penalty applicable",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY_WB_ASSIST",
Packit Service a1973e
    .udesc  = "Number of times any microcode assist is invoked by HW upon uop writeback",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_resource_stalls[]={
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "Cycles Allocation is stalled due to Resource Related reason",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "Cycles Allocation is stalled due to Resource Related reason",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "ANY",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RS",
Packit Service a1973e
    .udesc  = "Stall cycles caused by absence of eligible entries in Reservation Station (RS)",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SB",
Packit Service a1973e
    .udesc  = "Cycles Allocator is stalled due to Store Buffer full (not including draining from synch)",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ROB",
Packit Service a1973e
    .udesc  = "ROB full stall cycles",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_rob_misc_events[]={
Packit Service a1973e
  { .uname = "LBR_INSERTS",
Packit Service a1973e
    .udesc  = "Count each time an new Last Branch Record (LBR) is inserted",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_rs_events[]={
Packit Service a1973e
  { .uname = "EMPTY_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles the Reservation Station (RS) is empty for this thread",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "EMPTY_END",
Packit Service a1973e
    .udesc  = "Number of times the reservation station (RS) was empty",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV |  (1 << INTEL_X86_CMASK_BIT) | INTEL_X86_MOD_EDGE, /* inv=1, cmask=1,edge=1 */
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C | _INTEL_X86_ATTR_E,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_tlb_flush[]={
Packit Service a1973e
  { .uname = "DTLB_THREAD",
Packit Service a1973e
    .udesc  = "Count number of DTLB flushes of thread-specific entries",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STLB_ANY",
Packit Service a1973e
    .udesc  = "Count number of any STLB flushes",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_uops_executed[]={
Packit Service a1973e
  { .uname = "CORE",
Packit Service a1973e
    .udesc  = "Number of uops executed from any thread",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "THREAD",
Packit Service a1973e
    .udesc  = "Number of uops executed per thread each cycle",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_DFL | INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Number of cycles with no uops executed",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=1 */
Packit Service a1973e
    .uequiv = "THREAD:c=1:i",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_GE_1_UOP_EXEC",
Packit Service a1973e
    .udesc  = "Cycles where at least 1 uop was executed per thread",
Packit Service a1973e
    .ucode  = 0x100 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "THREAD:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_GE_2_UOPS_EXEC",
Packit Service a1973e
    .udesc  = "Cycles where at least 2 uops were executed per thread",
Packit Service a1973e
    .ucode  = 0x100 | (2 << INTEL_X86_CMASK_BIT), /* cnt=2 */
Packit Service a1973e
    .uequiv = "THREAD:c=2",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_GE_3_UOPS_EXEC",
Packit Service a1973e
    .udesc  = "Cycles where at least 3 uops were executed per thread",
Packit Service a1973e
    .ucode  = 0x100 | (3 << INTEL_X86_CMASK_BIT), /* cnt=3 */
Packit Service a1973e
    .uequiv = "THREAD:c=3",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CYCLES_GE_4_UOPS_EXEC",
Packit Service a1973e
    .udesc  = "Cycles where at least 4 uops were executed per thread",
Packit Service a1973e
    .ucode  = 0x100 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
    .uequiv = "THREAD:c=4",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_CYCLES_GE_1",
Packit Service a1973e
    .udesc  = "Cycles where at least 1 uop was executed from any thread",
Packit Service a1973e
    .ucode  = 0x200 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
    .uequiv = "CORE:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_CYCLES_GE_2",
Packit Service a1973e
    .udesc  = "Cycles where at least 2 uops were executed from any thread",
Packit Service a1973e
    .ucode  = 0x200 | (2 << INTEL_X86_CMASK_BIT), /* cnt=2 */
Packit Service a1973e
    .uequiv = "CORE:c=2",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_CYCLES_GE_3",
Packit Service a1973e
    .udesc  = "Cycles where at least 3 uops were executed from any thread",
Packit Service a1973e
    .ucode  = 0x200 | (3 << INTEL_X86_CMASK_BIT), /* cnt=3 */
Packit Service a1973e
    .uequiv = "CORE:c=3",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_CYCLES_GE_4",
Packit Service a1973e
    .udesc  = "Cycles where at least 4 uops were executed from any thread",
Packit Service a1973e
    .ucode  = 0x200 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
    .uequiv = "CORE:c=4",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_CYCLES_NONE",
Packit Service a1973e
    .udesc  = "Cycles where no uop is executed on any thread",
Packit Service a1973e
    .ucode  = 0x200 | INTEL_X86_MOD_INV, /* inv=1 */
Packit Service a1973e
    .uequiv = "CORE:i",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_uops_executed_port[]={
Packit Service a1973e
  { .uname = "PORT_0",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 0",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_1",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 1",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_2",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 2",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_3",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 3",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_4",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 4",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_5",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 5",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_6",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 6",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_7",
Packit Service a1973e
    .udesc  = "Cycles which a Uop is executed on port 7",
Packit Service a1973e
    .ucode  = 0x8000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_0_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_0:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_1_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x200 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_1:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_2_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x400 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_2:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_3_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x800 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_3:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_4_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x1000 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_4:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_5_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x2000 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_5:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_6_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x4000 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_6:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "PORT_7_CORE",
Packit Service a1973e
    .udesc  = "tbd",
Packit Service a1973e
    .ucode  = 0x8000 | INTEL_X86_MOD_ANY, /* any=1 */
Packit Service a1973e
    .uequiv = "PORT_7:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_uops_issued[]={
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "Number of Uops issued by the Resource Allocation Table (RAT) to the Reservation Station (RS)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "Number of Uops issued by the Resource Allocation Table (RAT) to the Reservation Station (RS)",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "ANY",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "FLAGS_MERGE",
Packit Service a1973e
    .udesc  = "Number of flags-merge uops being allocated. Such uops adds delay",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SLOW_LEA",
Packit Service a1973e
    .udesc  = "Number of slow LEA or similar uops allocated. Such uop has 3 sources regardless if result of LEA instruction or not",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "SINGLE_MUL",
Packit Service a1973e
    .udesc  = "Number of Multiply packed/scalar single precision uops allocated",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Counts the number of cycles no uops issued by this thread",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=1 */
Packit Service a1973e
    .uequiv = "ANY:c=1:i=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .ucntmsk = 0xf,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Counts the number of cycles no uops issued on this core",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_ANY | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* any=1 inv=1 cnt=1 */
Packit Service a1973e
    .uequiv = "ANY:c=1:i=1:t=1",
Packit Service a1973e
    .ucntmsk = 0xf,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_T | _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_uops_retired[]={
Packit Service a1973e
  { .uname = "ALL",
Packit Service a1973e
    .udesc  = "All uops that actually retired",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ANY",
Packit Service a1973e
    .udesc  = "All uops that actually retired",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uequiv = "ALL",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "RETIRE_SLOTS",
Packit Service a1973e
    .udesc  = "number of retirement slots used non PEBS",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles no executable uops retired (Precise Event)",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=1 */
Packit Service a1973e
    .uequiv = "ALL:i=1:c=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "TOTAL_CYCLES",
Packit Service a1973e
    .udesc  = "Number of cycles using always true condition applied to PEBS uops retired event",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (10 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=10 */
Packit Service a1973e
    .uequiv = "ALL:i=1:c=10",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "CORE_STALL_CYCLES",
Packit Service a1973e
    .udesc  = "Cycles no executable uops retired on core (Precise Event)",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | (1 << INTEL_X86_CMASK_BIT), /* inv=1 cnt=1 */
Packit Service a1973e
    .uequiv = "ALL:i=1:c=1:t=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "STALL_OCCURRENCES",
Packit Service a1973e
    .udesc  = "Number of transitions from stalled to unstalled execution (Precise Event)",
Packit Service a1973e
    .ucode  = 0x100 | INTEL_X86_MOD_INV | INTEL_X86_MOD_EDGE| (1 << INTEL_X86_CMASK_BIT), /* inv=1 edge=1 cnt=1 */
Packit Service a1973e
    .uequiv = "ALL:c=1:i=1:e=1",
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
    .modhw  = _INTEL_X86_ATTR_I | _INTEL_X86_ATTR_C | _INTEL_X86_ATTR_E,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_offcore_response[]={
Packit Service a1973e
   { .uname  = "DMND_DATA_RD",
Packit Service a1973e
     .udesc  = "Request: number of demand and DCU prefetch data reads of full and partial cachelines as well as demand data page table entry cacheline reads. Does not count L2 data read prefetches or instruction fetches",
Packit Service a1973e
     .ucode = 1ULL << (0 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DMND_RFO",
Packit Service a1973e
     .udesc  = "Request: number of demand and DCU prefetch reads for ownership (RFO) requests generated by a write to data cacheline. Does not count L2 RFO prefetches",
Packit Service a1973e
     .ucode = 1ULL << (1 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DMND_IFETCH",
Packit Service a1973e
     .udesc  = "Request: number of demand and DCU prefetch instruction cacheline reads. Does not count L2 code read prefetches",
Packit Service a1973e
     .ucode = 1ULL << (2 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "WB",
Packit Service a1973e
     .udesc  = "Request: number of writebacks (modified to exclusive) transactions",
Packit Service a1973e
     .ucode = 1ULL << (3 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_DATA_RD",
Packit Service a1973e
     .udesc  = "Request: number of data cacheline reads generated by L2 prefetchers",
Packit Service a1973e
     .ucode = 1ULL << (4 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_RFO",
Packit Service a1973e
     .udesc  = "Request: number of RFO requests generated by L2 prefetchers",
Packit Service a1973e
     .ucode = 1ULL << (5 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_IFETCH",
Packit Service a1973e
     .udesc  = "Request: number of code reads generated by L2 prefetchers",
Packit Service a1973e
     .ucode = 1ULL << (6 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_LLC_DATA_RD",
Packit Service a1973e
     .udesc  = "Request: number of L3 prefetcher requests to L2 for loads",
Packit Service a1973e
     .ucode = 1ULL << (7 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_LLC_RFO",
Packit Service a1973e
     .udesc  = "Request: number of RFO requests generated by L2 prefetcher",
Packit Service a1973e
     .ucode = 1ULL << (8 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PF_LLC_IFETCH",
Packit Service a1973e
     .udesc  = "Request: number of L2 prefetcher requests to L3 for instruction fetches",
Packit Service a1973e
     .ucode = 1ULL << (9 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "BUS_LOCKS",
Packit Service a1973e
     .udesc  = "Request: number bus lock and split lock requests",
Packit Service a1973e
     .ucode = 1ULL << (10 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "STRM_ST",
Packit Service a1973e
     .udesc  = "Request: number of streaming store requests",
Packit Service a1973e
     .ucode = 1ULL << (11 + 8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "OTHER",
Packit Service a1973e
     .udesc  = "Request: counts one of the following transaction types, including L3 invalidate, I/O, full or partial writes, WC or non-temporal stores, CLFLUSH, Fences, lock, unlock, split lock",
Packit Service a1973e
     .ucode = 1ULL << (15+8),
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ANY_IFETCH",
Packit Service a1973e
     .udesc  = "Request: combination of PF_IFETCH | DMND_IFETCH | PF_LLC_IFETCH",
Packit Service a1973e
     .uequiv = "PF_IFETCH:DMND_IFETCH:PF_LLC_IFETCH",
Packit Service a1973e
     .ucode = 0x24100,
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ANY_REQUEST",
Packit Service a1973e
     .udesc  = "Request: combination of all request umasks",
Packit Service a1973e
     .uequiv = "DMND_DATA_RD:DMND_RFO:DMND_IFETCH:WB:PF_DATA_RD:PF_RFO:PF_IFETCH:PF_LLC_DATA_RD:PF_LLC_RFO:PF_LLC_IFETCH:BUS_LOCKS:STRM_ST:OTHER",
Packit Service a1973e
     .ucode = 0x8fff00,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ANY_DATA",
Packit Service a1973e
     .udesc  = "Request: combination of DMND_DATA | PF_DATA_RD | PF_LLC_DATA_RD",
Packit Service a1973e
     .uequiv = "DMND_DATA_RD:PF_DATA_RD:PF_LLC_DATA_RD",
Packit Service a1973e
     .ucode = 0x9100,
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ANY_RFO",
Packit Service a1973e
     .udesc  = "Request: combination of DMND_RFO | PF_RFO | PF_LLC_RFO",
Packit Service a1973e
     .uequiv = "DMND_RFO:PF_RFO:PF_LLC_RFO",
Packit Service a1973e
     .ucode = 0x10300,
Packit Service a1973e
     .grpid = 0,
Packit Service a1973e
   },
Packit Service a1973e
Packit Service a1973e
   { .uname  = "ANY_RESPONSE",
Packit Service a1973e
     .udesc  = "Response: count any response type",
Packit Service a1973e
     .ucode = 1ULL << (16+8),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL | INTEL_X86_EXCL_GRP_GT,
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "NO_SUPP",
Packit Service a1973e
     .udesc  = "Supplier: counts number of times supplier information is not available",
Packit Service a1973e
     .ucode = 1ULL << (17+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HITM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in M-state (initial lookup)",
Packit Service a1973e
     .ucode = 1ULL << (18+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HITM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in M-state (initial lookup)",
Packit Service a1973e
     .ucode = 1ULL << (18+8),
Packit Service a1973e
     .uequiv = "L3_HITM",
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HITE",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in E-state",
Packit Service a1973e
     .ucode = 1ULL << (19+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HITE",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in E-state",
Packit Service a1973e
     .ucode = 1ULL << (19+8),
Packit Service a1973e
     .uequiv = "L3_HITE",
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HITS",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in S-state",
Packit Service a1973e
     .ucode = 1ULL << (20+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HITS",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in S-state",
Packit Service a1973e
     .ucode = 1ULL << (20+8),
Packit Service a1973e
     .uequiv = "L3_HITS",
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HITF",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in F-state",
Packit Service a1973e
     .ucode = 1ULL << (21+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HITF",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in F-state",
Packit Service a1973e
     .ucode = 1ULL << (20+8),
Packit Service a1973e
     .uequiv = "L3_HITF",
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HITMESF",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in any state (M, E, S, F)",
Packit Service a1973e
     .ucode  = 0xfULL << (18+8),
Packit Service a1973e
     .uequiv = "L3_HITM:L3_HITE:L3_HITS:L3_HITF",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HITMESF",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 hits in any state (M, E, S, F)",
Packit Service a1973e
     .ucode  = 0xfULL << (18+8),
Packit Service a1973e
     .uequiv = "L3_HITMESF",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_HIT",
Packit Service a1973e
     .udesc  = "Alias for L3_HITMESF",
Packit Service a1973e
     .ucode  = 0xfULL << (18+8),
Packit Service a1973e
     .uequiv = "L3_HITM:L3_HITE:L3_HITS:L3_HITF",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_HIT",
Packit Service a1973e
     .udesc  = "Alias for LLC_HITMESF",
Packit Service a1973e
     .ucode  = 0xfULL << (18+8),
Packit Service a1973e
     .uequiv = "L3_HITM:L3_HITE:L3_HITS:L3_HITF",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_LOCAL",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to local DRAM",
Packit Service a1973e
     .ucode  = 1ULL << (26+8),
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_MISS_LOCAL",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to local DRAM",
Packit Service a1973e
     .ucode  = 1ULL << (26+8),
Packit Service a1973e
     .uequiv = "L3_MISS_LOCAL",
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "LLC_MISS_LOCAL_DRAM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to local DRAM",
Packit Service a1973e
     .ucode  = 1ULL << (26+8),
Packit Service a1973e
     .uequiv = "L3_MISS_LOCAL",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to local DRAM",
Packit Service a1973e
     .ucode  = 1ULL << (26+8),
Packit Service a1973e
     .uequiv = "L3_MISS_LOCAL",
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to local or remote DRAM",
Packit Service a1973e
     .ucode  = 0xfULL << (26+8),
Packit Service a1973e
     .uequiv = "L3_MISS_LOCAL:L3_MISS_REMOTE_HOP0:L3_MISS_REMOTE_HOP1:L3_MISS_REMOTE_HOP2P",
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP0",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 0 hop",
Packit Service a1973e
     .ucode  = 0x1ULL << (27+8),
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP0_DRAM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 0 hop",
Packit Service a1973e
     .ucode  = 0x1ULL << (27+8),
Packit Service a1973e
     .uequiv = "L3_MISS_REMOTE_HOP0",
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP1",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 1 hop",
Packit Service a1973e
     .ucode  = 0x1ULL << (28+8),
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP1_DRAM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 1 hop",
Packit Service a1973e
     .ucode  = 0x1ULL << (28+8),
Packit Service a1973e
     .uequiv = "L3_MISS_REMOTE_HOP1",
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP2P",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 2P hops",
Packit Service a1973e
     .ucode  = 0x1ULL << (29+8),
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_HOP2P_DRAM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote DRAM with 2P hops",
Packit Service a1973e
     .ucode  = 0x1ULL << (29+8),
Packit Service a1973e
     .uequiv = "L3_MISS_REMOTE_HOP2P",
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote node",
Packit Service a1973e
     .uequiv = "L3_MISS_REMOTE_HOP0:L3_MISS_REMOTE_HOP1:L3_MISS_REMOTE_HOP2P",
Packit Service a1973e
     .ucode  = 0x7ULL << (27+8),
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "L3_MISS_REMOTE_DRAM",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 misses to remote node",
Packit Service a1973e
     .ucode  = 0x7ULL << (27+8),
Packit Service a1973e
     .uequiv = "L3_MISS_REMOTE",
Packit Service a1973e
     .umodel = PFM_PMU_INTEL_BDW_EP,
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SPL_HIT",
Packit Service a1973e
     .udesc  = "Supplier: counts L3 supplier hit",
Packit Service a1973e
     .ucode  = 0x1ULL << (30+8),
Packit Service a1973e
     .grpid  = 1,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname = "SNP_NONE",
Packit Service a1973e
     .udesc = "Snoop: counts number of times no snoop-related information is available",
Packit Service a1973e
     .ucode = 1ULL << (31+8),
Packit Service a1973e
     .grpid = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname = "SNP_NOT_NEEDED",
Packit Service a1973e
     .udesc = "Snoop: counts the number of times no snoop was needed to satisfy the request",
Packit Service a1973e
     .ucode = 1ULL << (32+8),
Packit Service a1973e
     .grpid = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname = "SNP_MISS",
Packit Service a1973e
     .udesc = "Snoop: counts number of times a snoop was needed and it missed all snooped caches",
Packit Service a1973e
     .ucode = 1ULL << (33+8),
Packit Service a1973e
     .grpid = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname = "SNP_NO_FWD",
Packit Service a1973e
     .udesc = "Snoop: counts number of times a snoop was needed and it hit in at leas one snooped cache",
Packit Service a1973e
     .ucode = 1ULL << (34+8),
Packit Service a1973e
     .grpid = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname = "SNP_FWD",
Packit Service a1973e
     .udesc = "Snoop: counts number of times a snoop was needed and data was forwarded from a remote socket",
Packit Service a1973e
     .ucode = 1ULL << (35+8),
Packit Service a1973e
     .grpid = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "HITM",
Packit Service a1973e
     .udesc  = "Snoop: counts number of times a snoop was needed and it hitM-ed in local or remote cache",
Packit Service a1973e
     .ucode  = 1ULL << (36+8),
Packit Service a1973e
     .uequiv = "SNP_HITM",
Packit Service a1973e
     .grpid  = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SNP_HITM",
Packit Service a1973e
     .udesc  = "Snoop: counts number of times a snoop was needed and it hitM-ed in local or remote cache",
Packit Service a1973e
     .ucode  = 1ULL << (36+8),
Packit Service a1973e
     .grpid  = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "NON_DRAM",
Packit Service a1973e
     .udesc  = "Snoop:  counts number of times target was a non-DRAM system address. This includes MMIO transactions",
Packit Service a1973e
     .ucode  = 1ULL << (37+8),
Packit Service a1973e
     .grpid  = 2,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SNP_ANY",
Packit Service a1973e
     .udesc  = "Snoop: any snoop reason",
Packit Service a1973e
     .ucode  = 0x7fULL << (31+8),
Packit Service a1973e
     .uequiv = "SNP_NONE:SNP_NOT_NEEDED:SNP_MISS:SNP_NO_FWD:SNP_FWD:HITM:NON_DRAM",
Packit Service a1973e
     .uflags = INTEL_X86_DFL,
Packit Service a1973e
     .grpid  = 2,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_hle_retired[]={
Packit Service a1973e
  { .uname = "START",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution started",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "COMMIT",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution successfully committed",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to any reasons (multiple categories may count as one) (Precise Event)",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC1",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to various memory events",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC2",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to uncommon conditions",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC3",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to HLE-unfriendly instructions",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC4",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to incompatible memory type",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC5",
Packit Service a1973e
    .udesc  = "Number of times an HLE execution aborted due to none of the other 4 reasons (e.g., interrupt)",
Packit Service a1973e
    .ucode  = 0x8000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_rtm_retired[]={
Packit Service a1973e
  { .uname = "START",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution started",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "COMMIT",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution successfully committed",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to any reasons (multiple categories may count as one) (Precise Event)",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO | INTEL_X86_PEBS,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC1",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to various memory events",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC2",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to uncommon conditions",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC3",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to RTM-unfriendly instructions",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC4",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to incompatible memory type",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORTED_MISC5",
Packit Service a1973e
    .udesc  = "Number of times an RTM execution aborted due to none of the other 4 reasons (e.g., interrupt)",
Packit Service a1973e
    .ucode  = 0x8000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_tx_mem[]={
Packit Service a1973e
  { .uname = "ABORT_CONFLICT",
Packit Service a1973e
    .udesc  = "Number of times a transactional abort was signaled due to data conflict on a transactionally accessed address",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_CAPACITY",
Packit Service a1973e
    .udesc  = "Number of times a transactional abort was signaled due to data capacity limitation",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_HLE_STORE_TO_ELIDED_LOCK",
Packit Service a1973e
    .udesc  = "Number of times a HLE transactional execution aborted due to a non xrelease prefixed instruction writing to an elided lock in the elision buffer",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_HLE_ELISION_BUFFER_NOT_EMPTY",
Packit Service a1973e
    .udesc  = "Number of times a HLE transactional execution aborted due to NoAllocatedElisionBuffer being non-zero",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_HLE_ELISION_BUFFER_MISMATCH",
Packit Service a1973e
    .udesc  = "Number of times a HLE transaction execution aborted due to xrelease lock not satisfying the address and value requirements in the elision buffer",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_HLE_ELISION_BUFFER_UNSUPPORTED_ALIGNMENT",
Packit Service a1973e
    .udesc  = "Number of times a HLE transaction execution aborted due to an unsupported read alignment from the elision buffer",
Packit Service a1973e
    .ucode  = 0x2000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "ABORT_HLE_ELISION_BUFFER_FULL",
Packit Service a1973e
    .udesc  = "Number of times a HLE clock could not be elided due to ElisionBufferAvailable being zero",
Packit Service a1973e
    .ucode  = 0x4000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_tx_exec[]={
Packit Service a1973e
  { .uname = "MISC1",
Packit Service a1973e
    .udesc  = "Number of times a class of instructions that may cause a transactional abort was executed. Since this is the count of execution, it may not always cause a transactional abort",
Packit Service a1973e
    .ucode  = 0x100,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MISC2",
Packit Service a1973e
    .udesc  = "Number of times a class of instructions that may cause a transactional abort was executed inside a transactional region",
Packit Service a1973e
    .ucode  = 0x200,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MISC3",
Packit Service a1973e
    .udesc  = "Number of times an instruction execution caused the supported nest count to be exceeded",
Packit Service a1973e
    .ucode  = 0x400,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MISC4",
Packit Service a1973e
    .udesc  = "Number of times an instruction a xbegin instruction was executed inside HLE transactional region",
Packit Service a1973e
    .ucode  = 0x800,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
  { .uname = "MISC5",
Packit Service a1973e
    .udesc  = "Number of times an instruction with HLE xacquire prefix was executed inside a RTM transactional region",
Packit Service a1973e
    .ucode  = 0x1000,
Packit Service a1973e
    .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
  },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_offcore_requests_outstanding[]={
Packit Service a1973e
   { .uname  = "ALL_DATA_RD_CYCLES",
Packit Service a1973e
     .udesc  = "Cycles with cacheable data read transactions in the superQ (use with HT off only)",
Packit Service a1973e
     .uequiv = "ALL_DATA_RD:c=1",
Packit Service a1973e
     .ucode = 0x800 | (0x1 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_CODE_RD_CYCLES",
Packit Service a1973e
     .udesc  = "Cycles with demand code reads transactions in the superQ (use with HT off only)",
Packit Service a1973e
     .uequiv = "DEMAND_CODE_RD:c=1",
Packit Service a1973e
     .ucode = 0x200 | (0x1 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_DATA_RD_CYCLES",
Packit Service a1973e
     .udesc  = "Cycles with demand data read transactions in the superQ (use with HT off only)",
Packit Service a1973e
     .uequiv = "DEMAND_DATA_RD:c=1",
Packit Service a1973e
     .ucode = 0x100 | (0x1 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ALL_DATA_RD",
Packit Service a1973e
     .udesc  = "Cacheable data read transactions in the superQ every cycle (use with HT off only)",
Packit Service a1973e
     .ucode = 0x800,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_CODE_RD",
Packit Service a1973e
     .udesc  = "Code read transactions in the superQ every cycle (use with HT off only)",
Packit Service a1973e
     .ucode = 0x200,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_DATA_RD",
Packit Service a1973e
     .udesc  = "Demand data read transactions in the superQ every cycle (use with HT off only)",
Packit Service a1973e
     .ucode = 0x100,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_DATA_RD_GE_6",
Packit Service a1973e
     .udesc  = "Cycles with at lesat 6 offcore outstanding demand data read requests in the uncore queue",
Packit Service a1973e
     .uequiv = "DEMAND_DATA_RD:c=6",
Packit Service a1973e
     .ucode = 0x100 | (6 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_RFO",
Packit Service a1973e
     .udesc  = "Outstanding RFO (store) transactions in the superQ every cycle (use with HT off only)",
Packit Service a1973e
     .ucode = 0x400,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DEMAND_RFO_CYCLES",
Packit Service a1973e
     .udesc  = "Cycles with outstanding RFO (store) transactions in the superQ (use with HT off only)",
Packit Service a1973e
     .uequiv = "DEMAND_RFO:c=1",
Packit Service a1973e
     .ucode = 0x400 | (0x1 << INTEL_X86_CMASK_BIT),
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_ild_stall[]={
Packit Service a1973e
   { .uname  = "LCP",
Packit Service a1973e
     .udesc  = "Stall caused by changing prefix length of the instruction",
Packit Service a1973e
     .ucode = 0x100,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_page_walker_loads[]={
Packit Service a1973e
   { .uname  = "DTLB_L1",
Packit Service a1973e
     .udesc  = "Number of DTLB page walker loads that hit in the L1D and line fill buffer",
Packit Service a1973e
     .ucode = 0x1100,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ITLB_L1",
Packit Service a1973e
     .udesc  = "Number of ITLB page walker loads that hit in the L1I and line fill buffer",
Packit Service a1973e
     .ucode = 0x2100,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DTLB_L2",
Packit Service a1973e
     .udesc  = "Number of DTLB page walker loads that hit in the L2",
Packit Service a1973e
     .ucode = 0x1200,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ITLB_L2",
Packit Service a1973e
     .udesc  = "Number of ITLB page walker loads that hit in the L2",
Packit Service a1973e
     .ucode = 0x2200,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DTLB_L3",
Packit Service a1973e
     .udesc  = "Number of DTLB page walker loads that hit in the L3",
Packit Service a1973e
     .ucode = 0x1400,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ITLB_L3",
Packit Service a1973e
     .udesc  = "Number of ITLB page walker loads that hit in the L3",
Packit Service a1973e
     .ucode = 0x2400,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DTLB_MEMORY",
Packit Service a1973e
     .udesc  = "Number of DTLB page walker loads that hit memory",
Packit Service a1973e
     .ucode = 0x1800,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_lsd[]={
Packit Service a1973e
   { .uname  = "UOPS",
Packit Service a1973e
     .udesc  = "Number of uops delivered by the Loop Stream Detector (LSD)",
Packit Service a1973e
     .ucode = 0x100,
Packit Service a1973e
     .uflags= INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "ACTIVE",
Packit Service a1973e
     .udesc  = "Cycles with uops delivered by the LSD but which did not come from decoder",
Packit Service a1973e
     .ucode  = 0x100 | (1 << INTEL_X86_CMASK_BIT), /* cnt=1 */
Packit Service a1973e
     .uequiv = "UOPS:c=1",
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "CYCLES_4_UOPS",
Packit Service a1973e
     .udesc  = "Cycles with 4 uops delivered by the LSD but which did not come from decoder",
Packit Service a1973e
     .ucode  = 0x100 | (4 << INTEL_X86_CMASK_BIT), /* cnt=4 */
Packit Service a1973e
     .uequiv = "UOPS:c=4",
Packit Service a1973e
     .uflags = INTEL_X86_NCOMBO,
Packit Service a1973e
     .modhw  = _INTEL_X86_ATTR_C,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_dsb2mite_switches[]={
Packit Service a1973e
   { .uname  = "PENALTY_CYCLES",
Packit Service a1973e
     .udesc  = "Number of DSB to MITE switch true penalty cycles",
Packit Service a1973e
     .ucode = 0x0200,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_ept[]={
Packit Service a1973e
   { .uname  = "WALK_CYCLES",
Packit Service a1973e
     .udesc  = "Cycles for an extended page table walk",
Packit Service a1973e
     .ucode = 0x1000,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_arith[]={
Packit Service a1973e
   { .uname  = "FPU_DIV_ACTIVE",
Packit Service a1973e
     .udesc  = "Cycles when divider is busy execuing divide operations",
Packit Service a1973e
     .ucode = 0x0100,
Packit Service a1973e
     .uflags= INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_fp_arith[]={
Packit Service a1973e
   { .uname  = "SCALAR_DOUBLE",
Packit Service a1973e
     .udesc  = "Number of scalar double precision floating-point arithmetic instructions (multiply by 1 to get flops)",
Packit Service a1973e
     .ucode = 0x0100,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SCALAR_SINGLE",
Packit Service a1973e
     .udesc  = "Number of scalar single precision floating-point arithmetic instructions (multiply by 1 to get flops)",
Packit Service a1973e
     .ucode = 0x0200,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SCALAR",
Packit Service a1973e
     .udesc  = "Number of SSE/AVX computational scalar floating-point instructions retired. Applies to SSE* and AVX* scalar, double and single precision floating-point: ADD SUB MUL DIV MIN MAX RSQRT RCP SQRT FM(N)ADD/SUB. FM(N)ADD/SUB instructions count twice as they perform multiple calculations per element",
Packit Service a1973e
     .ucode = 0x0300,
Packit Service a1973e
     .uequiv = "SCALAR_DOUBLE:SCALAR_SINGLE",
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "128B_PACKED_DOUBLE",
Packit Service a1973e
     .udesc  = "Number of scalar 128-bit packed double precision floating-point arithmetic instructions (multiply by 2 to get flops)",
Packit Service a1973e
     .ucode = 0x0400,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "128B_PACKED_SINGLE",
Packit Service a1973e
     .udesc  = "Number of scalar 128-bit packed single precision floating-point arithmetic instructions (multiply by 4 to get flops)",
Packit Service a1973e
     .ucode = 0x0800,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "256B_PACKED_DOUBLE",
Packit Service a1973e
     .udesc  = "Number of scalar 256-bit packed double precision floating-point arithmetic instructions (multiply by 4 to get flops)",
Packit Service a1973e
     .ucode = 0x1000,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "256B_PACKED_SINGLE",
Packit Service a1973e
     .udesc  = "Number of scalar 256-bit packed single precision floating-point arithmetic instructions (multiply by 8 to get flops)",
Packit Service a1973e
     .ucode = 0x2000,
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "PACKED",
Packit Service a1973e
     .udesc  = "Number of SSE/AVX computational packed floating-point instructions retired. Applies to SSE* and AVX*, packed, double and single precision floating-point: ADD SUB MUL DIV MIN MAX RSQRT RCP SQRT DPP FM(N)ADD/SUB.  DPP and FM(N)ADD/SUB instructions count twice as they perform multiple calculations per element",
Packit Service a1973e
     .ucode = 0x3c00,
Packit Service a1973e
     .uequiv = "128B_PACKED_DOUBLE:128B_PACKED_SINGLE:256B_PACKED_SINGLE:256B_PACKED_DOUBLE",
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "SINGLE",
Packit Service a1973e
     .udesc  = "Number of SSE/AVX computational single precision floating-point instructions retired. Applies to SSE* and AVX*scalar, double and single precision floating-point: ADD SUB MUL DIV MIN MAX RCP RSQRT SQRT DPP FM(N)ADD/SUB.  DPP and FM(N)ADD/SUB instructions count twice as they perform multiple calculations per element",
Packit Service a1973e
     .ucode = 0x2a00,
Packit Service a1973e
     .uequiv = "256B_PACKED_SINGLE:128B_PACKED_SINGLE:SCALAR_SINGLE",
Packit Service a1973e
   },
Packit Service a1973e
   { .uname  = "DOUBLE",
Packit Service a1973e
     .udesc  = "Number of SSE/AVX computational double precision floating-point instructions retired. Applies to SSE* and AVX*scalar, double and single precision floating-point: ADD SUB MUL DIV MIN MAX SQRT DPP FM(N)ADD/SUB.  DPP and FM(N)ADD/SUB instructions count twice as they perform multiple calculations per element",
Packit Service a1973e
     .ucode = 0x1500,
Packit Service a1973e
     .uequiv = "SCALAR_DOUBLE:128B_PACKED_DOUBLE:256B_PACKED_DOUBLE",
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_offcore_requests_buffer[]={
Packit Service a1973e
   { .uname  = "SQ_FULL",
Packit Service a1973e
     .udesc  = "Number of cycles the offcore requests buffer is full",
Packit Service a1973e
     .ucode = 0x0100,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_umask_t bdw_uops_dispatches_cancelled[]={
Packit Service a1973e
   { .uname  = "SIMD_PRF",
Packit Service a1973e
     .udesc  = "Number of uops cancelled after they were dispatched from the scheduler to the execution units when the total number of physical register read ports exceeds the read bandwidth of the register file. This umask applies to instructions: DPPS, DPPS, VPCMPESTRI, PCMPESTRI, VPCMPESTRM, PCMPESTRM, VFMADD*, VFMADDSUB*, VFMSUB*, VMSUBADD*, VFNMADD*, VFNMSUB*",
Packit Service a1973e
     .ucode = 0x0300,
Packit Service a1973e
     .uflags= INTEL_X86_NCOMBO | INTEL_X86_DFL,
Packit Service a1973e
   },
Packit Service a1973e
};
Packit Service a1973e
Packit Service a1973e
static const intel_x86_entry_t intel_bdw_pe[]={
Packit Service a1973e
  { .name   = "UNHALTED_CORE_CYCLES",
Packit Service a1973e
    .desc   = "Count core clock cycles whenever the clock signal on the specific core is running (not halted)",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0x20000000full,
Packit Service a1973e
    .code = 0x3c,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "UNHALTED_REFERENCE_CYCLES",
Packit Service a1973e
    .desc   = "Unhalted reference cycles",
Packit Service a1973e
    .modmsk = INTEL_FIXED3_ATTRS,
Packit Service a1973e
    .cntmsk = 0x400000000ull,
Packit Service a1973e
    .code = 0x0300, /* pseudo encoding */
Packit Service a1973e
    .flags = INTEL_X86_FIXED,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "INSTRUCTION_RETIRED",
Packit Service a1973e
    .desc   = "Number of instructions at retirement",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0x10000000full,
Packit Service a1973e
    .code = 0xc0,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "INSTRUCTIONS_RETIRED",
Packit Service a1973e
    .desc   = "This is an alias for INSTRUCTION_RETIRED",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .equiv = "INSTRUCTION_RETIRED",
Packit Service a1973e
    .cntmsk = 0x10000000full,
Packit Service a1973e
    .code = 0xc0,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "BRANCH_INSTRUCTIONS_RETIRED",
Packit Service a1973e
    .desc   = "Count branch instructions at retirement. Specifically, this event counts the retirement of the last micro-op of a branch instruction",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .equiv = "BR_INST_RETIRED:ALL_BRANCHES",
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0xc4,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "MISPREDICTED_BRANCH_RETIRED",
Packit Service a1973e
    .desc   = "Count mispredicted branch instructions at retirement. Specifically, this event counts at retirement of the last micro-op of a branch instruction in the architectural path of the execution and experienced misprediction in the branch prediction hardware",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .equiv = "BR_MISP_RETIRED:ALL_BRANCHES",
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0xc5,
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "BACLEARS",
Packit Service a1973e
    .desc   = "Branch re-steered",
Packit Service a1973e
    .code = 0xe6,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_baclears),
Packit Service a1973e
    .umasks  = bdw_baclears
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "BR_INST_EXEC",
Packit Service a1973e
    .desc   = "Branch instructions executed",
Packit Service a1973e
    .code = 0x88,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_br_inst_exec),
Packit Service a1973e
    .umasks  = bdw_br_inst_exec
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "BR_INST_RETIRED",
Packit Service a1973e
    .desc   = "Branch instructions retired (Precise Event)",
Packit Service a1973e
    .code = 0xc4,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_br_inst_retired),
Packit Service a1973e
    .umasks  = bdw_br_inst_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "BR_MISP_EXEC",
Packit Service a1973e
    .desc   = "Mispredicted branches executed",
Packit Service a1973e
    .code = 0x89,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_br_misp_exec),
Packit Service a1973e
    .umasks  = bdw_br_misp_exec
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "BR_MISP_RETIRED",
Packit Service a1973e
    .desc   = "Mispredicted retired branches (Precise Event)",
Packit Service a1973e
    .code = 0xc5,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_br_misp_retired),
Packit Service a1973e
    .umasks  = bdw_br_misp_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "CPL_CYCLES",
Packit Service a1973e
    .desc   = "Unhalted core cycles at a specific ring level",
Packit Service a1973e
    .code = 0x5c,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_cpl_cycles),
Packit Service a1973e
    .umasks  = bdw_cpl_cycles
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "CPU_CLK_THREAD_UNHALTED",
Packit Service a1973e
    .desc   = "Count core clock cycles whenever the clock signal on the specific core is running (not halted)",
Packit Service a1973e
    .code = 0x3c,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_cpu_clk_thread_unhalted),
Packit Service a1973e
    .umasks  = bdw_cpu_clk_thread_unhalted
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "CPU_CLK_UNHALTED",
Packit Service a1973e
    .desc   = "Count core clock cycles whenever the clock signal on the specific core is running (not halted)",
Packit Service a1973e
    .code = 0x3c,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .equiv = "CPU_CLK_THREAD_UNHALTED",
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "CYCLE_ACTIVITY",
Packit Service a1973e
    .desc   = "Stalled cycles",
Packit Service a1973e
    .code = 0xa3,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_cycle_activity),
Packit Service a1973e
    .umasks  = bdw_cycle_activity
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "DTLB_LOAD_MISSES",
Packit Service a1973e
    .desc   = "Data TLB load misses",
Packit Service a1973e
    .code = 0x8,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_dtlb_load_misses),
Packit Service a1973e
    .umasks  = bdw_dtlb_load_misses
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "DTLB_STORE_MISSES",
Packit Service a1973e
    .desc = "Data TLB store misses",
Packit Service a1973e
    .code = 0x49,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_dtlb_load_misses),
Packit Service a1973e
    .umasks  = bdw_dtlb_load_misses /* shared */
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "FP_ASSIST",
Packit Service a1973e
    .desc = "X87 floating-point assists",
Packit Service a1973e
    .code = 0xca,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_fp_assist),
Packit Service a1973e
    .umasks  = bdw_fp_assist
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "HLE_RETIRED",
Packit Service a1973e
    .desc = "HLE execution (Precise Event)",
Packit Service a1973e
    .code = 0xc8,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_hle_retired),
Packit Service a1973e
    .umasks  = bdw_hle_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "ICACHE",
Packit Service a1973e
    .desc = "Instruction Cache",
Packit Service a1973e
    .code = 0x80,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_icache),
Packit Service a1973e
    .umasks  = bdw_icache
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "IDQ",
Packit Service a1973e
    .desc   = "IDQ operations",
Packit Service a1973e
    .code = 0x79,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_idq),
Packit Service a1973e
    .umasks  = bdw_idq
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "IDQ_UOPS_NOT_DELIVERED",
Packit Service a1973e
    .desc   = "Uops not delivered",
Packit Service a1973e
    .code = 0x9c,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_idq_uops_not_delivered),
Packit Service a1973e
    .umasks  = bdw_idq_uops_not_delivered
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "INST_RETIRED",
Packit Service a1973e
    .desc = "Number of instructions retired (Precise Event)",
Packit Service a1973e
    .code = 0xc0,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_inst_retired),
Packit Service a1973e
    .umasks  = bdw_inst_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "INT_MISC",
Packit Service a1973e
    .desc = "Miscellaneous interruptions",
Packit Service a1973e
    .code = 0xd,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_int_misc),
Packit Service a1973e
    .umasks  = bdw_int_misc
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "ITLB",
Packit Service a1973e
    .desc   = "Instruction TLB",
Packit Service a1973e
    .code = 0xae,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_itlb),
Packit Service a1973e
    .umasks  = bdw_itlb
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "ITLB_MISSES",
Packit Service a1973e
    .desc = "Instruction TLB misses",
Packit Service a1973e
    .code = 0x85,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_itlb_misses),
Packit Service a1973e
    .umasks  = bdw_itlb_misses
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L1D",
Packit Service a1973e
    .desc   = "L1D cache",
Packit Service a1973e
    .code = 0x51,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l1d),
Packit Service a1973e
    .umasks  = bdw_l1d
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L1D_PEND_MISS",
Packit Service a1973e
    .desc   = "L1D pending misses",
Packit Service a1973e
    .code = 0x48,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l1d_pend_miss),
Packit Service a1973e
    .umasks  = bdw_l1d_pend_miss
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L2_DEMAND_RQSTS",
Packit Service a1973e
    .desc = "Demand Data Read requests to L2",
Packit Service a1973e
    .code = 0x27,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l2_demand_rqsts),
Packit Service a1973e
    .umasks  = bdw_l2_demand_rqsts
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L2_LINES_IN",
Packit Service a1973e
    .desc   = "L2 lines allocated",
Packit Service a1973e
    .code = 0xf1,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l2_lines_in),
Packit Service a1973e
    .umasks  = bdw_l2_lines_in
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L2_LINES_OUT",
Packit Service a1973e
    .desc   = "L2 lines evicted",
Packit Service a1973e
    .code = 0xf2,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l2_lines_out),
Packit Service a1973e
    .umasks  = bdw_l2_lines_out
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L2_RQSTS",
Packit Service a1973e
    .desc   = "L2 requests",
Packit Service a1973e
    .code = 0x24,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l2_rqsts),
Packit Service a1973e
    .umasks  = bdw_l2_rqsts
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "L2_TRANS",
Packit Service a1973e
    .desc   = "L2 transactions",
Packit Service a1973e
    .code = 0xf0,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_l2_trans),
Packit Service a1973e
    .umasks  = bdw_l2_trans
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LD_BLOCKS",
Packit Service a1973e
    .desc   = "Blocking loads",
Packit Service a1973e
    .code = 0x3,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_ld_blocks),
Packit Service a1973e
    .umasks  = bdw_ld_blocks
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LD_BLOCKS_PARTIAL",
Packit Service a1973e
    .desc   = "Partial load blocks",
Packit Service a1973e
    .code = 0x7,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_ld_blocks_partial),
Packit Service a1973e
    .umasks  = bdw_ld_blocks_partial
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LOAD_HIT_PRE",
Packit Service a1973e
    .desc   = "Load dispatches",
Packit Service a1973e
    .code = 0x4c,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_load_hit_pre),
Packit Service a1973e
    .umasks  = bdw_load_hit_pre
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LOCK_CYCLES",
Packit Service a1973e
    .desc   = "Locked cycles in L1D and L2",
Packit Service a1973e
    .code = 0x63,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_lock_cycles),
Packit Service a1973e
    .umasks  = bdw_lock_cycles
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LONGEST_LAT_CACHE",
Packit Service a1973e
    .desc   = "L3 cache",
Packit Service a1973e
    .code = 0x2e,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_longest_lat_cache),
Packit Service a1973e
    .umasks  = bdw_longest_lat_cache
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MACHINE_CLEARS",
Packit Service a1973e
    .desc   = "Machine clear asserted",
Packit Service a1973e
    .code = 0xc3,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_machine_clears),
Packit Service a1973e
    .umasks  = bdw_machine_clears
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_LOAD_UOPS_L3_HIT_RETIRED",
Packit Service a1973e
    .desc   = "L3 hit load uops retired (Precise Event)",
Packit Service a1973e
    .code = 0xd2,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_load_uops_l3_hit_retired),
Packit Service a1973e
    .umasks  = bdw_mem_load_uops_l3_hit_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_LOAD_UOPS_LLC_HIT_RETIRED",
Packit Service a1973e
    .desc   = "L3 hit load uops retired (Precise Event)",
Packit Service a1973e
    .equiv = "MEM_LOAD_UOPS_L3_HIT_RETIRED",
Packit Service a1973e
    .code = 0xd2,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_load_uops_l3_hit_retired),
Packit Service a1973e
    .umasks  = bdw_mem_load_uops_l3_hit_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_LOAD_UOPS_L3_MISS_RETIRED",
Packit Service a1973e
    .desc   = "Load uops retired that missed the L3 (Precise Event)",
Packit Service a1973e
    .code = 0xd3,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_load_uops_l3_miss_retired),
Packit Service a1973e
    .umasks  = bdw_mem_load_uops_l3_miss_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_LOAD_UOPS_LLC_MISS_RETIRED",
Packit Service a1973e
    .desc   = "Load uops retired that missed the L3 (Precise Event)",
Packit Service a1973e
    .equiv = "MEM_LOAD_UOPS_L3_MISS_RETIRED",
Packit Service a1973e
    .code = 0xd3,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_load_uops_l3_miss_retired),
Packit Service a1973e
    .umasks  = bdw_mem_load_uops_l3_miss_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_LOAD_UOPS_RETIRED",
Packit Service a1973e
    .desc = "Retired load uops (Precise Event)",
Packit Service a1973e
    .code = 0xd1,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_load_uops_retired),
Packit Service a1973e
    .umasks  = bdw_mem_load_uops_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_TRANS_RETIRED",
Packit Service a1973e
    .desc   = "Memory transactions retired (Precise Event)",
Packit Service a1973e
    .code = 0xcd,
Packit Service a1973e
    .cntmsk = 0x8,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS | _INTEL_X86_ATTR_LDLAT,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_trans_retired),
Packit Service a1973e
    .umasks  = bdw_mem_trans_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MEM_UOPS_RETIRED",
Packit Service a1973e
    .desc = "Memory uops retired (Precise Event)",
Packit Service a1973e
    .code = 0xd0,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_mem_uops_retired),
Packit Service a1973e
    .umasks  = bdw_mem_uops_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MISALIGN_MEM_REF",
Packit Service a1973e
    .desc = "Misaligned memory references",
Packit Service a1973e
    .code = 0x5,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_misalign_mem_ref),
Packit Service a1973e
    .umasks  = bdw_misalign_mem_ref
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "MOVE_ELIMINATION",
Packit Service a1973e
    .desc = "Move Elimination",
Packit Service a1973e
    .code = 0x58,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_move_elimination),
Packit Service a1973e
    .umasks  = bdw_move_elimination
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "OFFCORE_REQUESTS",
Packit Service a1973e
    .desc = "Demand Data Read requests sent to uncore",
Packit Service a1973e
    .code = 0xb0,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_offcore_requests),
Packit Service a1973e
    .umasks  = bdw_offcore_requests
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "OTHER_ASSISTS",
Packit Service a1973e
    .desc = "Software assist",
Packit Service a1973e
    .code = 0xc1,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_other_assists),
Packit Service a1973e
    .umasks  = bdw_other_assists
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "RESOURCE_STALLS",
Packit Service a1973e
    .desc = "Cycles Allocation is stalled due to Resource Related reason",
Packit Service a1973e
    .code = 0xa2,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_resource_stalls),
Packit Service a1973e
    .umasks  = bdw_resource_stalls
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "ROB_MISC_EVENTS",
Packit Service a1973e
    .desc = "ROB miscellaneous events",
Packit Service a1973e
    .code = 0xcc,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_rob_misc_events),
Packit Service a1973e
    .umasks  = bdw_rob_misc_events
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "RS_EVENTS",
Packit Service a1973e
    .desc = "Reservation Station",
Packit Service a1973e
    .code = 0x5e,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_rs_events),
Packit Service a1973e
    .umasks  = bdw_rs_events
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "RTM_RETIRED",
Packit Service a1973e
    .desc = "Restricted Transaction Memory execution (Precise Event)",
Packit Service a1973e
    .code = 0xc9,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_rtm_retired),
Packit Service a1973e
    .umasks  = bdw_rtm_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "TLB_FLUSH",
Packit Service a1973e
    .desc   = "TLB flushes",
Packit Service a1973e
    .code = 0xbd,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_tlb_flush),
Packit Service a1973e
    .umasks  = bdw_tlb_flush
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "UOPS_EXECUTED",
Packit Service a1973e
    .desc   = "Uops executed",
Packit Service a1973e
    .code = 0xb1,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_uops_executed),
Packit Service a1973e
    .umasks  = bdw_uops_executed
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "LSD",
Packit Service a1973e
    .desc   = "Loop stream detector",
Packit Service a1973e
    .code = 0xa8,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_lsd),
Packit Service a1973e
    .umasks  = bdw_lsd,
Packit Service a1973e
  },
Packit Service a1973e
Packit Service a1973e
  { .name = "UOPS_EXECUTED_PORT",
Packit Service a1973e
    .desc   = "Uops dispatch to specific ports",
Packit Service a1973e
    .code = 0xa1,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_uops_executed_port),
Packit Service a1973e
    .umasks  = bdw_uops_executed_port
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "UOPS_ISSUED",
Packit Service a1973e
    .desc   = "Uops issued",
Packit Service a1973e
    .code = 0xe,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_uops_issued),
Packit Service a1973e
    .umasks  = bdw_uops_issued
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "ARITH",
Packit Service a1973e
    .desc   = "Arithmetic uop",
Packit Service a1973e
    .code = 0x14,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_arith),
Packit Service a1973e
    .umasks  = bdw_arith
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "UOPS_RETIRED",
Packit Service a1973e
    .desc = "Uops retired (Precise Event)",
Packit Service a1973e
    .code = 0xc2,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .flags = INTEL_X86_PEBS,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_uops_retired),
Packit Service a1973e
    .umasks  = bdw_uops_retired
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "TX_MEM",
Packit Service a1973e
    .desc = "Transactional memory aborts",
Packit Service a1973e
    .code = 0x54,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_tx_mem),
Packit Service a1973e
    .umasks  = bdw_tx_mem,
Packit Service a1973e
  },
Packit Service a1973e
  { .name = "TX_EXEC",
Packit Service a1973e
    .desc = "Transactional execution",
Packit Service a1973e
    .code = 0x5d,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_tx_exec),
Packit Service a1973e
    .umasks  = bdw_tx_exec
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "OFFCORE_REQUESTS_OUTSTANDING",
Packit Service a1973e
    .desc   = "Outstanding offcore requests",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0x60,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_offcore_requests_outstanding),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_offcore_requests_outstanding,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "ILD_STALL",
Packit Service a1973e
    .desc   = "Instruction Length Decoder stalls",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0x87,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_ild_stall),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_ild_stall,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "PAGE_WALKER_LOADS",
Packit Service a1973e
    .desc   = "Page walker loads",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0xbc,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_page_walker_loads),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_page_walker_loads,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "DSB2MITE_SWITCHES",
Packit Service a1973e
    .desc   = "Number of DSB to MITE switches",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0xab,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_dsb2mite_switches),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_dsb2mite_switches,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "EPT",
Packit Service a1973e
    .desc   = "Extended page table",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0x4f,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_ept),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_ept,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "FP_ARITH",
Packit Service a1973e
    .desc   = "Floating-point",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0xc7,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_fp_arith),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_fp_arith,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "OFFCORE_REQUESTS_BUFFER",
Packit Service a1973e
    .desc   = "Offcore reqest buffer",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xff,
Packit Service a1973e
    .code = 0xb2,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_offcore_requests_buffer),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_offcore_requests_buffer,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "UOPS_DISPATCHES_CANCELLED",
Packit Service a1973e
    .desc   = "Micro-ops cancelled",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0xa0,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_uops_dispatches_cancelled),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_uops_dispatches_cancelled,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "SQ_MISC",
Packit Service a1973e
    .desc   = "SuperQueue miscellaneous",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0xf4,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_sq_misc),
Packit Service a1973e
    .ngrp = 1,
Packit Service a1973e
    .umasks = bdw_sq_misc,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "OFFCORE_RESPONSE_0",
Packit Service a1973e
    .desc   = "Offcore response event (must provide at least one request type and either any_response or any combination of supplier + snoop)",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0x1b7,
Packit Service a1973e
    .flags= INTEL_X86_NHM_OFFCORE,
Packit Service a1973e
    .numasks = LIBPFM_ARRAY_SIZE(bdw_offcore_response),
Packit Service a1973e
    .ngrp = 3,
Packit Service a1973e
    .umasks = bdw_offcore_response,
Packit Service a1973e
  },
Packit Service a1973e
  { .name   = "OFFCORE_RESPONSE_1",
Packit Service a1973e
    .desc   = "Offcore response event (must provide at least one request type and either any_response or any combination of supplier + snoop)",
Packit Service a1973e
    .modmsk = INTEL_V4_ATTRS,
Packit Service a1973e
    .cntmsk = 0xf,
Packit Service a1973e
    .code = 0x1bb,
Packit Service a1973e
    .flags= INTEL_X86_NHM_OFFCORE,
Packit Service a1973e
    .numasks =  LIBPFM_ARRAY_SIZE(bdw_offcore_response),
Packit Service a1973e
    .ngrp = 3,
Packit Service a1973e
    .umasks = bdw_offcore_response, /* identical to actual umasks list for this event */
Packit Service a1973e
  },
Packit Service a1973e
};