Can a 32 bit GCC running on a 64 bit Intel be made to emit SSE SIMD instructions automatically?
Tim Prince
n8tm@aol.com
Sat May 19 21:58:00 GMT 2012
On 5/19/2012 4:43 PM, Georg GCC user wrote:
> Hi,
>
> what is given, unchangeably, is a 32 bit GNU/Linux
> on 64 bit Intel hardware with SSE3.
> The systems have a 32 bit GCC (from the OS distribution),
> 4.6.1 or 4.6.3. Some things are in C, others are in Ada.
>
> I am targeting a function like the one below (semi-pseudocode)
> and try to have GCC automatically generate SSE SIMD instructions
> such as mulpd, or divpd for the above system. Automatically meaning
> *without* importing builtins/intrinsics, explicitly or via #include.
> This works just fine using attributes when everything
> is 64 bits, using -O3 -msse3 -mfpmath=sse.
> I cannot get it to work at all when OS and GCC are 32 bit.
> (Using intrinsics explicitly does work, sort of, but that's
> beside the point, if I may say so.)
>
> So, is there any way to make a 32 bit GCC emit mulpd and
> the like automatically (and correctly), without explicitly
> calling built-ins, like there is when everything is 64 bits?
> (Maybe: Does the vectorizer, if applicable, recognize that
> it may assume presence of suitable hardware and act
> accordingly?)
>
> VECTOR f(double a, double b, double c, double d)
> {
> return (VECTOR) { a OP c, b OP d };
> }
>
> (VECTOR is an array of two 64 bit FPT components,
> in all GCC languages I have tried. It works nicely, as said,
> with 64 bit compilers.)
>
> Georg
Did you consider a suitable -march setting? Even -march=pentium-m (the
weakest such suggestion) generates simd code when it finds vectorization
opportunities. The oldest -march setting which would generate SSE3 by
default would be -march=prescott. -march=pentium4 would be the earliest
option to enable SSE2 on i386, somewhat consistent with x86_64 default.
If you want to generate code to run on the oldest i386 linux platforms,
from 12 years ago or more, you can't use SSE2. If you are willing to
limit support to platforms of the last decade, why not use x86_64?
--
Tim Prince
More information about the Gcc-help
mailing list