| Message ID | 7c7a2ff4-d91b-40ca-abd4-75e556a4b644@linux.ibm.com |
|---|---|
| State | New |
| Headers | show |
| Series | testsuite: Fix vec_extractm testcase for power10 BE[127148] | expand |
Gentle Ping! please review. Thanks & Regards Jeevitha On 02/09/26 10:46 am, jeevitha wrote: > > Hi All, > > The following patch has been bootstrapped and regtested on > powerpc64le-linux and powerpc64-linux. > > The vec_extractm testcase assumes little-endian ordering when checking > the expected result. On big-endian targets, the vector layout differs > causing the char and word tests to fail. > > Use endian-dependent expected values for the char and word tests. > Also use an result and expected_result variable consistently for all > vec_extractm tests and remove unused variables. > > 2026-09-02 Jeevitha Palanisamy <jeevitha@linux.ibm.com> > > gcc/testsuite/ > PR target/127148 > * gcc.target/powerpc/vsx_mask-extract-runnable.c: Fix expected > results for vec_extractm on big-endian targets. Also remove > unused variables. > > diff --git a/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c b/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c > index 9e257f5de7b..9a3b8565fb8 100644 > --- a/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c > +++ b/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c > @@ -25,18 +25,7 @@ void abort (void); > > int main () > { > - int i, num_elements; > - unsigned long long arg1; > - > - vector unsigned char vbc_result_bi, vbc_expected_result_bi; > - vector unsigned short vbc_result_hi, vbc_expected_result_hi; > - vector unsigned int vbc_result_wi, vbc_expected_result_wi; > - vector unsigned long long vbc_result_di, vbc_expected_result_di; > - vector __uint128_t vbc_result_qi, vbc_expected_result_qi; > - > - unsigned int result_wi, expected_result_wi; > unsigned long long result, expected_result; > - const unsigned char mp=1; > vector unsigned char vbc_bi_src; > vector unsigned short vbc_hi_src; > vector unsigned int vbc_wi_src; > @@ -44,7 +33,6 @@ int main () > vector __uint128_t vbc_qi_src; > > /* vextractbm */ > - num_elements = 8; > vbc_bi_src[0] = 0xFF; > vbc_bi_src[1] = 0xFF; > vbc_bi_src[2] = 0x0; > @@ -62,13 +50,17 @@ int main () > vbc_bi_src[14] = 0xFF; > vbc_bi_src[15] = 0xFF; > > - expected_result_wi = 0b1101111111000011; > +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ > + expected_result = 0b1100001111111011; > +#else > + expected_result = 0b1101111111000011; > +#endif > > - result_wi = vec_extractm (vbc_bi_src); > + result = vec_extractm (vbc_bi_src); > > - if (result_wi != expected_result_wi) { > + if (result != expected_result) { > #if DEBUG > - printf("ERROR: short vec_extractm(%d) ", vbc_bi_src); > + printf("ERROR: char vec_extractm(%d) ", vbc_bi_src); > printf("result %llu does not match expected result = %llu\n", > result, expected_result); > #else > @@ -77,7 +69,6 @@ int main () > } > > /* vextracthm */ > - num_elements = 8; > vbc_hi_src[0] = 0xFFFF; > vbc_hi_src[1] = 0xFFFF; > vbc_hi_src[2] = 0x0; > @@ -87,11 +78,11 @@ int main () > vbc_hi_src[6] = 0xFFFF; > vbc_hi_src[7] = 0xFFFF; > > - expected_result_wi = 0b11000011; > + expected_result = 0b11000011; > > - result_wi = vec_extractm (vbc_hi_src); > + result = vec_extractm (vbc_hi_src); > > - if (result_wi != expected_result_wi) { > + if (result != expected_result) { > #if DEBUG > printf("ERROR: short vec_extractm(%d) ", vbc_hi_src); > printf("result %llu does not match expected result = %llu\n", > @@ -102,17 +93,20 @@ int main () > } > > /* vextractwm */ > - num_elements = 4; > vbc_wi_src[0] = 0xFFFFFFFF; > vbc_wi_src[1] = 0xFFFFFFFF; > vbc_wi_src[2] = 0x0; > vbc_wi_src[3] = 0x0; > > - expected_result_wi = 0b0011; > +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ > + expected_result = 0b1100; > +#else > + expected_result = 0b0011; > +#endif > > - result_wi = vec_extractm (vbc_wi_src); > - > - if (result_wi != expected_result_wi) { > + result = vec_extractm (vbc_wi_src); > + > + if (result != expected_result) { > #if DEBUG > printf("ERROR: word vec_extractm(%d) ", vbc_wi_src); > printf("result %llu does not match expected result = %llu\n", > @@ -123,15 +117,14 @@ int main () > } > > /* vextractdm */ > - num_elements = 2; > vbc_di_src[0] = 0xFFFFFFFFFFFFFFFF; > vbc_di_src[1] = 0xFFFFFFFFFFFFFFFF; > > - expected_result_wi = 0b11; > + expected_result = 0b11; > > - result_wi = vec_extractm (vbc_di_src); > + result = vec_extractm (vbc_di_src); > > - if (result_wi != expected_result_wi) { > + if (result != expected_result) { > #if DEBUG > printf("ERROR: double vec_extractm(%lld) ", vbc_di_src); > printf("result %llu does not match expected result = %llu\n", > @@ -142,15 +135,14 @@ int main () > } > > /* vextractqm */ > - num_elements = 1; > vbc_qi_src[0] = 0x1; > vbc_qi_src[0] = vbc_qi_src[0] << 127; > > - expected_result_wi = 1; > + expected_result = 1; > > - result_wi = vec_extractm (vbc_qi_src); > + result = vec_extractm (vbc_qi_src); > > - if (result_wi != expected_result_wi) { > + if (result != expected_result) { > #if DEBUG > printf("ERROR: quad vec_extractm(arg) "); > printf("result 0x%x does not match expected result = 0x%x\n", >
diff --git a/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c b/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c index 9e257f5de7b..9a3b8565fb8 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c @@ -25,18 +25,7 @@ void abort (void); int main () { - int i, num_elements; - unsigned long long arg1; - - vector unsigned char vbc_result_bi, vbc_expected_result_bi; - vector unsigned short vbc_result_hi, vbc_expected_result_hi; - vector unsigned int vbc_result_wi, vbc_expected_result_wi; - vector unsigned long long vbc_result_di, vbc_expected_result_di; - vector __uint128_t vbc_result_qi, vbc_expected_result_qi; - - unsigned int result_wi, expected_result_wi; unsigned long long result, expected_result; - const unsigned char mp=1; vector unsigned char vbc_bi_src; vector unsigned short vbc_hi_src; vector unsigned int vbc_wi_src; @@ -44,7 +33,6 @@ int main () vector __uint128_t vbc_qi_src; /* vextractbm */ - num_elements = 8; vbc_bi_src[0] = 0xFF; vbc_bi_src[1] = 0xFF; vbc_bi_src[2] = 0x0; @@ -62,13 +50,17 @@ int main () vbc_bi_src[14] = 0xFF; vbc_bi_src[15] = 0xFF; - expected_result_wi = 0b1101111111000011; +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + expected_result = 0b1100001111111011; +#else + expected_result = 0b1101111111000011; +#endif - result_wi = vec_extractm (vbc_bi_src); + result = vec_extractm (vbc_bi_src); - if (result_wi != expected_result_wi) { + if (result != expected_result) { #if DEBUG - printf("ERROR: short vec_extractm(%d) ", vbc_bi_src); + printf("ERROR: char vec_extractm(%d) ", vbc_bi_src); printf("result %llu does not match expected result = %llu\n", result, expected_result); #else @@ -77,7 +69,6 @@ int main () } /* vextracthm */ - num_elements = 8; vbc_hi_src[0] = 0xFFFF; vbc_hi_src[1] = 0xFFFF; vbc_hi_src[2] = 0x0; @@ -87,11 +78,11 @@ int main () vbc_hi_src[6] = 0xFFFF; vbc_hi_src[7] = 0xFFFF; - expected_result_wi = 0b11000011; + expected_result = 0b11000011; - result_wi = vec_extractm (vbc_hi_src); + result = vec_extractm (vbc_hi_src); - if (result_wi != expected_result_wi) { + if (result != expected_result) { #if DEBUG printf("ERROR: short vec_extractm(%d) ", vbc_hi_src); printf("result %llu does not match expected result = %llu\n", @@ -102,17 +93,20 @@ int main () } /* vextractwm */ - num_elements = 4; vbc_wi_src[0] = 0xFFFFFFFF; vbc_wi_src[1] = 0xFFFFFFFF; vbc_wi_src[2] = 0x0; vbc_wi_src[3] = 0x0; - expected_result_wi = 0b0011; +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + expected_result = 0b1100; +#else + expected_result = 0b0011; +#endif - result_wi = vec_extractm (vbc_wi_src); - - if (result_wi != expected_result_wi) { + result = vec_extractm (vbc_wi_src); + + if (result != expected_result) { #if DEBUG printf("ERROR: word vec_extractm(%d) ", vbc_wi_src); printf("result %llu does not match expected result = %llu\n", @@ -123,15 +117,14 @@ int main () } /* vextractdm */ - num_elements = 2; vbc_di_src[0] = 0xFFFFFFFFFFFFFFFF; vbc_di_src[1] = 0xFFFFFFFFFFFFFFFF; - expected_result_wi = 0b11; + expected_result = 0b11; - result_wi = vec_extractm (vbc_di_src); + result = vec_extractm (vbc_di_src); - if (result_wi != expected_result_wi) { + if (result != expected_result) { #if DEBUG printf("ERROR: double vec_extractm(%lld) ", vbc_di_src); printf("result %llu does not match expected result = %llu\n", @@ -142,15 +135,14 @@ int main () } /* vextractqm */ - num_elements = 1; vbc_qi_src[0] = 0x1; vbc_qi_src[0] = vbc_qi_src[0] << 127; - expected_result_wi = 1; + expected_result = 1; - result_wi = vec_extractm (vbc_qi_src); + result = vec_extractm (vbc_qi_src); - if (result_wi != expected_result_wi) { + if (result != expected_result) { #if DEBUG printf("ERROR: quad vec_extractm(arg) "); printf("result 0x%x does not match expected result = 0x%x\n",