__builtin_ia32_vec_init_v4hi and __builtin_ia32_vec_init_v8qi
produce the pshufw instruction when compiled with -O2 and any of the
switches -mmmx, -m3dnow, -march=pentium-mmx, -march=pentium2,
-march=k6, -march=k6-2, i.e. targeting CPUs which do not support SSE.

Environment:
System: Linux localhost 2.4.20 #2 Tue Mar 8 16:32:57 CET 2005 i686 unknown
Architecture: i686
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../../cvs/gcc/configure --prefix=/opt/gcc-4.1 
--enable-languages=c,c++

How-To-Repeat:

typedef short __v4hi __attribute__ ((__vector_size__ (8)));
extern int i;
extern __v4hi v1;
extern __v4hi v2;
void foo (void)
{
  v1 = __builtin_ia32_vec_init_v4hi (i,i,i,i);
  v2 = __builtin_ia32_vec_init_v8qi (i,i,i,i,i,i,i,i);
}

gcc -O2 -mmmx -S example.c 

          .file   "example.c"
        .text
        .p2align 4,,15
.globl foo
        .type   foo, @function
foo:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %eax
        movl    i, %edx
        movl    %edx, -4(%ebp)
        andl    $255, %edx
        movl    %edx, %eax
        movd    -4(%ebp), %mm1
        sall    $8, %eax
        orl     %edx, %eax
        pshufw  $0, %mm1, %mm1
        movl    %eax, -4(%ebp)
        movq    %mm1, v1
        movd    -4(%ebp), %mm1
        pshufw  $0, %mm1, %mm1
        movq    %mm1, v2       
        leave
        ret
        .size   foo, .-foo
        .ident  "GCC: (GNU) 4.1.0 20050307 (experimental)"
        .section        .note.GNU-stack,"",@progbits

-- 
           Summary: Vector init builtin produces invalid instruction pshufw
           Product: gcc
           Version: 1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mschimek at users dot sourceforge dot net
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to