I'm compiling my application with -QxSSE -GL, since I have users that have non-SSE2 capable machines. I just got a minidump from such a user, and the compiler has issued a 'movsd xmm, mem' instruction. The subroutine deals only with floats, but does have some SSE intrinsics.
As far as I can tell, the code which causes the problems is:
mem = _mm_setr_ps(_mem, _mem, 0, 0);
den = _mm_setr_ps(_den, _den, 0, 0);
mem and den are __m128, while _mem and _den are float *.
The compiler cleverly restructures each line into a single movsd (for _mem, _mem) followed by xorps (for the 0, 0) and movlhps (to merge the two). Problem is movsd is a SSE2 command, which -QxSSE should have disabled. As far as I can see, this is the only SSE2 command used.
If I remove '-GL', the problem goes away, but so does some of the performance, and the users non non-SSE2 capable processors are the ones that need the optimizations the most.
Is there a workaround I can apply to tell the compiler that SSE is ok, but SSE2 really isn't, no matter how fancy it is?
Apologies if this is fixed in 11.1.048; I keep getting linker errors about symbol files with that release, so I've had to stay on 11.0 for now.