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

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

#if defined(IOCB_CMD_PREAD) || (defined(HAVE_DECL_IOCB_CMD_PREAD) && HAVE_DECL_IOCB_CMD_PREAD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_PREAD) == (0), "IOCB_CMD_PREAD != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_PREAD 0
#endif
#if defined(IOCB_CMD_PWRITE) || (defined(HAVE_DECL_IOCB_CMD_PWRITE) && HAVE_DECL_IOCB_CMD_PWRITE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_PWRITE) == (1), "IOCB_CMD_PWRITE != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_PWRITE 1
#endif
#if defined(IOCB_CMD_FSYNC) || (defined(HAVE_DECL_IOCB_CMD_FSYNC) && HAVE_DECL_IOCB_CMD_FSYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_FSYNC) == (2), "IOCB_CMD_FSYNC != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_FSYNC 2
#endif
#if defined(IOCB_CMD_FDSYNC) || (defined(HAVE_DECL_IOCB_CMD_FDSYNC) && HAVE_DECL_IOCB_CMD_FDSYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_FDSYNC) == (3), "IOCB_CMD_FDSYNC != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_FDSYNC 3
#endif
#if defined(IOCB_CMD_PREADX) || (defined(HAVE_DECL_IOCB_CMD_PREADX) && HAVE_DECL_IOCB_CMD_PREADX)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_PREADX) == (4), "IOCB_CMD_PREADX != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_PREADX 4
#endif
#if defined(IOCB_CMD_POLL) || (defined(HAVE_DECL_IOCB_CMD_POLL) && HAVE_DECL_IOCB_CMD_POLL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_POLL) == (5), "IOCB_CMD_POLL != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_POLL 5
#endif
#if defined(IOCB_CMD_NOOP) || (defined(HAVE_DECL_IOCB_CMD_NOOP) && HAVE_DECL_IOCB_CMD_NOOP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_NOOP) == (6), "IOCB_CMD_NOOP != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_NOOP 6
#endif
#if defined(IOCB_CMD_PREADV) || (defined(HAVE_DECL_IOCB_CMD_PREADV) && HAVE_DECL_IOCB_CMD_PREADV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_PREADV) == (7), "IOCB_CMD_PREADV != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_PREADV 7
#endif
#if defined(IOCB_CMD_PWRITEV) || (defined(HAVE_DECL_IOCB_CMD_PWRITEV) && HAVE_DECL_IOCB_CMD_PWRITEV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((IOCB_CMD_PWRITEV) == (8), "IOCB_CMD_PWRITEV != 8");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define IOCB_CMD_PWRITEV 8
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat aio_cmds in mpers mode

# else

static
const struct xlat aio_cmds[] = {
 [IOCB_CMD_PREAD] = XLAT(IOCB_CMD_PREAD),
 [IOCB_CMD_PWRITE] = XLAT(IOCB_CMD_PWRITE),
 [IOCB_CMD_FSYNC] = XLAT(IOCB_CMD_FSYNC),
 [IOCB_CMD_FDSYNC] = XLAT(IOCB_CMD_FDSYNC),
 [IOCB_CMD_PREADX] = XLAT(IOCB_CMD_PREADX),
 [IOCB_CMD_POLL] = XLAT(IOCB_CMD_POLL),
 [IOCB_CMD_NOOP] = XLAT(IOCB_CMD_NOOP),
 [IOCB_CMD_PREADV] = XLAT(IOCB_CMD_PREADV),
 [IOCB_CMD_PWRITEV] = XLAT(IOCB_CMD_PWRITEV),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
