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

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

#if defined(FUTEX_OP_CMP_EQ) || (defined(HAVE_DECL_FUTEX_OP_CMP_EQ) && HAVE_DECL_FUTEX_OP_CMP_EQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_EQ) == (0), "FUTEX_OP_CMP_EQ != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_EQ 0
#endif
#if defined(FUTEX_OP_CMP_NE) || (defined(HAVE_DECL_FUTEX_OP_CMP_NE) && HAVE_DECL_FUTEX_OP_CMP_NE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_NE) == (1), "FUTEX_OP_CMP_NE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_NE 1
#endif
#if defined(FUTEX_OP_CMP_LT) || (defined(HAVE_DECL_FUTEX_OP_CMP_LT) && HAVE_DECL_FUTEX_OP_CMP_LT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_LT) == (2), "FUTEX_OP_CMP_LT != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_LT 2
#endif
#if defined(FUTEX_OP_CMP_LE) || (defined(HAVE_DECL_FUTEX_OP_CMP_LE) && HAVE_DECL_FUTEX_OP_CMP_LE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_LE) == (3), "FUTEX_OP_CMP_LE != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_LE 3
#endif
#if defined(FUTEX_OP_CMP_GT) || (defined(HAVE_DECL_FUTEX_OP_CMP_GT) && HAVE_DECL_FUTEX_OP_CMP_GT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_GT) == (4), "FUTEX_OP_CMP_GT != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_GT 4
#endif
#if defined(FUTEX_OP_CMP_GE) || (defined(HAVE_DECL_FUTEX_OP_CMP_GE) && HAVE_DECL_FUTEX_OP_CMP_GE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((FUTEX_OP_CMP_GE) == (5), "FUTEX_OP_CMP_GE != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define FUTEX_OP_CMP_GE 5
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat futexwakecmps in mpers mode

# else

static
const struct xlat futexwakecmps[] = {
 XLAT(FUTEX_OP_CMP_EQ),
 XLAT(FUTEX_OP_CMP_NE),
 XLAT(FUTEX_OP_CMP_LT),
 XLAT(FUTEX_OP_CMP_LE),
 XLAT(FUTEX_OP_CMP_GT),
 XLAT(FUTEX_OP_CMP_GE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
