RFA: -mfpmath=sse -fpic vs double constants

Paolo Bonzini paolo.bonzini@lu.unisi.ch
Fri Jul 8 15:38:00 GMT 2005


> (this is Linux, the same happens on Darwin).
> This is not really a good idea, as movsd of a double-precision 1.0 is 
> faster.

I wonder whether fixing compress_float_constant is better.  It seems 
similar to the old hack in expr.c: expanding a/b to a*(1/b), and hope 
that it is transformed back to a/b or CSE-ed.

Also, here is some code that tries to load 1.0 into an SSE register 
without using the constant pool.  I don't know if it is fast or not.

float f = 1, g;
double h = 1, i;

void main ()
{
   /* Generates movl + movd */
   asm volatile
       ("movd %1, %0" : "=x" (g) : "r" (0x3f800000));
   printf ("%x %f %f\n", *(unsigned int *) &f, f, g);

   /* Generates movl + xorps + pinsrwl */
   asm volatile
       ("xorps %0, %0;\
         pinsrwl $3, %1, %0" : "=x" (i) : "r" (0x3ff0));
   printf ("%llx %llx %f %f\n", *(unsigned long long *) &h,
           *(unsigned long long *) &i, h, i);
}

Paolo



More information about the Gcc mailing list