also start prefering NtDll API. so far: * NtQueryInformationFile * NtClose adds a performance workaround for windows unicode conversion. but that should probably be removed before merging
39 lines
854 B
C
39 lines
854 B
C
/**
|
|
* This file has no copyright assigned and is placed in the Public Domain.
|
|
* This file is part of the mingw-w64 runtime package.
|
|
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
|
*/
|
|
/*
|
|
* Written by J.T. Conklin <jtc@netbsd.org>.
|
|
* Changes for long double by Ulrich Drepper <drepper@cygnus.com>
|
|
* Public domain.
|
|
*/
|
|
|
|
#include <math.h>
|
|
|
|
double
|
|
logb (double x)
|
|
{
|
|
#ifdef __x86_64__
|
|
__mingw_dbl_type_t hlp;
|
|
int lx, hx;
|
|
|
|
hlp.x = x;
|
|
lx = hlp.lh.low;
|
|
hx = hlp.lh.high & 0x7fffffff; /* high |x| */
|
|
if ((hx | lx) == 0)
|
|
return -1.0 / fabs (x);
|
|
if (hx >= 0x7ff00000)
|
|
return x * x;
|
|
if ((hx >>= 20) == 0) /* IEEE 754 logb */
|
|
return -1022.0;
|
|
return (double) (hx - 1023);
|
|
#else
|
|
double res = 0.0;
|
|
asm volatile (
|
|
"fxtract\n\t"
|
|
"fstp %%st" : "=t" (res) : "0" (x));
|
|
return res;
|
|
#endif
|
|
}
|