Viewing file: builtins-1-p10-runnable.c (11.21 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run } */ /* { dg-require-effective-target power10_hw } */ /* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */
/* { dg-final { scan-assembler-times {\mvdivsw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdivuw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdivsd\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdivud\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdivesw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdiveuw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdivesd\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvdiveud\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmodsw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmoduw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmodsd\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmodud\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmulhsw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmulhuw\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmulhsd\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmulhud\M} 1 } } */ /* { dg-final { scan-assembler-times {\mvmulld\M} 2 } } */
#include <stdint.h> #include <stdio.h> #include <math.h> #include <altivec.h>
#define DEBUG 0
#ifdef DEBUG #include <stdio.h> #endif
void abort (void);
int main() { int i; vector int i_arg1, i_arg2; vector unsigned int u_arg1, u_arg2; vector long long int d_arg1, d_arg2; vector long long unsigned int ud_arg1, ud_arg2; vector int vec_i_expected, vec_i_result; vector unsigned int vec_u_expected, vec_u_result; vector long long int vec_d_expected, vec_d_result; vector long long unsigned int vec_ud_expected, vec_ud_result; /* Signed word divide */ i_arg1 = (vector int){ 20, 40, 60, 80}; i_arg2 = (vector int){ 2, 2, 2, 2}; vec_i_expected = (vector int){10, 20, 30, 40};
vec_i_result = vec_div (i_arg1, i_arg2);
for (i = 0; i < 4; i++) { if (vec_i_expected[i] != vec_i_result[i]) #ifdef DEBUG printf("ERROR vec_div signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_i_result[i], i, vec_i_expected[i]); #else abort(); #endif }
/* Unsigned word divide */ u_arg1 = (vector unsigned int){ 20, 40, 60, 80}; u_arg2 = (vector unsigned int){ 2, 2, 2, 2}; vec_u_expected = (vector unsigned int){10, 20, 30, 40};
vec_u_result = vec_div (u_arg1, u_arg2);
for (i = 0; i < 4; i++) { if (vec_u_expected[i] != vec_u_result[i]) #ifdef DEBUG printf("ERROR vec_div unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_u_result[i], i, vec_u_expected[i]); #else abort(); #endif }
/* Signed double word divide */ d_arg1 = (vector long long){ 24, 68}; d_arg2 = (vector long long){ 2, 2}; vec_d_expected = (vector long long){12, 34};
vec_d_result = vec_div (d_arg1, d_arg2);
for (i = 0; i < 2; i++) { if (vec_d_expected[i] != vec_d_result[i]) #ifdef DEBUG printf("ERROR vec_div signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_d_result[i], i, vec_d_expected[i]); #else abort(); #endif }
/* Unsigned double word divide */ ud_arg1 = (vector unsigned long long){ 24, 68}; ud_arg2 = (vector unsigned long long){ 2, 2}; vec_ud_expected = (vector unsigned long long){12, 34};
vec_ud_result = vec_div (ud_arg1, ud_arg2);
for (i = 0; i < 2; i++) { if (vec_ud_expected[i] != vec_ud_result[i]) #ifdef DEBUG printf("ERROR vec_div unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_ud_result[i], i, vec_ud_expected[i]); #else abort(); #endif }
/* Divide Extended signed word result = (arg1 << 32)/arg2 */ i_arg1 = (vector int){ 2, 4, 6, 8}; i_arg2 = (vector int){ 2048, 2048, 2048, 2048}; vec_i_expected = (vector int){4194304, 8388608, 12582912, 16777216};
vec_i_result = vec_dive (i_arg1, i_arg2);
for (i = 0; i < 4; i++) { if (vec_i_expected[i] != vec_i_result[i]) #ifdef DEBUG printf("ERROR vec_dive signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_i_result[i], i, vec_i_expected[i]); #else abort(); #endif }
/* Divide Extended unsigned word result = (arg1 << 32)/arg2 */ u_arg1 = (vector unsigned int){ 2, 4, 6, 8}; u_arg2 = (vector unsigned int){ 2048, 2048, 2048, 2048}; vec_u_expected = (vector unsigned int){4194304, 8388608, 12582912, 16777216};
vec_u_result = vec_dive (u_arg1, u_arg2);
for (i = 0; i < 4; i++) { if (vec_u_expected[i] != vec_u_result[i]) #ifdef DEBUG printf("ERROR vec_dive unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_u_result[i], i, vec_u_expected[i]); #else abort(); #endif }
/* Divide Extended double signed esult = (arg1 << 64)/arg2 */ d_arg1 = (vector long long int){ 2, 4}; d_arg2 = (vector long long int){ 4294967296, 4294967296};
vec_d_expected = (vector long long int){8589934592, 17179869184};
vec_d_result = vec_dive (d_arg1, d_arg2);
for (i = 0; i < 2; i++) { if (vec_d_expected[i] != vec_d_result[i]) #ifdef DEBUG printf("ERROR vec_dive signed result[%d] = %lld != " "expected[%d] = %lld\n", i, vec_d_result[i], i, vec_d_expected[i]); #else abort(); #endif }
/* Divide Extended double unsigned result = (arg1 << 64)/arg2 */ ud_arg1 = (vector long long unsigned int){ 2, 4}; ud_arg2 = (vector long long unsigned int){ 4294967296, 4294967296};
vec_ud_expected = (vector long long unsigned int){8589934592, 17179869184};
vec_ud_result = vec_dive (ud_arg1, ud_arg2);
for (i = 0; i < 2; i++) { if (vec_ud_expected[i] != vec_ud_result[i]) #ifdef DEBUG printf("ERROR vec_dive unsigned result[%d] = %lld != " "expected[%d] = %lld\n", i, vec_ud_result[i], i, vec_ud_expected[i]); #else abort(); #endif }
/* Signed word modulo */ i_arg1 = (vector int){ 23, 45, 61, 89}; i_arg2 = (vector int){ 2, 2, 2, 2}; vec_i_expected = (vector int){1, 1, 1, 1};
vec_i_result = vec_mod (i_arg1, i_arg2);
for (i = 0; i < 4; i++) { if (vec_i_expected[i] != vec_i_result[i]) #ifdef DEBUG printf("ERROR vec_mod signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_i_result[i], i, vec_i_expected[i]); #else abort(); #endif }
/* Unsigned word modulo */ u_arg1 = (vector unsigned int){ 25, 41, 67, 86}; u_arg2 = (vector unsigned int){ 3, 3, 3, 3}; vec_u_expected = (vector unsigned int){1, 2, 1, 2};
vec_u_result = vec_mod (u_arg1, u_arg2);
for (i = 0; i < 4; i++) { if (vec_u_expected[i] != vec_u_result[i]) #ifdef DEBUG printf("ERROR vec_mod unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_u_result[i], i, vec_u_expected[i]); #else abort(); #endif }
/* Signed double word modulo */ d_arg1 = (vector long long){ 24, 68}; d_arg2 = (vector long long){ 7, 7}; vec_d_expected = (vector long long){3, 5};
vec_d_result = vec_mod (d_arg1, d_arg2);
for (i = 0; i < 2; i++) { if (vec_d_expected[i] != vec_d_result[i]) #ifdef DEBUG printf("ERROR vec_mod signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_d_result[i], i, vec_d_expected[i]); #else abort(); #endif }
/* Unsigned double word modulo */ ud_arg1 = (vector unsigned long long){ 24, 68}; ud_arg2 = (vector unsigned long long){ 8, 8}; vec_ud_expected = (vector unsigned long long){0, 4};
vec_ud_result = vec_mod (ud_arg1, ud_arg2);
for (i = 0; i < 2; i++) { if (vec_ud_expected[i] != vec_ud_result[i]) #ifdef DEBUG printf("ERROR vecmod unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_ud_result[i], i, vec_ud_expected[i]); #else abort(); #endif }
/* Signed word multiply high */ i_arg1 = (vector int){ 2147483648, 2147483648, 2147483648, 2147483648 }; i_arg2 = (vector int){ 2, 3, 4, 5}; // vec_i_expected = (vector int){-1, -2, -2, -3}; vec_i_expected = (vector int){1, -2, -2, -3};
vec_i_result = vec_mulh (i_arg1, i_arg2);
for (i = 0; i < 4; i++) { if (vec_i_expected[i] != vec_i_result[i]) #ifdef DEBUG printf("ERROR vec_mulh signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_i_result[i], i, vec_i_expected[i]); #else abort(); #endif }
/* Unsigned word multiply high */ u_arg1 = (vector unsigned int){ 2147483648, 2147483648, 2147483648, 2147483648 }; u_arg2 = (vector unsigned int){ 4, 5, 6, 7 }; vec_u_expected = (vector unsigned int){2, 2, 3, 3 };
vec_u_result = vec_mulh (u_arg1, u_arg2);
for (i = 0; i < 4; i++) { if (vec_u_expected[i] != vec_u_result[i]) #ifdef DEBUG printf("ERROR vec_mulh unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_u_result[i], i, vec_u_expected[i]); #else abort(); #endif }
/* Signed double word multiply high */ d_arg1 = (vector long long int){ 2305843009213693951, 4611686018427387903 }; d_arg2 = (vector long long int){ 12, 20 }; vec_d_expected = (vector long long int){ 1, 4 };
vec_d_result = vec_mulh (d_arg1, d_arg2);
for (i = 0; i < 2; i++) { if (vec_d_expected[i] != vec_d_result[i]) #ifdef DEBUG printf("ERROR vec_mulh signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_d_result[i], i, vec_d_expected[i]); #else abort(); #endif }
/* Unsigned double word multiply high */ ud_arg1 = (vector unsigned long long int){ 2305843009213693951, 4611686018427387903 }; ud_arg2 = (vector unsigned long long int){ 32, 10 }; vec_ud_expected = (vector unsigned long long int){ 3, 2 };
vec_ud_result = vec_mulh (ud_arg1, ud_arg2);
for (i = 0; i < 2; i++) { if (vec_ud_expected[i] != vec_ud_result[i]) #ifdef DEBUG printf("ERROR vec_mulh unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_ud_result[i], i, vec_ud_expected[i]); #else abort(); #endif }
/* Unsigned double word multiply low */ ud_arg1 = (vector unsigned long long int){ 2048, 4096 }; ud_arg2 = (vector unsigned long long int){ 2, 4 }; vec_ud_expected = (vector unsigned long long int){ 4096, 16384 };
vec_ud_result = vec_mul (ud_arg1, ud_arg2);
for (i = 0; i < 2; i++) { if (vec_ud_expected[i] != vec_ud_result[i]) #ifdef DEBUG printf("ERROR vec_mul unsigned result[%d] = %d != " "expected[%d] = %d\n", i, vec_ud_result[i], i, vec_ud_expected[i]); #else abort(); #endif }
/* Signed double word multiply low */ d_arg1 = (vector signed long long int){ 2048, 4096 }; d_arg2 = (vector signed long long int){ 2, 4 }; vec_d_expected = (vector signed long long int){ 4096, 16384 };
vec_d_result = vec_mul (d_arg1, d_arg2);
for (i = 0; i < 2; i++) { if (vec_d_expected[i] != vec_d_result[i]) #ifdef DEBUG printf("ERROR vec_mul signed result[%d] = %d != " "expected[%d] = %d\n", i, vec_d_result[i], i, vec_d_expected[i]); #else abort(); #endif } }
|