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

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

#if defined(SMC_CLC_DECL_MEM) || (defined(HAVE_DECL_SMC_CLC_DECL_MEM) && HAVE_DECL_SMC_CLC_DECL_MEM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_MEM) == (0x01010000), "SMC_CLC_DECL_MEM != 0x01010000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_MEM 0x01010000
#endif
#if defined(SMC_CLC_DECL_TIMEOUT_CL) || (defined(HAVE_DECL_SMC_CLC_DECL_TIMEOUT_CL) && HAVE_DECL_SMC_CLC_DECL_TIMEOUT_CL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_TIMEOUT_CL) == (0x02010000), "SMC_CLC_DECL_TIMEOUT_CL != 0x02010000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_TIMEOUT_CL 0x02010000
#endif
#if defined(SMC_CLC_DECL_TIMEOUT_AL) || (defined(HAVE_DECL_SMC_CLC_DECL_TIMEOUT_AL) && HAVE_DECL_SMC_CLC_DECL_TIMEOUT_AL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_TIMEOUT_AL) == (0x02020000), "SMC_CLC_DECL_TIMEOUT_AL != 0x02020000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_TIMEOUT_AL 0x02020000
#endif
#if defined(SMC_CLC_DECL_CNFERR) || (defined(HAVE_DECL_SMC_CLC_DECL_CNFERR) && HAVE_DECL_SMC_CLC_DECL_CNFERR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_CNFERR) == (0x03000000), "SMC_CLC_DECL_CNFERR != 0x03000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_CNFERR 0x03000000
#endif
#if defined(SMC_CLC_DECL_PEERNOSMC) || (defined(HAVE_DECL_SMC_CLC_DECL_PEERNOSMC) && HAVE_DECL_SMC_CLC_DECL_PEERNOSMC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_PEERNOSMC) == (0x03010000), "SMC_CLC_DECL_PEERNOSMC != 0x03010000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_PEERNOSMC 0x03010000
#endif
#if defined(SMC_CLC_DECL_IPSEC) || (defined(HAVE_DECL_SMC_CLC_DECL_IPSEC) && HAVE_DECL_SMC_CLC_DECL_IPSEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_IPSEC) == (0x03020000), "SMC_CLC_DECL_IPSEC != 0x03020000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_IPSEC 0x03020000
#endif
#if defined(SMC_CLC_DECL_NOSMCDEV) || (defined(HAVE_DECL_SMC_CLC_DECL_NOSMCDEV) && HAVE_DECL_SMC_CLC_DECL_NOSMCDEV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_NOSMCDEV) == (0x03030000), "SMC_CLC_DECL_NOSMCDEV != 0x03030000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_NOSMCDEV 0x03030000
#endif
#if defined(SMC_CLC_DECL_MODEUNSUPP) || (defined(HAVE_DECL_SMC_CLC_DECL_MODEUNSUPP) && HAVE_DECL_SMC_CLC_DECL_MODEUNSUPP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_MODEUNSUPP) == (0x03040000), "SMC_CLC_DECL_MODEUNSUPP != 0x03040000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_MODEUNSUPP 0x03040000
#endif
#if defined(SMC_CLC_DECL_RMBE_EC) || (defined(HAVE_DECL_SMC_CLC_DECL_RMBE_EC) && HAVE_DECL_SMC_CLC_DECL_RMBE_EC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_RMBE_EC) == (0x03050000), "SMC_CLC_DECL_RMBE_EC != 0x03050000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_RMBE_EC 0x03050000
#endif
#if defined(SMC_CLC_DECL_OPTUNSUPP) || (defined(HAVE_DECL_SMC_CLC_DECL_OPTUNSUPP) && HAVE_DECL_SMC_CLC_DECL_OPTUNSUPP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_OPTUNSUPP) == (0x03060000), "SMC_CLC_DECL_OPTUNSUPP != 0x03060000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_OPTUNSUPP 0x03060000
#endif
#if defined(SMC_CLC_DECL_SYNCERR) || (defined(HAVE_DECL_SMC_CLC_DECL_SYNCERR) && HAVE_DECL_SMC_CLC_DECL_SYNCERR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_SYNCERR) == (0x04000000), "SMC_CLC_DECL_SYNCERR != 0x04000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_SYNCERR 0x04000000
#endif
#if defined(SMC_CLC_DECL_PEERDECL) || (defined(HAVE_DECL_SMC_CLC_DECL_PEERDECL) && HAVE_DECL_SMC_CLC_DECL_PEERDECL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_PEERDECL) == (0x05000000), "SMC_CLC_DECL_PEERDECL != 0x05000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_PEERDECL 0x05000000
#endif
#if defined(SMC_CLC_DECL_INTERR) || (defined(HAVE_DECL_SMC_CLC_DECL_INTERR) && HAVE_DECL_SMC_CLC_DECL_INTERR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_INTERR) == (0x99990000), "SMC_CLC_DECL_INTERR != 0x99990000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_INTERR 0x99990000
#endif
#if defined(SMC_CLC_DECL_ERR_RTOK) || (defined(HAVE_DECL_SMC_CLC_DECL_ERR_RTOK) && HAVE_DECL_SMC_CLC_DECL_ERR_RTOK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_ERR_RTOK) == (0x99990001), "SMC_CLC_DECL_ERR_RTOK != 0x99990001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_ERR_RTOK 0x99990001
#endif
#if defined(SMC_CLC_DECL_ERR_RDYLNK) || (defined(HAVE_DECL_SMC_CLC_DECL_ERR_RDYLNK) && HAVE_DECL_SMC_CLC_DECL_ERR_RDYLNK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_ERR_RDYLNK) == (0x99990002), "SMC_CLC_DECL_ERR_RDYLNK != 0x99990002");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_ERR_RDYLNK 0x99990002
#endif
#if defined(SMC_CLC_DECL_ERR_REGRMB) || (defined(HAVE_DECL_SMC_CLC_DECL_ERR_REGRMB) && HAVE_DECL_SMC_CLC_DECL_ERR_REGRMB)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((SMC_CLC_DECL_ERR_REGRMB) == (0x99990003), "SMC_CLC_DECL_ERR_REGRMB != 0x99990003");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define SMC_CLC_DECL_ERR_REGRMB 0x99990003
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat smc_decl_codes in mpers mode

# else

static
const struct xlat smc_decl_codes[] = {

 XLAT(SMC_CLC_DECL_MEM),
 XLAT(SMC_CLC_DECL_TIMEOUT_CL),
 XLAT(SMC_CLC_DECL_TIMEOUT_AL),
 XLAT(SMC_CLC_DECL_CNFERR),
 XLAT(SMC_CLC_DECL_PEERNOSMC),
 XLAT(SMC_CLC_DECL_IPSEC),
 XLAT(SMC_CLC_DECL_NOSMCDEV),
 XLAT(SMC_CLC_DECL_MODEUNSUPP),
 XLAT(SMC_CLC_DECL_RMBE_EC),
 XLAT(SMC_CLC_DECL_OPTUNSUPP),
 XLAT(SMC_CLC_DECL_SYNCERR),
 XLAT(SMC_CLC_DECL_PEERDECL),
 XLAT(SMC_CLC_DECL_INTERR),
 XLAT(SMC_CLC_DECL_ERR_RTOK),
 XLAT(SMC_CLC_DECL_ERR_RDYLNK),
 XLAT(SMC_CLC_DECL_ERR_REGRMB),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
