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

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

#if defined(STA_PLL) || (defined(HAVE_DECL_STA_PLL) && HAVE_DECL_STA_PLL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PLL) == (0x0001), "STA_PLL != 0x0001");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PLL 0x0001
#endif
#if defined(STA_PPSFREQ) || (defined(HAVE_DECL_STA_PPSFREQ) && HAVE_DECL_STA_PPSFREQ)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSFREQ) == (0x0002), "STA_PPSFREQ != 0x0002");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSFREQ 0x0002
#endif
#if defined(STA_PPSTIME) || (defined(HAVE_DECL_STA_PPSTIME) && HAVE_DECL_STA_PPSTIME)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSTIME) == (0x0004), "STA_PPSTIME != 0x0004");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSTIME 0x0004
#endif
#if defined(STA_FLL) || (defined(HAVE_DECL_STA_FLL) && HAVE_DECL_STA_FLL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_FLL) == (0x0008), "STA_FLL != 0x0008");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_FLL 0x0008
#endif
#if defined(STA_INS) || (defined(HAVE_DECL_STA_INS) && HAVE_DECL_STA_INS)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_INS) == (0x0010), "STA_INS != 0x0010");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_INS 0x0010
#endif
#if defined(STA_DEL) || (defined(HAVE_DECL_STA_DEL) && HAVE_DECL_STA_DEL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_DEL) == (0x0020), "STA_DEL != 0x0020");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_DEL 0x0020
#endif
#if defined(STA_UNSYNC) || (defined(HAVE_DECL_STA_UNSYNC) && HAVE_DECL_STA_UNSYNC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_UNSYNC) == (0x0040), "STA_UNSYNC != 0x0040");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_UNSYNC 0x0040
#endif
#if defined(STA_FREQHOLD) || (defined(HAVE_DECL_STA_FREQHOLD) && HAVE_DECL_STA_FREQHOLD)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_FREQHOLD) == (0x0080), "STA_FREQHOLD != 0x0080");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_FREQHOLD 0x0080
#endif
#if defined(STA_PPSSIGNAL) || (defined(HAVE_DECL_STA_PPSSIGNAL) && HAVE_DECL_STA_PPSSIGNAL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSSIGNAL) == (0x0100), "STA_PPSSIGNAL != 0x0100");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSSIGNAL 0x0100
#endif
#if defined(STA_PPSJITTER) || (defined(HAVE_DECL_STA_PPSJITTER) && HAVE_DECL_STA_PPSJITTER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSJITTER) == (0x0200), "STA_PPSJITTER != 0x0200");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSJITTER 0x0200
#endif
#if defined(STA_PPSWANDER) || (defined(HAVE_DECL_STA_PPSWANDER) && HAVE_DECL_STA_PPSWANDER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSWANDER) == (0x0400), "STA_PPSWANDER != 0x0400");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSWANDER 0x0400
#endif
#if defined(STA_PPSERROR) || (defined(HAVE_DECL_STA_PPSERROR) && HAVE_DECL_STA_PPSERROR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_PPSERROR) == (0x0800), "STA_PPSERROR != 0x0800");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_PPSERROR 0x0800
#endif
#if defined(STA_CLOCKERR) || (defined(HAVE_DECL_STA_CLOCKERR) && HAVE_DECL_STA_CLOCKERR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_CLOCKERR) == (0x1000), "STA_CLOCKERR != 0x1000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_CLOCKERR 0x1000
#endif
#if defined(STA_NANO) || (defined(HAVE_DECL_STA_NANO) && HAVE_DECL_STA_NANO)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_NANO) == (0x2000), "STA_NANO != 0x2000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_NANO 0x2000
#endif
#if defined(STA_MODE) || (defined(HAVE_DECL_STA_MODE) && HAVE_DECL_STA_MODE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_MODE) == (0x4000), "STA_MODE != 0x4000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_MODE 0x4000
#endif
#if defined(STA_CLK) || (defined(HAVE_DECL_STA_CLK) && HAVE_DECL_STA_CLK)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((STA_CLK) == (0x8000), "STA_CLK != 0x8000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define STA_CLK 0x8000
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat adjtimex_status[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat adjtimex_status[] = {
 XLAT(STA_PLL),
 XLAT(STA_PPSFREQ),
 XLAT(STA_PPSTIME),
 XLAT(STA_FLL),
 XLAT(STA_INS),
 XLAT(STA_DEL),
 XLAT(STA_UNSYNC),
 XLAT(STA_FREQHOLD),
 XLAT(STA_PPSSIGNAL),
 XLAT(STA_PPSJITTER),
 XLAT(STA_PPSWANDER),
 XLAT(STA_PPSERROR),
 XLAT(STA_CLOCKERR),
 XLAT(STA_NANO),
 XLAT(STA_MODE),
 XLAT(STA_CLK),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
