diff mbox series

[rs6000] Add BE support for first_match_index, first_match_or_eos_index, first_mismatch_index, first_mismatch_or_eos_index

Message ID 1528297282.4981.10.camel@us.ibm.com
State New
Headers show
Series [rs6000] Add BE support for first_match_index, first_match_or_eos_index, first_mismatch_index, first_mismatch_or_eos_index | expand

Commit Message

Carl Love June 6, 2018, 3:01 p.m. UTC
GCC Maintainers:

The Power 9 builtins first_match_index, first_match_or_eos_index,
first_mismatch_index, first_mismatch_or_eos_index work for LE only. 
The following patch adds BE support to each of the builtins. 
Additional debug print statements were added to the test case to aid in
verifying the results.

The patch was tested on:

    powerpc64le-unknown-linux-gnu (Power 8 LE)   
    powerpc64le-unknown-linux-gnu (Power 9 LE)
    powerpc64-unknown-linux-gnu (Power 8 BE)

With no regressions.

Currently, there are no Power 9 BE systems to test the patch on.  The
test file was compiled on a Power 8 BE system and then the generated
binary file was examined via objdump to see that the desired
instruction was generated.  

Please let me know if the patch looks OK for GCC mainline.

                         Carl Love

---------------------------------------------------------------------

gcc/ChangeLog:

2018-06-04  Carl Love  <cel@us.ibm.com>

	* gcc/config/rs6000/vsx.md (first_match_index_<mode>):
	Calculate index using natureal element order.
	(first_match_or_eos_index_<mode>):
	Calculate index using natural element order.
	(first_match_index_<mode>):
	Calculate index using natural element order.
	(first_match_or_eos_index_<mode>):
	Calculate index using natural order.
	(define_insn vclzlsbb): Change to define_insn vclzlsbb_<mode>.
	for BE and LE modes.
	* gcc/config/rs6000/rs6000-c.c: Rename P9V_BUILTIN_VCLZLSBB,
	P9V_BUILTIN_VCLZLSBB_V16QI.
	* gcc/config/rs6000/rs6000-builtin.def: Make VCLZLSBB mode
	specific.

gcc/testsuite/ChangeLog:

2018-06-04  Carl Love  <cel@us.ibm.com>

	* gcc.target/powerpc/builtins-8-p9-runnable.c: Add additional
	debug print statements.  Fix a few formating issues.
	* gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c (dg-error): Update expected
	error message.
---
 gcc/config/rs6000/rs6000-builtin.def               |   4 +-
 gcc/config/rs6000/rs6000-c.c                       |   4 +-
 gcc/config/rs6000/vsx.md                           |  62 ++-
 .../gcc.target/powerpc/builtins-8-p9-runnable.c    | 503 ++++++++++++++++++++-
 .../gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c      |   2 +-
 5 files changed, 543 insertions(+), 32 deletions(-)

Comments

Segher Boessenkool June 6, 2018, 8:49 p.m. UTC | #1
On Wed, Jun 06, 2018 at 08:01:22AM -0700, Carl Love wrote:
> 2018-06-04  Carl Love  <cel@us.ibm.com>
> 
> 	* gcc/config/rs6000/vsx.md (first_match_index_<mode>):
> 	Calculate index using natureal element order.

Typo ("natural").  You normally shouldn't do a line break after : btw.

One thing that caught my eye, nothing new though:

>      {
>        rtx tmp = gen_reg_rtx (SImode);
> -      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> +      if (!BYTES_BIG_ENDIAN)
> +        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> +      else
> +        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
>        emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
>      }

Can this work with lshrsi3 instead?  That is slightly cheaper.

Looks great, please apply to trunk.  Thanks!


Segher
Carl Love June 6, 2018, 10:30 p.m. UTC | #2
Segher:

> > 	* gcc/config/rs6000/vsx.md (first_match_index_<mode>):
> > 	Calculate index using natureal element order.
> 
> Typo ("natural").  You normally shouldn't do a line break after :
> btw.
> 

Fixed both issues.


> One thing that caught my eye, nothing new though:
> 
> >      {
> >        rtx tmp = gen_reg_rtx (SImode);
> > -      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > +      if (!BYTES_BIG_ENDIAN)
> > +        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > +      else
> > +        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
> >        emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
> >      }
> 
> Can this work with lshrsi3 instead?  That is slightly cheaper.
> 
> Looks great, please apply to trunk.  Thanks!

