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

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

#if defined(GS_ENABLE) || (defined(HAVE_DECL_GS_ENABLE) && HAVE_DECL_GS_ENABLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GS_ENABLE) == (0), "GS_ENABLE != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GS_ENABLE 0
#endif
#if defined(GS_DISABLE) || (defined(HAVE_DECL_GS_DISABLE) && HAVE_DECL_GS_DISABLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GS_DISABLE) == (1), "GS_DISABLE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GS_DISABLE 1
#endif
#if defined(GS_SET_BC_CB) || (defined(HAVE_DECL_GS_SET_BC_CB) && HAVE_DECL_GS_SET_BC_CB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GS_SET_BC_CB) == (2), "GS_SET_BC_CB != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GS_SET_BC_CB 2
#endif
#if defined(GS_CLEAR_BC_CB) || (defined(HAVE_DECL_GS_CLEAR_BC_CB) && HAVE_DECL_GS_CLEAR_BC_CB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GS_CLEAR_BC_CB) == (3), "GS_CLEAR_BC_CB != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GS_CLEAR_BC_CB 3
#endif
#if defined(GS_BROADCAST) || (defined(HAVE_DECL_GS_BROADCAST) && HAVE_DECL_GS_BROADCAST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((GS_BROADCAST) == (4), "GS_BROADCAST != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define GS_BROADCAST 4
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat s390_guarded_storage_commands in mpers mode

# else

static
const struct xlat s390_guarded_storage_commands[] = {
 XLAT(GS_ENABLE),
 XLAT(GS_DISABLE),
 XLAT(GS_SET_BC_CB),
 XLAT(GS_CLEAR_BC_CB),
 XLAT(GS_BROADCAST),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
