/* -mlong-double-64 compatibility mode macros.  */

#include <nldbl-abi.h>
#ifndef LONG_DOUBLE_COMPAT_VERSION
# error "nldbl-abi.h must define LONG_DOUBLE_COMPAT_VERSION"
#endif

#include <shlib-compat.h>
#define LONG_DOUBLE_COMPAT(lib, introduced) \
  SHLIB_COMPAT(lib, introduced, LONG_DOUBLE_COMPAT_VERSION)
#define long_double_symbol(lib, local, symbol) \
  long_double_symbol_1 (lib, local, symbol, LONG_DOUBLE_COMPAT_VERSION)
#ifdef SHARED
# define ldbl_hidden_def(local, name) libc_hidden_ver (local, name)
# define ldbl_strong_alias(name, aliasname) \
  strong_alias (name, __GL_##name##_##aliasname) \
  long_double_symbol (libc, __GL_##name##_##aliasname, aliasname);
# define ldbl_weak_alias(name, aliasname) \
  weak_alias (name, __GL_##name##_##aliasname) \
  long_double_symbol (libc, __GL_##name##_##aliasname, aliasname);
# define long_double_symbol_1(lib, local, symbol, version) \
  versioned_symbol (lib, local, symbol, version)
#else
# define ldbl_hidden_def(local, name) libc_hidden_def (name)
# define ldbl_strong_alias(name, aliasname) strong_alias (name, aliasname)
# define ldbl_weak_alias(name, aliasname) weak_alias (name, aliasname)
# ifndef __ASSEMBLER__
/* Note that weak_alias cannot be used - it is defined to nothing
   in most of the C files.  */
#  define long_double_symbol_1(lib, local, symbol, version) \
  _weak_alias (local, symbol)
# else
#  define long_double_symbol_1(lib, local, symbol, version) \
  weak_alias (local, symbol)
# endif
#endif

#ifndef __ASSEMBLER__
# include <math.h>
# include <math_private.h>

/* Set temporarily to non-zero if long double should be considered
   the same as double.  */
extern __thread int __no_long_double attribute_tls_model_ie attribute_hidden;
# define __ldbl_is_dbl __builtin_expect (__no_long_double, 0)
#endif
