This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/11203] New: source doesn't compile with -O0 but they compile with -O3
- From: "spigel at olvs dot miee dot ru" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Jun 2003 07:07:33 -0000
- Subject: [Bug optimization/11203] New: source doesn't compile with -O0 but they compile with -O3
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
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?