Compiling following: /* movaps.c */ struct v4f { float f[4];} __attribute__ ((aligned (16),packed)); void foo (void) { struct v4f a = {{1.0f, 2.0f, 3.0f, 4.0f}}; __asm__ __volatile__ ("movaps %0, %%xmm0"::"X"(a)); } with gcc -c -msse2 -masm=intel movaps.c gives: > movaps.c: In function `void foo()': > movaps.c:7: internal compiler error: in print_operand, at config/i386/i386.c:6564 The code compiles without error, using default asm syntax Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as -- host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls -- enable-languages=c,c++,objc --disable-win32-registry --disable-shared --enable- sjlj-exceptions --disable-libmudflap --disable-checking Thread model: win32 gcc version 4.0.0 20041101 (experimental) 3.3.3 and 3.4.3 releases also ICE with -masm=intel Danny
I think this is invalid, the operand is wrong, you cannot pass a struct to an operand of an asm, see PR 8788 for another example of where the problem can come into play. Confirmed.
ICE still there, not mingw specific.
This works with revision 129548, which I think is the one that fixed it.
*** Bug 33918 has been marked as a duplicate of this bug. ***