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

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

#if defined(LOOP_SET_FD) || (defined(HAVE_DECL_LOOP_SET_FD) && HAVE_DECL_LOOP_SET_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_FD) == (0x4C00), "LOOP_SET_FD != 0x4C00");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_FD 0x4C00
#endif
#if defined(LOOP_CLR_FD) || (defined(HAVE_DECL_LOOP_CLR_FD) && HAVE_DECL_LOOP_CLR_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_CLR_FD) == (0x4C01), "LOOP_CLR_FD != 0x4C01");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_CLR_FD 0x4C01
#endif
#if defined(LOOP_SET_STATUS) || (defined(HAVE_DECL_LOOP_SET_STATUS) && HAVE_DECL_LOOP_SET_STATUS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_STATUS) == (0x4C02), "LOOP_SET_STATUS != 0x4C02");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_STATUS 0x4C02
#endif
#if defined(LOOP_GET_STATUS) || (defined(HAVE_DECL_LOOP_GET_STATUS) && HAVE_DECL_LOOP_GET_STATUS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_GET_STATUS) == (0x4C03), "LOOP_GET_STATUS != 0x4C03");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_GET_STATUS 0x4C03
#endif
#if defined(LOOP_SET_STATUS64) || (defined(HAVE_DECL_LOOP_SET_STATUS64) && HAVE_DECL_LOOP_SET_STATUS64)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_STATUS64) == (0x4C04), "LOOP_SET_STATUS64 != 0x4C04");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_STATUS64 0x4C04
#endif
#if defined(LOOP_GET_STATUS64) || (defined(HAVE_DECL_LOOP_GET_STATUS64) && HAVE_DECL_LOOP_GET_STATUS64)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_GET_STATUS64) == (0x4C05), "LOOP_GET_STATUS64 != 0x4C05");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_GET_STATUS64 0x4C05
#endif
#if defined(LOOP_CHANGE_FD) || (defined(HAVE_DECL_LOOP_CHANGE_FD) && HAVE_DECL_LOOP_CHANGE_FD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_CHANGE_FD) == (0x4C06), "LOOP_CHANGE_FD != 0x4C06");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_CHANGE_FD 0x4C06
#endif
#if defined(LOOP_SET_CAPACITY) || (defined(HAVE_DECL_LOOP_SET_CAPACITY) && HAVE_DECL_LOOP_SET_CAPACITY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_CAPACITY) == (0x4C07), "LOOP_SET_CAPACITY != 0x4C07");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_CAPACITY 0x4C07
#endif
#if defined(LOOP_SET_DIRECT_IO) || (defined(HAVE_DECL_LOOP_SET_DIRECT_IO) && HAVE_DECL_LOOP_SET_DIRECT_IO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_DIRECT_IO) == (0x4C08), "LOOP_SET_DIRECT_IO != 0x4C08");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_DIRECT_IO 0x4C08
#endif
#if defined(LOOP_SET_BLOCK_SIZE) || (defined(HAVE_DECL_LOOP_SET_BLOCK_SIZE) && HAVE_DECL_LOOP_SET_BLOCK_SIZE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_SET_BLOCK_SIZE) == (0x4C09), "LOOP_SET_BLOCK_SIZE != 0x4C09");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_SET_BLOCK_SIZE 0x4C09
#endif
#if defined(LOOP_CTL_ADD) || (defined(HAVE_DECL_LOOP_CTL_ADD) && HAVE_DECL_LOOP_CTL_ADD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_CTL_ADD) == (0x4C80), "LOOP_CTL_ADD != 0x4C80");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_CTL_ADD 0x4C80
#endif
#if defined(LOOP_CTL_REMOVE) || (defined(HAVE_DECL_LOOP_CTL_REMOVE) && HAVE_DECL_LOOP_CTL_REMOVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_CTL_REMOVE) == (0x4C81), "LOOP_CTL_REMOVE != 0x4C81");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_CTL_REMOVE 0x4C81
#endif
#if defined(LOOP_CTL_GET_FREE) || (defined(HAVE_DECL_LOOP_CTL_GET_FREE) && HAVE_DECL_LOOP_CTL_GET_FREE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LOOP_CTL_GET_FREE) == (0x4C82), "LOOP_CTL_GET_FREE != 0x4C82");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LOOP_CTL_GET_FREE 0x4C82
#endif
