diff mbox

, Add PowerPC ISA 3.0 vector extract support

Message ID 20160629204358.GA21819@ibm-tiger.the-meissners.org
State New
Headers show

Commit Message

Michael Meissner June 29, 2016, 8:43 p.m. UTC
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.
diff mbox

Patch

Index: gcc/testsuite/gcc.target/powerpc/p9-extract-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/p9-extract-2.c	(.../svn+ssh://meissner@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"             } } */