/* Copyright (C) 2002 by  Red Hat, Incorporated. All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software
 * is freely granted, provided that this notice is preserved.
 */

#include "fdlibm.h"

#if !_HAVE_FAST_FMAF

#if __FLT_EVAL_METHOD__ == 2 && defined(_HAVE_LONG_DOUBLE)

float
fmaf(float x, float y, float z)
{
    return (float) fmal((long double) x, (long double) y, (long double) z);
}

#else

typedef float FLOAT_T;

#define FMA fmaf
#define NEXTAFTER nextafterf
#define LDEXP ldexpf
#define FREXP frexpf
#define SCALBN scalbnf
#define SPLIT (0x1p12f + 1.0f)
#define COPYSIGN copysignf
#define FLOAT_MANT_DIG        __FLT_MANT_DIG__
#define FLOAT_MAX_EXP         __FLT_MAX_EXP__
#define FLOAT_MIN             __FLT_MIN__
#define ILOGB    ilogbf

static inline int
odd_mant(FLOAT_T x)
{
    return asuint(x) & 1;
}

static unsigned int
EXPONENT(FLOAT_T x)
{
    return _exponent32(asuint(x));
}

#include "fma_inc.h"

#endif

_MATH_ALIAS_f_fff(fma)

#endif