| /** |
| * 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. |
| */ |
| |
| #include "internal.h" |
| |
| #if defined(__i386__) || (defined(__x86_64__) && !defined(__arm64ec__)) |
| /* Internal MinGW version of _control87_2 */ |
| int __mingw_control87_2( unsigned int newval, unsigned int mask, |
| unsigned int *x86_cw, unsigned int *sse2_cw ) |
| { |
| if (x86_cw) |
| { |
| *x86_cw = newval; |
| __mingw_setfp(x86_cw, mask, NULL, 0); |
| } |
| |
| if (!sse2_cw) return 1; |
| |
| if (__mingw_has_sse()) |
| { |
| *sse2_cw = newval; |
| __mingw_setfp_sse(sse2_cw, mask, NULL, 0); |
| } |
| else *sse2_cw = 0; |
| |
| return 1; |
| } |
| #endif |
| |
| /* Internal MinGW version of _control87 */ |
| unsigned int __mingw_controlfp(unsigned int newval, unsigned int mask) |
| { |
| unsigned int flags = 0; |
| #if defined(__i386__) || (defined(__x86_64__) && !defined(__arm64ec__)) |
| unsigned int sse2_cw; |
| |
| __mingw_control87_2( newval, mask, &flags, &sse2_cw ); |
| |
| if (__mingw_has_sse()) |
| { |
| if ((flags ^ sse2_cw) & (_MCW_EM | _MCW_RC)) flags |= _EM_AMBIGUOUS; |
| flags |= sse2_cw; |
| } |
| #else |
| flags = newval; |
| __mingw_setfp(&flags, mask, NULL, 0); |
| #endif |
| return flags; |
| } |
| |