https://bugs.freedesktop.org/show_bug.cgi?id=87658
--- Comment #11 from ubiz...@gmail.com --- (In reply to David Heidelberg (okias) from comment #9) > I'd say it's kernel (more probably) or gcc bug. Nope. You have to check FXSAVE bit in cpuid. > For gcc, try 4.7.x and/or 4.9.x if you can. > > For kernel, I think it may be(?) related to [1]- > Paranoid restore. send a > SIGSEGV if we fail to restore the state. > > [1] http://lkml.iu.edu/hypermail/linux/kernel/0807.3/0474.html > > Otherwise, I think I'm out of ideas, maybe someone more experienced could > help :) This is how gcc sets FTZ and DAZ for -ffast-math. Please see how to check for DAZ, and don't forget ((force_align_arg_pointer)) attribute. --cut here-- #define MXCSR_DAZ (1 << 6) /* Enable denormals are zero mode */ #define MXCSR_FTZ (1 << 15) /* Enable flush to zero mode */ #ifndef __x86_64__ /* All 64-bit targets have SSE and DAZ; only check them explicitly for 32-bit ones. */ #include "cpuid.h" #endif static void __attribute__((constructor)) #ifndef __x86_64__ /* The i386 ABI only requires 4-byte stack alignment, so this is necessary to make sure the fxsave struct gets correct alignment. See PR27537 and PR28621. */ __attribute__ ((force_align_arg_pointer)) #endif set_fast_math (void) { #ifndef __x86_64__ unsigned int eax, ebx, ecx, edx; if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) return; if (edx & bit_SSE) { unsigned int mxcsr; if (edx & bit_FXSAVE) { /* Check if DAZ is available. */ struct { unsigned short cwd; unsigned short swd; unsigned short twd; unsigned short fop; unsigned int fip; unsigned int fcs; unsigned int foo; unsigned int fos; unsigned int mxcsr; unsigned int mxcsr_mask; unsigned int st_space[32]; unsigned int xmm_space[32]; unsigned int padding[56]; } __attribute__ ((aligned (16))) fxsave; /* This is necessary since some implementations of FXSAVE do not modify reserved areas within the image. */ fxsave.mxcsr_mask = 0; __builtin_ia32_fxsave (&fxsave); mxcsr = fxsave.mxcsr; if (fxsave.mxcsr_mask & MXCSR_DAZ) mxcsr |= MXCSR_DAZ; } else mxcsr = __builtin_ia32_stmxcsr (); mxcsr |= MXCSR_FTZ; __builtin_ia32_ldmxcsr (mxcsr); } #else unsigned int mxcsr = __builtin_ia32_stmxcsr (); mxcsr |= MXCSR_DAZ | MXCSR_FTZ; __builtin_ia32_ldmxcsr (mxcsr); #endif } --cut here-- -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev