On Thu, Aug 25, 2005 at 12:37:32PM -0700, Ian Lance Taylor wrote:
> Fariborz Jahanian <[EMAIL PROTECTED]> writes:
> 
> > Forgot to attach the patch:
> > 
> > Index: i386.c
> > ===================================================================
> > RCS file: /cvs/gcc/gcc/gcc/config/i386/i386.c,v
> > retrieving revision 1.795.4.33
> > diff -c -p -r1.795.4.33 i386.c
> > *** i386.c      15 Aug 2005 23:36:10 -0000      1.795.4.33
> > --- i386.c      25 Aug 2005 17:08:33 -0000
> > *************** ix86_rtx_costs (rtx x, int code, int out
> > *** 15730,15740 ****
> >          else
> >          switch (standard_80387_constant_p (x))
> >            {
> > !         case 1: /* 0.0 */
> > !           *total = 1;
> > !           break;
> > !         default: /* Other constants */
> > !           *total = 2;
> >              break;
> >            case 0:
> >            case -1:
> > --- 15730,15737 ----
> >          else
> >          switch (standard_80387_constant_p (x))
> >            {
> > !         default: /* All constants */
> > !           *total = 0;
> >              break;
> >            case 0:
> >            case -1:
> 
> For what it's worth, as I told Fariborz, I suspect that returning 0 is
> correct for SFmode, but I'm somewhat doubtful for DFmode.  And his
> test case is odd since the resulting code has more instructions and is
> larger.  I know little about x86 instruction timings, but it seems
> surprising that the new sequence is faster.  Maybe the problem is in
> using %xmm0 instead of one of the 80387 registers--or, since this is
> after all merely a constant--one of the general registers.
> 
> And in any case this type of thing should be controlled by an entry in
> the i386 processor_costs structure.

I think the problem may be somewhere else. I got the same xmm0 code
sequence on Linux/ia32 with -msse3 -mfpmath=sse. However, I got

        xorl    %eax, %eax
        movq    %rax, 16(%rdi)
        movq    %rax, 8(%rdi)
        movq    %rax, (%rdi)

on Linux/x86-64.


H.J.

Reply via email to