/* Generated by ./xlat/gen.sh from ./xlat/perf_hw_id.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(PERF_COUNT_HW_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_CPU_CYCLES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_CPU_CYCLES) == (0), "PERF_COUNT_HW_CPU_CYCLES != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_CPU_CYCLES 0
#endif
#if defined(PERF_COUNT_HW_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_INSTRUCTIONS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_INSTRUCTIONS) == (1), "PERF_COUNT_HW_INSTRUCTIONS != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_INSTRUCTIONS 1
#endif
#if defined(PERF_COUNT_HW_CACHE_REFERENCES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES) && HAVE_DECL_PERF_COUNT_HW_CACHE_REFERENCES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_CACHE_REFERENCES) == (2), "PERF_COUNT_HW_CACHE_REFERENCES != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_CACHE_REFERENCES 2
#endif
#if defined(PERF_COUNT_HW_CACHE_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES) && HAVE_DECL_PERF_COUNT_HW_CACHE_MISSES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_CACHE_MISSES) == (3), "PERF_COUNT_HW_CACHE_MISSES != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_CACHE_MISSES 3
#endif
#if defined(PERF_COUNT_HW_BRANCH_INSTRUCTIONS) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS) && HAVE_DECL_PERF_COUNT_HW_BRANCH_INSTRUCTIONS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_BRANCH_INSTRUCTIONS) == (4), "PERF_COUNT_HW_BRANCH_INSTRUCTIONS != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_BRANCH_INSTRUCTIONS 4
#endif
#if defined(PERF_COUNT_HW_BRANCH_MISSES) || (defined(HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES) && HAVE_DECL_PERF_COUNT_HW_BRANCH_MISSES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_BRANCH_MISSES) == (5), "PERF_COUNT_HW_BRANCH_MISSES != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_BRANCH_MISSES 5
#endif
#if defined(PERF_COUNT_HW_BUS_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES) && HAVE_DECL_PERF_COUNT_HW_BUS_CYCLES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_BUS_CYCLES) == (6), "PERF_COUNT_HW_BUS_CYCLES != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_BUS_CYCLES 6
#endif
#if defined(PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_FRONTEND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_STALLED_CYCLES_FRONTEND) == (7), "PERF_COUNT_HW_STALLED_CYCLES_FRONTEND != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_STALLED_CYCLES_FRONTEND 7
#endif
#if defined(PERF_COUNT_HW_STALLED_CYCLES_BACKEND) || (defined(HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND) && HAVE_DECL_PERF_COUNT_HW_STALLED_CYCLES_BACKEND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_STALLED_CYCLES_BACKEND) == (8), "PERF_COUNT_HW_STALLED_CYCLES_BACKEND != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_STALLED_CYCLES_BACKEND 8
#endif
#if defined(PERF_COUNT_HW_REF_CPU_CYCLES) || (defined(HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES) && HAVE_DECL_PERF_COUNT_HW_REF_CPU_CYCLES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((PERF_COUNT_HW_REF_CPU_CYCLES) == (9), "PERF_COUNT_HW_REF_CPU_CYCLES != 9");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define PERF_COUNT_HW_REF_CPU_CYCLES 9
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat perf_hw_id in mpers mode

# else

static
const struct xlat perf_hw_id[] = {

 XLAT(PERF_COUNT_HW_CPU_CYCLES),
 XLAT(PERF_COUNT_HW_INSTRUCTIONS),
 XLAT(PERF_COUNT_HW_CACHE_REFERENCES),
 XLAT(PERF_COUNT_HW_CACHE_MISSES),
 XLAT(PERF_COUNT_HW_BRANCH_INSTRUCTIONS),
 XLAT(PERF_COUNT_HW_BRANCH_MISSES),
 XLAT(PERF_COUNT_HW_BUS_CYCLES),
 XLAT(PERF_COUNT_HW_STALLED_CYCLES_FRONTEND),
 XLAT(PERF_COUNT_HW_STALLED_CYCLES_BACKEND),
 XLAT(PERF_COUNT_HW_REF_CPU_CYCLES),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