Yes, the builtin works with lshrsi3 change.  I will commit with this
change.

FYI, Bill would like to patch backported to GCC 8.  Is that OK?

                       Carl Love
Segher Boessenkool June 6, 2018, 11:19 p.m. UTC | #3
On Wed, Jun 06, 2018 at 03:30:17PM -0700, Carl Love wrote:
> > One thing that caught my eye, nothing new though:
> > 
> > >      {
> > >        rtx tmp = gen_reg_rtx (SImode);
> > > -      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > > +      if (!BYTES_BIG_ENDIAN)
> > > +        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > > +      else
> > > +        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
> > >        emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
> > >      }
> > 
> > Can this work with lshrsi3 instead?  That is slightly cheaper.
> > 
> > Looks great, please apply to trunk.  Thanks!
> 
> Yes, the builtin works with lshrsi3 change.  I will commit with this
> change.

It occurs in four places, please fix all then.

> FYI, Bill would like to patch backported to GCC 8.  Is that OK?

Certainly.  Thanks!


Segher
Carl Love June 6, 2018, 11:22 p.m. UTC | #4
Segher:

> > > >        rtx tmp = gen_reg_rtx (SImode);
> > > > -      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > > > +      if (!BYTES_BIG_ENDIAN)
> > > > +        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
> > > > +      else
> > > > +        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
> > > >        emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT
> > > > (sh)));
> > > >      }
> > > 
> > > Can this work with lshrsi3 instead?  That is slightly cheaper.
> > > 
> > > Looks great, please apply to trunk.  Thanks!
> > 
> > Yes, the builtin works with lshrsi3 change.  I will commit with
> > this
> > change.
> 
> It occurs in four places, please fix all then.

Yup, I already got all four of them.  :-) 

             Carl Love
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def
index 5503893..779f8a3 100644
--- a/gcc/config/rs6000/rs6000-builtin.def
+++ b/gcc/config/rs6000/rs6000-builtin.def
@@ -2194,7 +2194,9 @@  BU_P9V_64BIT_AV_X (STXVL,	"stxvl",	MISC)
 BU_P9V_64BIT_AV_X (XST_LEN_R,	"xst_len_r",	MISC)
 
 /* 1 argument vector functions added in ISA 3.0 (power9). */
-BU_P9V_AV_1 (VCLZLSBB, "vclzlsbb",		CONST,	vclzlsbb)
+BU_P9V_AV_1 (VCLZLSBB_V16QI, "vclzlsbb_v16qi",	CONST,	vclzlsbb_v16qi)
+BU_P9V_AV_1 (VCLZLSBB_V8HI, "vclzlsbb_v8hi",	CONST,	vclzlsbb_v8hi)
+BU_P9V_AV_1 (VCLZLSBB_V4SI, "vclzlsbb_v4si",	CONST,	vclzlsbb_v4si)
 BU_P9V_AV_1 (VCTZLSBB_V16QI, "vctzlsbb_v16qi",	CONST,	vctzlsbb_v16qi)
 BU_P9V_AV_1 (VCTZLSBB_V8HI, "vctzlsbb_v8hi",	CONST,	vctzlsbb_v8hi)
 BU_P9V_AV_1 (VCTZLSBB_V4SI, "vctzlsbb_v4si",	CONST,	vctzlsbb_v4si)
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 6cf5537..948d387 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -5451,9 +5451,9 @@  const struct altivec_builtin_types altivec_overloaded_builtins[] = {
     RS6000_BTI_bool_V4SI, RS6000_BTI_unsigned_V4SI,
     RS6000_BTI_unsigned_V4SI, 0 },
 
