mirror of git://gcc.gnu.org/git/gcc.git
re PR libfortran/26712 (gfortran on mac intel runtime floating point exception when printing)
PR libfortran/26712 * config/fpu-387.h: Add special case for handling of SSE control bit on i386-darwin. From-SVN: r112546
This commit is contained in:
parent
ad3a7ce375
commit
7d30b888b5
|
|
@ -1,3 +1,9 @@
|
||||||
|
2006-03-30 Francois-Xavier Coudert <coudert@clipper.ens.fr>
|
||||||
|
|
||||||
|
PR libfortran/26712
|
||||||
|
* config/fpu-387.h: Add special case for handling of SSE
|
||||||
|
control bit on i386-darwin.
|
||||||
|
|
||||||
2006-03-30 Thomas Koenig <Thomas.Koenig@online.de>
|
2006-03-30 Thomas Koenig <Thomas.Koenig@online.de>
|
||||||
|
|
||||||
PR fortran/25031
|
PR fortran/25031
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,17 @@ void set_fpu (void)
|
||||||
/* SSE */
|
/* SSE */
|
||||||
asm volatile ("stmxcsr %0" : "=m" (cw_sse));
|
asm volatile ("stmxcsr %0" : "=m" (cw_sse));
|
||||||
cw_sse &= 0xFFFF0000;
|
cw_sse &= 0xFFFF0000;
|
||||||
|
#ifdef __APPLE__
|
||||||
|
cw_sse |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM
|
||||||
|
| _FPU_MASK_UM | _FPU_MASK_PM ) << 7;
|
||||||
|
if (options.fpe & GFC_FPE_INVALID) cw_sse &= ~(_FPU_MASK_IM << 7);
|
||||||
|
if (options.fpe & GFC_FPE_DENORMAL) cw_sse &= ~(_FPU_MASK_DM << 7);
|
||||||
|
if (options.fpe & GFC_FPE_ZERO) cw_sse &= ~(_FPU_MASK_ZM << 7);
|
||||||
|
if (options.fpe & GFC_FPE_OVERFLOW) cw_sse &= ~(_FPU_MASK_OM << 7);
|
||||||
|
if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse &= ~(_FPU_MASK_UM << 7);
|
||||||
|
if (options.fpe & GFC_FPE_PRECISION) cw_sse &= ~(_FPU_MASK_PM << 7);
|
||||||
|
asm volatile ("ldmxcsr %0" : : "m" (cw_sse));
|
||||||
|
#else
|
||||||
if (options.fpe & GFC_FPE_INVALID) cw_sse |= 1 << 7;
|
if (options.fpe & GFC_FPE_INVALID) cw_sse |= 1 << 7;
|
||||||
if (options.fpe & GFC_FPE_DENORMAL) cw_sse |= 1 << 8;
|
if (options.fpe & GFC_FPE_DENORMAL) cw_sse |= 1 << 8;
|
||||||
if (options.fpe & GFC_FPE_ZERO) cw_sse |= 1 << 9;
|
if (options.fpe & GFC_FPE_ZERO) cw_sse |= 1 << 9;
|
||||||
|
|
@ -100,5 +111,6 @@ void set_fpu (void)
|
||||||
if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse |= 1 << 11;
|
if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse |= 1 << 11;
|
||||||
if (options.fpe & GFC_FPE_PRECISION) cw_sse |= 1 << 12;
|
if (options.fpe & GFC_FPE_PRECISION) cw_sse |= 1 << 12;
|
||||||
asm volatile ("ldmxcsr %0" : : "m" (cw_sse));
|
asm volatile ("ldmxcsr %0" : : "m" (cw_sse));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue