testsuite: Fix vec_extractm testcase for power10 BE[127148]
Checks
| Context |
Check |
Description |
| linaro-tcwg-bot/tcwg_simplebootstrap_build--master-aarch64-bootstrap |
success
|
Build passed
|
| linaro-tcwg-bot/tcwg_simplebootstrap_build--master-arm-bootstrap |
success
|
Build passed
|
Commit Message
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.
Comments
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",
>
@@ -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",