On 2018-09-05 01:47:52 +0100, Andrew Gierth wrote: > >>>>> "Tom" == Tom Lane <t...@sss.pgh.pa.us> writes: > > >> I kinda wonder if we should add -mno-x87 or such in configure when > >> we detect clang, obviously it doesn't deal correctly with this. > > Tom> Seems worth looking into, but what happens if someone tries to > Tom> compile for x87 hardware? Or do we care anymore? > > Already discussed this one on IRC with Andres, but to put this on record > for future reference: we can't use -mno-x87 on 32bit intel, even with an > -march= option with an SSE2 capable CPU, because the 32-bit ABI requires > floats to be returned in the x87 registers and breaking that either > results in silently wrong results or in clang dying with "fatal error: > error in backend: X87 register return with X87 disabled" or similar.
My current proposal is thus to do add a check that does #if defined(__clang__) && defined(__i386__) && !defined(__SSE2_MATH__) something-that-fails #endif in an autoconf test, and have configure complain if that fails. Something roughly along the lines of "Compiling PostgreSQL with clang, on 32bit x86, requires SSE2 support. Use -msse2 or use gcc." Greetings, Andres Freund