-  { P9V_BUILTIN_VEC_VCLZLSBB, P9V_BUILTIN_VCLZLSBB,
+  { P9V_BUILTIN_VEC_VCLZLSBB, P9V_BUILTIN_VCLZLSBB_V16QI,
     RS6000_BTI_INTSI, RS6000_BTI_V16QI, 0, 0 },
-  { P9V_BUILTIN_VEC_VCLZLSBB, P9V_BUILTIN_VCLZLSBB,
+  { P9V_BUILTIN_VEC_VCLZLSBB, P9V_BUILTIN_VCLZLSBB_V16QI,
     RS6000_BTI_INTSI, RS6000_BTI_unsigned_V16QI, 0, 0 },
 
   { P9V_BUILTIN_VEC_VCTZLSBB, P9V_BUILTIN_VCTZLSBB_V16QI,
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index 58796ff..36a6312 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -4723,7 +4723,8 @@ 
   "vcmpnez<VSX_EXTRACT_WIDTH>. %0,%1,%2"
   [(set_attr "type" "vecsimple")])
 
-;; Return first position of match between vectors
+;; Return first position of match between vectors using natural order
+;; for both LE and BE execution modes.
 (define_expand "first_match_index_<mode>"
   [(match_operand:SI 0 "register_operand")
    (unspec:SI [(match_operand:VSX_EXTRACT_I 1 "register_operand")
@@ -4743,17 +4744,26 @@ 
   sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
 
   if (<MODE>mode == V16QImode)
-    emit_insn (gen_vctzlsbb_<mode> (operands[0], not_result));
+    {
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (operands[0], not_result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (operands[0], not_result));
+    }
   else
     {
       rtx tmp = gen_reg_rtx (SImode);
-      emit_insn (gen_vctzlsbb_<mode> (tmp, not_result));
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (tmp, not_result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (tmp, not_result));
       emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
     }
   DONE;
 })
 
-;; Return first position of match between vectors or end of string (EOS)
+;; Return first position of match between vectors or end of string (EOS) using
+;; natural element order for both LE and BE execution modes.
 (define_expand "first_match_or_eos_index_<mode>"
   [(match_operand:SI 0 "register_operand")
    (unspec: SI [(match_operand:VSX_EXTRACT_I 1 "register_operand")
@@ -4785,17 +4795,26 @@ 
   sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
 
   if (<MODE>mode == V16QImode)
-    emit_insn (gen_vctzlsbb_<mode> (operands[0], result));
+    {
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (operands[0], result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (operands[0], result));
+    }
   else
     {
       rtx tmp = gen_reg_rtx (SImode);
-      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
+    else
+        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
       emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
     }
   DONE;
 })
 
-;; Return first position of mismatch between vectors
+;; Return first position of mismatch between vectors using natural
+;; element order for both LE and BE execution modes.
 (define_expand "first_mismatch_index_<mode>"
   [(match_operand:SI 0 "register_operand")
    (unspec: SI [(match_operand:VSX_EXTRACT_I 1 "register_operand")
@@ -4811,17 +4830,26 @@ 
   sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
 
   if (<MODE>mode == V16QImode)
-    emit_insn (gen_vctzlsbb_<mode> (operands[0], cmp_result));
+    {
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (operands[0], cmp_result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (operands[0], cmp_result));
+    }
   else
     {
       rtx tmp = gen_reg_rtx (SImode);
-      emit_insn (gen_vctzlsbb_<mode> (tmp, cmp_result));
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (tmp, cmp_result));
+    else
+        emit_insn (gen_vclzlsbb_<mode> (tmp, cmp_result));
       emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
     }
   DONE;
 })
 
 ;; Return first position of mismatch between vectors or end of string (EOS)
+;; using natural element order for both LE and BE execution modes.
 (define_expand "first_mismatch_or_eos_index_<mode>"
   [(match_operand:SI 0 "register_operand")
    (unspec: SI [(match_operand:VSX_EXTRACT_I 1 "register_operand")
@@ -4856,11 +4884,19 @@ 
   sh = GET_MODE_SIZE (GET_MODE_INNER (<MODE>mode)) / 2;
 
   if (<MODE>mode == V16QImode)
-    emit_insn (gen_vctzlsbb_<mode> (operands[0], result));
+    {
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (operands[0], result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (operands[0], result));
+    }
   else
     {
       rtx tmp = gen_reg_rtx (SImode);
-      emit_insn (gen_vctzlsbb_<mode> (tmp, result));
+      if (!BYTES_BIG_ENDIAN)
+        emit_insn (gen_vctzlsbb_<mode> (tmp, result));
+      else
+        emit_insn (gen_vclzlsbb_<mode> (tmp, result));
       emit_insn (gen_ashrsi3 (operands[0], tmp, GEN_INT (sh)));
     }
   DONE;
@@ -5040,10 +5076,10 @@ 
   [(set_attr "type" "vecsimple")])
 
 ;; Vector Count Leading Zero Least-Significant Bits Byte
-(define_insn "vclzlsbb"
+(define_insn "vclzlsbb_<mode>"
   [(set (match_operand:SI 0 "register_operand" "=r")
 	(unspec:SI
-	 [(match_operand:V16QI 1 "altivec_register_operand" "v")]
+	 [(match_operand:VSX_EXTRACT_I 1 "altivec_register_operand" "v")]
 	 UNSPEC_VCLZLSBB))]
   "TARGET_P9_VECTOR"
   "vclzlsbb %0,%1"
diff --git a/gcc/testsuite/gcc.target/powerpc/builtins-8-p9-runnable.c b/gcc/testsuite/gcc.target/powerpc/builtins-8-p9-runnable.c
index 9ec338d..158de5e 100644
--- a/gcc/testsuite/gcc.target/powerpc/builtins-8-p9-runnable.c
+++ b/gcc/testsuite/gcc.target/powerpc/builtins-8-p9-runnable.c
@@ -10,8 +10,84 @@ 
 #include <stdio.h>
 #endif
 
+#ifdef DEBUG2
+#include <stdio.h>
+#endif
+
+
 void abort (void);
 
+#ifdef DEBUG2
+void print_signed_char (char *name, vector signed char src)
+{
+  int i;
+
+  for (i = 0; i < 8; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("\n");
+
+  for (i = 8; i < 15; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 15, src[i]);
+}
+
+void print_unsigned_char (char *name, vector unsigned char src)
+{
+  int i;
+
+  for (i = 0; i < 8; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("\n");
+
+  for (i = 8; i < 15; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 15, src[i]);
+}
+
+void print_signed_short_int (char *name, vector signed short int src)
+{
+  int i;
+
+  for (i = 0; i < 7; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 7, src[i]);
+}
+
+void print_unsigned_short_int (char *name, vector unsigned short int src)
+{
+  int i;
+
+  for (i = 0; i < 7; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 7, src[i]);
+}
+
+void print_signed_int (char *name, vector signed int src)
+{
+  int i;
+
+  for (i = 0; i < 3; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 3, src[i]);
+}
+
+void print_unsigned_int (char *name, vector unsigned int src)
+{
+  int i;
+
+  for (i = 0; i < 3; i++)
+    printf("%s[%d] = %d, ", name, i, src[i]);
+
+  printf("%s[%d] = %d\n", name, 3, src[i]);
+}
+#endif
 
 int main() {
 
@@ -24,7 +100,9 @@  int main() {
   unsigned int result, expected_result;
 
 
-  /* Tests for: vec_first_match_index() */
+  /* Tests for: vec_first_match_index()
+     The element index in natural element order is returned for the
+     first match or the number of elements if there is no match.  */
   /* char */
   char_src1 = (vector signed char) {-1, 2, 3, 4, -5, 6, 7, 8,
 				    9, 10, 11, 12, 13, 14, 15, 16};
@@ -34,6 +112,12 @@  int main() {
 
   result = vec_first_match_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf(" vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first match result (%d) does not match expected result (%d)\n",
@@ -50,6 +134,12 @@  int main() {
 
   result = vec_first_match_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first match result (%d) does not match expected result (%d)\n",
@@ -66,6 +156,12 @@  int main() {
 
   result = vec_first_match_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first match result (%d) does not match expected result (%d)\n",
@@ -82,6 +178,12 @@  int main() {
 
   result = vec_first_match_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first match result (%d) does not match expected result (%d)\n",
@@ -98,6 +200,12 @@  int main() {
 
   result = vec_first_match_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match result (%d) does not match expected result (%d)\n",
@@ -113,6 +221,12 @@  int main() {
 
   result = vec_first_match_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match result (%d) does not match expected result (%d)\n",
@@ -128,6 +242,12 @@  int main() {
 
   result = vec_first_match_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first match result (%d) does not match expected result (%d)\n",
@@ -145,6 +265,12 @@  int main() {
 
   result = vec_first_match_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first match result (%d) does not match expected result (%d)\n",
@@ -161,6 +287,12 @@  int main() {
 
   result = vec_first_match_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first match result (%d) does not match expected result (%d)\n",
@@ -176,6 +308,12 @@  int main() {
 
   result = vec_first_match_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first match result (%d) does not match expected result (%d)\n",
@@ -191,6 +329,12 @@  int main() {
 
   result = vec_first_match_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first match result (%d) does not match expected result (%d)\n",
@@ -206,6 +350,12 @@  int main() {
 
   result = vec_first_match_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_match_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first match result (%d) does not match expected result (%d)\n",
@@ -214,7 +364,9 @@  int main() {
     abort();
 #endif
 
-  /* Tests for: vec_first_mismatch_index() */
+  /* Tests for: vec_first_mismatch_index()
+     The element index in BE order is returned for the first mismatch
+     or the number of elements if there is no match.   */
   /* char */
   char_src1 = (vector signed char) {-1, 2, 3, 4, -5, 6, 7, 8,
 				    9, 10, 11, 12, 13, 14, 15, 16};
@@ -224,6 +376,12 @@  int main() {
 
   result = vec_first_mismatch_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first mismatch result (%d) does not match expected result (%d)\n",
@@ -240,6 +398,12 @@  int main() {
 
   result = vec_first_mismatch_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first mismatch result (%d) does not match expected result (%d)\n",
@@ -256,6 +420,12 @@  int main() {
 
   result = vec_first_mismatch_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch result (%d) does not match expected result (%d)\n",
@@ -272,10 +442,16 @@  int main() {
 
   result = vec_first_mismatch_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch result (%d) does not match expected result (%d)\n",
-	     result, expected_result);
+	    result, expected_result);
 #else
     abort();
 #endif
@@ -288,6 +464,12 @@  int main() {
 
   result = vec_first_mismatch_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch result (%d) does not match expected result (%d)\n",
@@ -304,6 +486,12 @@  int main() {
 
   result = vec_first_mismatch_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch result (%d) does not match expected result (%d)\n",
@@ -319,6 +507,12 @@  int main() {
 
   result = vec_first_mismatch_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch result (%d) does not match expected result (%d)\n",
@@ -334,6 +528,12 @@  int main() {
 
   result = vec_first_mismatch_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first mismatch result (%d) does not match expected result (%d)\n",
@@ -349,6 +549,12 @@  int main() {
 
   result = vec_first_mismatch_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first mismatch result (%d) does not match expected result (%d)\n",
@@ -365,6 +571,12 @@  int main() {
 
   result = vec_first_mismatch_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -380,6 +592,12 @@  int main() {
 
   result = vec_first_mismatch_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -395,6 +613,12 @@  int main() {
 
   result = vec_first_mismatch_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -410,6 +634,12 @@  int main() {
 
   result = vec_first_mismatch_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first mismatch result (%d) does not match expected result (%d)\n",
@@ -425,7 +655,14 @@  int main() {
 
   result = vec_first_mismatch_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_mismatch_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
+
 #ifdef DEBUG
     printf("Error: uint first mismatch result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
@@ -433,7 +670,9 @@  int main() {
     abort();
 #endif
 
-  /* Tests for: vec_first_match_or_eos_index() */
+  /* Tests for: vec_first_match_or_eos_index() 
+     The element index in BE order is returned for the first match
+     or the number of elements if there is no match.  */
   /* char */
   char_src1 = (vector signed char) {-1, 2, 3, 4, -5, 6, 7, 8,
 				    9, 10, 11, 12, 13, 14, 15, 16};
@@ -443,6 +682,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first match result (%d) does not match expected result (%d)\n",
@@ -459,6 +704,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first match or EOS result (%d) does not match expected result (%d)\n",
@@ -475,12 +726,18 @@  int main() {
 
   result = vec_first_match_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first match or EOS result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
 #else
-     abort();
+    abort();
 #endif
 
   uchar_src1 = (vector unsigned char) {1, 2, 3, 4, 5, 6, 7, 8,
@@ -491,6 +748,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first match or EOS result (%d) does not match expected result (%d)\n",
@@ -507,6 +770,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first match or EOS  result (%d) does not match expected result (%d)\n",
@@ -523,6 +792,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -538,6 +813,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -553,6 +834,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -568,6 +855,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -583,6 +876,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -600,6 +899,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -616,10 +921,16 @@  int main() {
 
   result = vec_first_match_or_eos_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
-     printf("Error: ushort int first match or EOS result (%d) does not match expected result (%d)\n",
-	    result, expected_result);
+    printf("Error: ushort int first match or EOS result (%d) does not match expected result (%d)\n",
+	   result, expected_result);
 #else
     abort();
 #endif
@@ -632,6 +943,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -647,6 +964,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first match or EOS result (%d) does not match expected result (%d)\n",
@@ -662,10 +985,16 @@  int main() {
 
   result = vec_first_match_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
-     printf("Error: int first match or EOS result (%d) does not match expected result (%d)\n",
-	    result, expected_result);
+    printf("Error: int first match or EOS result (%d) does not match expected result (%d)\n",
+	   result, expected_result);
 #else
     abort();
 #endif
@@ -677,6 +1006,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first match or EOS result (%d) does not match expected result (%d)\n",
@@ -692,6 +1027,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first match or EOS result (%d) does not match expected result (%d)\n",
@@ -707,6 +1048,12 @@  int main() {
 
   result = vec_first_match_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_match_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uint first match or EOS result (%d) does not match expected result (%d)\n",
@@ -715,7 +1062,9 @@  int main() {
     abort();
 #endif
 
-  /* Tests for: vec_first_mismatch_or_eos_index() */
+  /* Tests for: vec_first_mismatch_or_eos_index()
+     The element index in BE order is returned for the first mismatch
+     or the number of elements if there is no match.   */
   /* char */
   char_src1 = (vector signed char) {-1, 2, 3, 4, -5, 6, 7, 8,
 				    9, 10, 11, 12, 13, 14, 15, 16};
@@ -725,6 +1074,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -741,6 +1096,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -757,6 +1118,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (char_src1, char_src2);
 
+#ifdef DEBUG2
+  print_signed_char("src1", char_src1);
+  print_signed_char("src2", char_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: char first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -773,12 +1140,18 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch or EOS result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
 #else
-     abort();
+    abort();
 #endif
 
   uchar_src1 = (vector unsigned char) {2, 3, 4, 5, 6, 7, 8, 9,
@@ -789,6 +1162,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -805,6 +1184,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -821,6 +1206,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uchar_src1, uchar_src2);
 
+#ifdef DEBUG2
+  print_unsigned_char("src1", uchar_src1);
+  print_unsigned_char("src2", uchar_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: uchar first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -837,6 +1228,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -852,6 +1249,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -867,6 +1270,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -882,6 +1291,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (short_src1, short_src2);
 
+#ifdef DEBUG2
+  print_signed_short_int("src1", short_src1);
+  print_signed_short_int("src2", short_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: short int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -897,6 +1312,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -912,7 +1333,13 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (ushort_src1, ushort_src2);
 
- if (result != expected_result)
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
+  if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first mismatch or EOS result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
@@ -927,6 +1354,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (ushort_src1, ushort_src2);
 
+#ifdef DEBUG2
+  print_unsigned_short_int("src1", ushort_src1);
+  print_unsigned_short_int("src2", ushort_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: ushort int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -943,6 +1376,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch or EOS result (%d) does not match expected result (%d)\n",
@@ -958,6 +1397,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -973,6 +1418,12 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -988,6 +1439,11 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (int_src1, int_src2);
 
+#ifdef DEBUG2
+  print_signed_int("src1", int_src1);
+  print_signed_int("src2", int_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
   if (result != expected_result)
 #ifdef DEBUG
     printf("Error: int first mismatch result (%d) does not match expected result (%d)\n",
@@ -1003,9 +1459,14 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
   if (result != expected_result)
 #ifdef DEBUG
-    printf("Error: uint first mismatch result (%d) does not match expected result (%d)\n",
+    printf("Error: uint first mismatch or eos index result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
 #else
     abort();
@@ -1018,9 +1479,15 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
-    printf("Error: uint first mismatch result (%d) does not match expected result (%d)\n",
+    printf("Error: uint first mismatch or eos index result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
 #else
     abort();
@@ -1033,9 +1500,15 @@  int main() {
 
   result = vec_first_mismatch_or_eos_index (uint_src1, uint_src2);
 
+#ifdef DEBUG2
+  print_unsigned_int("src1", uint_src1);
+  print_unsigned_int("src2", uint_src2);
+  printf("vec_first_mismatch_or_eos_index = %d\n\n", result);
+#endif
+
   if (result != expected_result)
 #ifdef DEBUG
-    printf("Error: uint first mismatch result (%d) does not match expected result (%d)\n",
+    printf("Error: uint first mismatch or eos index result (%d) does not match expected result (%d)\n",
 	   result, expected_result);
 #else
     abort();
diff --git a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
index 32633e3..119ef98 100644
--- a/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/vsu/vec-cntlz-lsbb-2.c
@@ -10,5 +10,5 @@  count_leading_zero_byte_bits (vector unsigned char *arg1_p)
 {
   vector unsigned char arg_1 = *arg1_p;
 
-  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "builtin function '__builtin_altivec_vclzlsbb' requires the '-mcpu=power9' option" } */
+  return __builtin_vec_vclzlsbb (arg_1);	/* { dg-error "builtin function '__builtin_altivec_vclzlsbb_v16qi' requires the '-mcpu=power9' option" } */
 }