This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug optimization/11203] New: source doesn't compile with -O0 but they compile with -O3


PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11203

           Summary: source doesn't compile with -O0 but they compile with -
                    O3
           Product: gcc
           Version: 3.2.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: optimization
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: spigel@olvs.miee.ru
                CC: gcc-bugs@gcc.gnu.org
  GCC host triplet: Linux, 2.4.21, Athlon-XP

I have little source :

start --->

typedef struct {
    float real;
    float imag;
    } complex_t;

extern void
fft_asmb_3dnow (int k, complex_t * x, complex_t * wTB,
		const complex_t * d, const complex_t * d_3)
{
  register complex_t *x2k, *x3k, *x4k, *wB;
  {
    __asm__ __volatile__ ("movq	%4, %%mm0\n\t"
			  "movq	%5, %%mm1\n\t"
			  "movq	%%mm0, %%mm5\n\t"
			  "pfadd %%mm1, %%mm5\n\t"
			  "pxor	%%mm6, %%mm0\n\t"
			  "pxor	%%mm7, %%mm1\n\t"
			  "pfadd %%mm1, %%mm0\n\t"
			  "movq	%%mm0, %%mm4\n\t"
			  "pswapd %%mm4, %%mm4\n\t"
			  "movq	%6, %%mm0\n\t"
			  "movq	%7, %%mm2\n\t"
			  "movq	%%mm0, %%mm1\n\t"
			  "movq	%%mm2, %%mm3\n\t"
			  "pfadd %%mm5, %%mm0\n\t"
			  "pfadd %%mm4, %%mm2\n\t"
			  "movq	%%mm0, %0\n\t"
			  "pfsub %%mm5, %%mm1\n\t"
			  "movq	%%mm2, %3\n\t"
			  "pfsub %%mm4, %%mm3\n\t"
			  "movq	%%mm1, %1\n\t"
			  "movq	%%mm3, %2":"=m"(x[0]),
			  "=m"(x3k[0]),
			  "=m"(x2k[0]),
			  "=m"(x4k[0]):"m"(wTB[0]),
			  "m" (wTB[k * 2]),
			   "m" (x[0]),
			   "m" (x2k[0]):"memory");
  };
}

end ------->

if I add "-O0" option for gcc 3.2.3 or 3.3.1 then
compiler say "NO" like this:
"error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'"
but if I add "-O3" then compile and code work fine.

What is wrong compiler or my asm code?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]