i386: Use PUNPCKL?? to implement vector extend and zero_extend for TARGET_SSE2.
Implement vector extend and zero_extend functionality for TARGET_SSE2 using PUNPCKL?? family of instructions. The code for e.g. zero-extend from V2SI to V2DImode improves from: movd %xmm0, %edx pshufd $85, %xmm0, %xmm0 movd %xmm0, %eax movq %rdx, (%rdi) movq %rax, 8(%rdi) to: pxor %xmm1, %xmm1 punpckldq %xmm1, %xmm0 movaps %xmm0, (%rdi) And the code for sign-extend from V2SI to V2DImode from: movd %xmm0, %edx pshufd $85, %xmm0, %xmm0 movd %xmm0, %eax movslq %edx, %rdx cltq movq %rdx, (%rdi) movq %rax, 8(%rdi) to: pxor %xmm1, %xmm1 pcmpgtd %xmm0, %xmm1 punpckldq %xmm1, %xmm0 movaps %xmm0, (%rdi) PR target/111023 gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_split_mmx_punpck): Also handle V2QImode. (ix86_expand_sse_extend): New function. * config/i386/i386-protos.h (ix86_expand_sse_extend): New prototype. * config/i386/mmx.md (<any_extend:insn>v4qiv4hi2): Enable for TARGET_SSE2. Expand through ix86_expand_sse_extend for !TARGET_SSE4_1. (<any_extend:insn>v2hiv2si2): Ditto. (<any_extend:insn>v2qiv2hi2): Ditto. * config/i386/sse.md (<any_extend:insn>v8qiv8hi2): Ditto. (<any_extend:insn>v4hiv4si2): Ditto. (<any_extend:insn>v2siv2di2): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr111023-2.c: New test. * gcc.target/i386/pr111023-4b.c: New test. * gcc.target/i386/pr111023-8b.c: New test. * gcc.target/i386/pr111023.c: New test.
Showing
- gcc/config/i386/i386-expand.cc 39 additions, 2 deletionsgcc/config/i386/i386-expand.cc
- gcc/config/i386/i386-protos.h 1 addition, 0 deletionsgcc/config/i386/i386-protos.h
- gcc/config/i386/mmx.md 21 additions, 3 deletionsgcc/config/i386/mmx.md
- gcc/config/i386/sse.md 24 additions, 3 deletionsgcc/config/i386/sse.md
- gcc/testsuite/gcc.target/i386/pr111023-2.c 52 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr111023-2.c
- gcc/testsuite/gcc.target/i386/pr111023-4b.c 17 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr111023-4b.c
- gcc/testsuite/gcc.target/i386/pr111023-8b.c 31 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr111023-8b.c
- gcc/testsuite/gcc.target/i386/pr111023.c 49 additions, 0 deletionsgcc/testsuite/gcc.target/i386/pr111023.c
Loading
Please register or sign in to comment