msvcrt: Provide the fmaf function on i386.
This is one of the new -f suffixed C99 math functions that actually are available on all architectures, even on i386. Signed-off-by: Martin Storsjo <martin@martin.st> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c722d819ea
commit
dec4c99ae7
|
@ -242,7 +242,7 @@
|
|||
@ cdecl floor(double) ucrtbase.floor
|
||||
@ cdecl -arch=arm,x86_64,arm64 floorf(float) ucrtbase.floorf
|
||||
@ cdecl fma(double double double) ucrtbase.fma
|
||||
@ cdecl -arch=arm,x86_64,arm64 fmaf(float float float) ucrtbase.fmaf
|
||||
@ cdecl fmaf(float float float) ucrtbase.fmaf
|
||||
@ stub fmal
|
||||
@ cdecl fmax(double double) ucrtbase.fmax
|
||||
@ cdecl fmaxf(float float) ucrtbase.fmaxf
|
||||
|
|
|
@ -2165,7 +2165,7 @@
|
|||
@ cdecl floor(double) MSVCRT_floor
|
||||
@ cdecl -arch=arm,x86_64,arm64 floorf(float) MSVCRT_floorf
|
||||
@ cdecl fma(double double double) MSVCRT_fma
|
||||
@ cdecl -arch=arm,x86_64,arm64 fmaf(float float float) MSVCRT_fmaf
|
||||
@ cdecl fmaf(float float float) MSVCRT_fmaf
|
||||
@ stub fmal
|
||||
@ cdecl fmax(double double) MSVCR120_fmax
|
||||
@ cdecl fmaxf(float float) MSVCR120_fmaxf
|
||||
|
|
|
@ -1831,7 +1831,7 @@
|
|||
@ cdecl floor(double) msvcr120.floor
|
||||
@ cdecl -arch=arm,x86_64,arm64 floorf(float) msvcr120.floorf
|
||||
@ cdecl fma(double double double) msvcr120.fma
|
||||
@ cdecl -arch=arm,x86_64,arm64 fmaf(float float float) msvcr120.fmaf
|
||||
@ cdecl fmaf(float float float) msvcr120.fmaf
|
||||
@ stub fmal
|
||||
@ cdecl fmax(double double) msvcr120.fmax
|
||||
@ cdecl fmaxf(float float) msvcr120.fmaxf
|
||||
|
|
|
@ -387,22 +387,6 @@ float CDECL MSVCRT_floorf( float x )
|
|||
return floorf(x);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fmaf (MSVCRT.@)
|
||||
*/
|
||||
float CDECL MSVCRT_fmaf( float x, float y, float z )
|
||||
{
|
||||
#ifdef HAVE_FMAF
|
||||
float w = fmaf(x, y, z);
|
||||
#else
|
||||
float w = x * y + z;
|
||||
#endif
|
||||
if ((isinf(x) && y == 0) || (x == 0 && isinf(y))) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
else if (isinf(x) && isinf(z) && x != z) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
else if (isinf(y) && isinf(z) && y != z) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
return w;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* frexpf (MSVCRT.@)
|
||||
*/
|
||||
|
@ -895,6 +879,22 @@ double CDECL MSVCRT_fma( double x, double y, double z )
|
|||
return w;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fmaf (MSVCRT.@)
|
||||
*/
|
||||
float CDECL MSVCRT_fmaf( float x, float y, float z )
|
||||
{
|
||||
#ifdef HAVE_FMAF
|
||||
float w = fmaf(x, y, z);
|
||||
#else
|
||||
float w = x * y + z;
|
||||
#endif
|
||||
if ((isinf(x) && y == 0) || (x == 0 && isinf(y))) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
else if (isinf(x) && isinf(z) && x != z) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
else if (isinf(y) && isinf(z) && y != z) *MSVCRT__errno() = MSVCRT_EDOM;
|
||||
return w;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* fabs (MSVCRT.@)
|
||||
*/
|
||||
|
|
|
@ -2306,7 +2306,7 @@
|
|||
@ cdecl floor(double) MSVCRT_floor
|
||||
@ cdecl -arch=arm,x86_64,arm64 floorf(float) MSVCRT_floorf
|
||||
@ cdecl fma(double double double) MSVCRT_fma
|
||||
@ cdecl -arch=arm,x86_64,arm64 fmaf(float float float) MSVCRT_fmaf
|
||||
@ cdecl fmaf(float float float) MSVCRT_fmaf
|
||||
@ stub fmal
|
||||
@ cdecl fmax(double double) MSVCR120_fmax
|
||||
@ cdecl fmaxf(float float) MSVCR120_fmaxf
|
||||
|
|
Loading…
Reference in New Issue