On Wed, Jun 29, 2016 at 03:33:24PM -0400, Michael Meissner wrote: > This patch adds support to generate the ISA 3.0 VEXTRACTUB, VEXTRACTUH, and > XXEXTRACTUW instructions to extract a constant element from the small vector > integer types. I also added support to generate STXSIWX if a DImode is in an > Altivec register (which is needed for this patch when extracting char or short > elements). > > I built this on a little endian power8 system, and there were no regressions > in > make check. Is it ok to install in the trunk?
Note, I discovered that the second test (p9-extract-2.c) had the wrong number of '\'s for the alternative, and it would fail. This is the correct patch. Sorry about that. Index: gcc/testsuite/gcc.target/powerpc/p9-extract-2.c =================================================================== --- gcc/testsuite/gcc.target/powerpc/p9-extract-2.c (.../svn+ssh://meiss...@gcc.gnu.org/svn/gcc/trunk/gcc/testsuite/gcc.target/powerpc) (revision 0) +++ gcc/testsuite/gcc.target/powerpc/p9-extract-2.c (.../gcc/testsuite/gcc.target/powerpc) (revision 237858) @@ -0,0 +1,27 @@ +/* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-options "-mcpu=power9 -O2" } */ + +#include <altivec.h> + +void extract_int_0 (int *p, vector int a) { *p = vec_extract (a, 0); } +void extract_int_3 (int *p, vector int a) { *p = vec_extract (a, 3); } + +void extract_short_0 (short *p, vector short a) { *p = vec_extract (a, 0); } +void extract_short_3 (short *p, vector short a) { *p = vec_extract (a, 7); } + +void extract_schar_0 (signed char *p, vector signed char a) { *p = vec_extract (a, 0); } +void extract_schar_3 (signed char *p, vector signed char a) { *p = vec_extract (a, 15); } + +/* { dg-final { scan-assembler "vextractub" } } */ +/* { dg-final { scan-assembler "vextractuh" } } */ +/* { dg-final { scan-assembler "xxextractuw" } } */ +/* { dg-final { scan-assembler "stxsibx" } } */ +/* { dg-final { scan-assembler "stxsihx" } } */ +/* { dg-final { scan-assembler "stfiwx\|stxsiwx" } } */ +/* { dg-final { scan-assembler-not "mfvsrd" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ +/* { dg-final { scan-assembler-not "stxv" } } */ +/* { dg-final { scan-assembler-not "lwa" } } */ +/* { dg-final { scan-assembler-not "stw" } } */ -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meiss...@linux.vnet.ibm.com, phone: +1 (978) 899-4797