The following code, which is a trimmed version of a preprocessed glibc test case (which also fails) calls standard_sse_constant_opcode with a case which is not implemenetd. Hence the slightly strange code, The precise version of gcc is 4.5.0 20090731 (experimental). The bugs works with gcc -O[123s] -mavx. gcc -O0 -mavx is not affected.
I think this is a bug in the i386 driver, which fails to realise this case is possible, but really do not know enough about this area to be absolutely certain. typedef unsigned int uint32_t; typedef unsigned long int uint64_t; typedef unsigned long int ulong; typedef unsigned int uint; typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__))); typedef uint32_t Elf_Symndx; typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16))); typedef float La_x86_64_ymm __attribute__ ((__vector_size__ (32))); typedef union { La_x86_64_ymm ymm[2]; La_x86_64_xmm xmm[4]; } La_x86_64_vector __attribute__ ((aligned(16))); typedef struct La_x86_64_retval { uint64_t lrv_rax; uint64_t lrv_rdx; La_x86_64_xmm lrv_xmm0; La_x86_64_xmm lrv_xmm1; long double lrv_st0; long double lrv_st1; La_x86_64_vector lrv_vector0; La_x86_64_vector lrv_vector1; } La_x86_64_retval; typedef int __v8si __attribute__ ((__vector_size__ (32))); typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__)); extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm256_set1_epi32 (int __A) { return __extension__ (__m256i)(__v8si){ __A, __A, __A, __A, __A, __A, __A, __A }; } # 7 "tst-auditmod4b.c" 1 unsigned int x_pltexit (La_x86_64_retval *outregs) { __m256i ymm = _mm256_set1_epi32 (-1); asm volatile ("vmovdqa %0, %%ymm0" : : "x" (ymm) : "xmm0" ); return 0; } -- Summary: standard_sse_constant_opcode crash on x86 64 Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dps at simpson dot demon dot co dot uk GCC build triplet: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40957