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

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

#if defined(ADJ_OFFSET_SS_READ) || (defined(HAVE_DECL_ADJ_OFFSET_SS_READ) && HAVE_DECL_ADJ_OFFSET_SS_READ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_OFFSET_SS_READ) == (0xa001), "ADJ_OFFSET_SS_READ != 0xa001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_OFFSET_SS_READ 0xa001
#endif
#if defined(ADJ_OFFSET_SINGLESHOT) || (defined(HAVE_DECL_ADJ_OFFSET_SINGLESHOT) && HAVE_DECL_ADJ_OFFSET_SINGLESHOT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_OFFSET_SINGLESHOT) == (0x8001), "ADJ_OFFSET_SINGLESHOT != 0x8001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_OFFSET_SINGLESHOT 0x8001
#endif
#if defined(ADJ_OFFSET) || (defined(HAVE_DECL_ADJ_OFFSET) && HAVE_DECL_ADJ_OFFSET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_OFFSET) == (0x0001), "ADJ_OFFSET != 0x0001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_OFFSET 0x0001
#endif
#if defined(ADJ_FREQUENCY) || (defined(HAVE_DECL_ADJ_FREQUENCY) && HAVE_DECL_ADJ_FREQUENCY)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_FREQUENCY) == (0x0002), "ADJ_FREQUENCY != 0x0002");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_FREQUENCY 0x0002
#endif
#if defined(ADJ_MAXERROR) || (defined(HAVE_DECL_ADJ_MAXERROR) && HAVE_DECL_ADJ_MAXERROR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_MAXERROR) == (0x0004), "ADJ_MAXERROR != 0x0004");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_MAXERROR 0x0004
#endif
#if defined(ADJ_ESTERROR) || (defined(HAVE_DECL_ADJ_ESTERROR) && HAVE_DECL_ADJ_ESTERROR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_ESTERROR) == (0x0008), "ADJ_ESTERROR != 0x0008");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_ESTERROR 0x0008
#endif
#if defined(ADJ_STATUS) || (defined(HAVE_DECL_ADJ_STATUS) && HAVE_DECL_ADJ_STATUS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_STATUS) == (0x0010), "ADJ_STATUS != 0x0010");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_STATUS 0x0010
#endif
#if defined(ADJ_TIMECONST) || (defined(HAVE_DECL_ADJ_TIMECONST) && HAVE_DECL_ADJ_TIMECONST)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_TIMECONST) == (0x0020), "ADJ_TIMECONST != 0x0020");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_TIMECONST 0x0020
#endif
#if defined(ADJ_TAI) || (defined(HAVE_DECL_ADJ_TAI) && HAVE_DECL_ADJ_TAI)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_TAI) == (0x0080), "ADJ_TAI != 0x0080");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_TAI 0x0080
#endif
#if defined(ADJ_SETOFFSET) || (defined(HAVE_DECL_ADJ_SETOFFSET) && HAVE_DECL_ADJ_SETOFFSET)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_SETOFFSET) == (0x0100), "ADJ_SETOFFSET != 0x0100");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_SETOFFSET 0x0100
#endif
#if defined(ADJ_MICRO) || (defined(HAVE_DECL_ADJ_MICRO) && HAVE_DECL_ADJ_MICRO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_MICRO) == (0x1000), "ADJ_MICRO != 0x1000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_MICRO 0x1000
#endif
#if defined(ADJ_NANO) || (defined(HAVE_DECL_ADJ_NANO) && HAVE_DECL_ADJ_NANO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_NANO) == (0x2000), "ADJ_NANO != 0x2000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_NANO 0x2000
#endif
#if defined(ADJ_TICK) || (defined(HAVE_DECL_ADJ_TICK) && HAVE_DECL_ADJ_TICK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((ADJ_TICK) == (0x4000), "ADJ_TICK != 0x4000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define ADJ_TICK 0x4000
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat adjtimex_modes[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat adjtimex_modes[] = {
 XLAT(ADJ_OFFSET_SS_READ),
 XLAT(ADJ_OFFSET_SINGLESHOT),
 XLAT(ADJ_OFFSET),
 XLAT(ADJ_FREQUENCY),
 XLAT(ADJ_MAXERROR),
 XLAT(ADJ_ESTERROR),
 XLAT(ADJ_STATUS),
 XLAT(ADJ_TIMECONST),
 XLAT(ADJ_TAI),
 XLAT(ADJ_SETOFFSET),
 XLAT(ADJ_MICRO),
 XLAT(ADJ_NANO),
 XLAT(ADJ_TICK),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
