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

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

#if defined(POSIX_FADV_NORMAL) || (defined(HAVE_DECL_POSIX_FADV_NORMAL) && HAVE_DECL_POSIX_FADV_NORMAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_NORMAL) == (0), "POSIX_FADV_NORMAL != 0");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_NORMAL 0
#endif
#if defined(POSIX_FADV_RANDOM) || (defined(HAVE_DECL_POSIX_FADV_RANDOM) && HAVE_DECL_POSIX_FADV_RANDOM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_RANDOM) == (1), "POSIX_FADV_RANDOM != 1");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_RANDOM 1
#endif
#if defined(POSIX_FADV_SEQUENTIAL) || (defined(HAVE_DECL_POSIX_FADV_SEQUENTIAL) && HAVE_DECL_POSIX_FADV_SEQUENTIAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_SEQUENTIAL) == (2), "POSIX_FADV_SEQUENTIAL != 2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_SEQUENTIAL 2
#endif
#if defined(POSIX_FADV_WILLNEED) || (defined(HAVE_DECL_POSIX_FADV_WILLNEED) && HAVE_DECL_POSIX_FADV_WILLNEED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_WILLNEED) == (3), "POSIX_FADV_WILLNEED != 3");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_WILLNEED 3
#endif
#if defined __s390x__
#if defined(POSIX_FADV_DONTNEED) || (defined(HAVE_DECL_POSIX_FADV_DONTNEED) && HAVE_DECL_POSIX_FADV_DONTNEED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_DONTNEED) == (6), "POSIX_FADV_DONTNEED != 6");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_DONTNEED 6
#endif
#if defined(POSIX_FADV_NOREUSE) || (defined(HAVE_DECL_POSIX_FADV_NOREUSE) && HAVE_DECL_POSIX_FADV_NOREUSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_NOREUSE) == (7), "POSIX_FADV_NOREUSE != 7");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_NOREUSE 7
#endif
#else
#if defined(POSIX_FADV_DONTNEED) || (defined(HAVE_DECL_POSIX_FADV_DONTNEED) && HAVE_DECL_POSIX_FADV_DONTNEED)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_DONTNEED) == (4), "POSIX_FADV_DONTNEED != 4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_DONTNEED 4
#endif
#if defined(POSIX_FADV_NOREUSE) || (defined(HAVE_DECL_POSIX_FADV_NOREUSE) && HAVE_DECL_POSIX_FADV_NOREUSE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((POSIX_FADV_NOREUSE) == (5), "POSIX_FADV_NOREUSE != 5");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define POSIX_FADV_NOREUSE 5
#endif
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat advise in mpers mode

# else

static
const struct xlat advise[] = {
 XLAT(POSIX_FADV_NORMAL),
 XLAT(POSIX_FADV_RANDOM),
 XLAT(POSIX_FADV_SEQUENTIAL),
 XLAT(POSIX_FADV_WILLNEED),
#if defined __s390x__
 XLAT(POSIX_FADV_DONTNEED),
 XLAT(POSIX_FADV_NOREUSE),
#else
 XLAT(POSIX_FADV_DONTNEED),
 XLAT(POSIX_FADV_NOREUSE),
#endif
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
