// If long double functions are present, just alias
// to the __builtin_ version.  This may not do the right thing (TODO)

// GCC 3.3 doesn't have some of these builtins
//
extern (C) {
double acos(double);
alias acos acosl;
double asin(double);
alias asin asinl;
double atan(double);
alias atan atanl;
double atan2(double, double);
alias atan2 atan2l;

alias __builtin_cos cosl;
alias __builtin_sin sinl;

double tan(double);
alias tan tanl;
double acosh(double);
alias acosh acoshl;
double asinh(double);
alias asinh asinhl;
double atanh(double);
alias atanh atanhl;
double cosh(double);
alias cosh coshl;
double sinh(double);
alias sinh sinhl;
double tanh(double);
alias tanh tanhl;

alias __builtin_exp expl;

double exp2(double);
alias exp2 exp2l;
double expm1(double);
alias expm1 expm1l;
double frexp(double, bint*);
alias frexp frexpl;
bint ilogb(double);
alias ilogb ilogbl;
double ldexp(double, bint);
alias ldexp ldexpl;

alias __builtin_log logl;

double log10(double);
alias log10 log10l;
double log1p(double);
alias log1p log1pl;
double log2(double);
alias log2 log2l;
double logb(double);
alias logb logbl;

double modf(double, double*);
double modfl(real a, real* b)
{
  double c;
  double result = modf(a, & c);
  *b = c;
  return result;
}

double scalbn(double, bint);
alias scalbn scalbnl;
double scalbln(double, blng);
alias scalbln scalblnl;
double cbrt(double);
alias cbrt cbrtl;
double fabs(double);
alias fabs fabsl;
double hypot(double, double);
alias hypot hypotl;
double pow(double, double);
alias pow powl;

alias __builtin_sqrt sqrtl;

double erf(double);
alias erf erfl;
double erfc(double);
alias erfc erfcl;
double lgamma(double);
alias lgamma lgammal;
double tgamma(double);
alias tgamma tgammal;
double ceil(double);
alias ceil ceill;
double floor(double);
alias floor floorl;
double nearbyint(double);
alias nearbyint nearbyintl;
double rint(double);
alias rint rintl;
blng lrint(double);
alias lrint lrintl;
long llrint(double);
alias llrint llrintl;
double round(double);
alias round roundl;
blng lround(double);
alias lround lroundl;
long llround(double);
alias llround llroundl;
double trunc(double);
alias trunc truncl;
double fmod(double, double);
alias fmod fmodl;
double remainder(double, double);
alias remainder remainderl;
double remquo(double, double, bint*);
alias remquo remquol;
double copysign(double, double);
alias copysign copysignl;

alias __builtin_nan nanl;

double nextafter(double, double);
alias nextafter nextafterl;
double nexttoward(double, double);
alias nexttoward nexttowardl;
double fdim(double, double);
alias fdim fdiml;
double fmax(double, double);
alias fmax fmaxl;
double fmin(double, double);
alias fmin fminl;
double fma(double, double, double);
alias fma fmal;

alias __builtin_sqrt sqrt;
//alias __builtin_sqrtf sqrtf;// needs an extra step
}
