| /* PR target/85918 */ |
| /* { dg-do run } */ |
| /* { dg-require-effective-target avx512dq } */ |
| /* { dg-require-effective-target avx512vl } */ |
| /* { dg-options "-O3 -mavx512dq -mavx512vl -mprefer-vector-width=512 -fno-vect-cost-model" } */ |
| |
| #define AVX512DQ |
| #define AVX512VL |
| #define DO_TEST avx512dqvl_test |
| |
| static void avx512dqvl_test (void); |
| |
| #include "avx512-check.h" |
| |
| #define N 16 |
| |
| long long ll[N] __attribute__((aligned (64))); |
| unsigned long long ull[N] __attribute__((aligned (64))); |
| float f[N] __attribute__((aligned (64))); |
| double d[N] __attribute__((aligned (64))); |
| |
| __attribute__((noipa)) void |
| ll2d1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| d[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2d1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| d[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ll1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| ll[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ull1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| ull[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ll2f1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| f[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2f1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| f[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ll1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| ll[i] = f[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ull1 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 4; i++) |
| ull[i] = f[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ll2d2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| d[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2d2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| d[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ll2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| ll[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ull2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| ull[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ll2f2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| f[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2f2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| f[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ll2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| ll[i] = f[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ull2 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 8; i++) |
| ull[i] = f[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ll2d3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| d[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2d3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| d[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ll3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| ll[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| d2ull3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| ull[i] = d[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ll2f3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| f[i] = ll[i]; |
| } |
| |
| __attribute__((noipa)) void |
| ull2f3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| f[i] = ull[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ll3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| ll[i] = f[i]; |
| } |
| |
| __attribute__((noipa)) void |
| f2ull3 (void) |
| { |
| int i; |
| |
| for (i = 0; i < 16; i++) |
| ull[i] = f[i]; |
| } |
| |
| unsigned long long ullt[] = { |
| 13835058055282163712ULL, 9223653511831486464ULL, 9218868437227405312ULL, |
| 1ULL, 9305281255077576704ULL, 1191936ULL, 18446462598732840960ULL, 0ULL, |
| 9223372036854775808ULL, 4611686018427387904ULL, 2305843009213693952ULL, |
| 9ULL, 9223653511831486464ULL, 0ULL, 65536ULL, 131071ULL |
| }; |
| float uft[] = { |
| 13835058055282163712.0f, 9223653511831486464.0f, 9218868437227405312.0f, |
| 1.0f, 9305281255077576704.0f, 1191936.0f, 18446462598732840960.0f, 0.0f, |
| 9223372036854775808.0f, 4611686018427387904.0f, 2305843009213693952.0f, |
| 9.0f, 9223653511831486464.0f, 0.0f, 65536.0f, 131071.0f |
| }; |
| long long llt[] = { |
| 9223090561878065152LL, -9223372036854775807LL - 1, -9223090561878065152LL, |
| -4LL, -8074672656898588672LL, 8074672656898588672LL, 29LL, -15LL, |
| 7574773098260463616LL, -7579276697887834112LL, -8615667562136469504LL, |
| 148LL, -255LL, 9151595917793558528LL, -9218868437227405312LL, 9LL |
| }; |
| float ft[] = { |
| 9223090561878065152.0f, -9223372036854775808.0f, -9223090561878065152.0f, |
| -4.0f, -8074672656898588672.0f, 8074672656898588672.0f, 29.0f, -15.0f, |
| 7574773098260463616.0f, -7579276697887834112.0f, -8615667562136469504.0f, |
| 148.0f, -255.0f, 9151595917793558528.0f, -9218868437227405312.0f, 9.0f |
| }; |
| |
| static void |
| avx512dqvl_test (void) |
| { |
| int i; |
| for (i = 0; i < 4; i++) |
| { |
| ll[i] = llt[i]; |
| ull[i] = ullt[i]; |
| } |
| ll2d1 (); |
| for (i = 0; i < 4; i++) |
| if (d[i] != ft[i]) |
| abort (); |
| ull2d1 (); |
| for (i = 0; i < 4; i++) |
| if (d[i] != uft[i]) |
| abort (); |
| else |
| d[i] = ft[i + 4]; |
| d2ll1 (); |
| for (i = 0; i < 4; i++) |
| if (ll[i] != llt[i + 4]) |
| abort (); |
| else |
| d[i] = uft[i + 4]; |
| d2ull1 (); |
| for (i = 0; i < 4; i++) |
| if (ull[i] != ullt[i + 4]) |
| abort (); |
| else |
| { |
| ll[i] = llt[i + 8]; |
| ull[i] = ullt[i + 8]; |
| } |
| ll2f1 (); |
| for (i = 0; i < 4; i++) |
| if (f[i] != ft[i + 8]) |
| abort (); |
| ull2f1 (); |
| for (i = 0; i < 4; i++) |
| if (f[i] != uft[i + 8]) |
| abort (); |
| else |
| f[i] = ft[i + 12]; |
| f2ll1 (); |
| for (i = 0; i < 4; i++) |
| if (ll[i] != llt[i + 12]) |
| abort (); |
| else |
| f[i] = uft[i + 12]; |
| f2ull1 (); |
| for (i = 0; i < 4; i++) |
| if (ull[i] != ullt[i + 12]) |
| abort (); |
| for (i = 0; i < 8; i++) |
| { |
| ll[i] = llt[i]; |
| ull[i] = ullt[i]; |
| } |
| ll2d2 (); |
| for (i = 0; i < 8; i++) |
| if (d[i] != ft[i]) |
| abort (); |
| ull2d2 (); |
| for (i = 0; i < 8; i++) |
| if (d[i] != uft[i]) |
| abort (); |
| else |
| { |
| d[i] = ft[i]; |
| ll[i] = 1234567LL; |
| ull[i] = 7654321ULL; |
| } |
| d2ll2 (); |
| for (i = 0; i < 8; i++) |
| if (ll[i] != llt[i]) |
| abort (); |
| else |
| d[i] = uft[i]; |
| d2ull2 (); |
| for (i = 0; i < 8; i++) |
| if (ull[i] != ullt[i]) |
| abort (); |
| else |
| { |
| ll[i] = llt[i + 8]; |
| ull[i] = ullt[i + 8]; |
| } |
| ll2f2 (); |
| for (i = 0; i < 8; i++) |
| if (f[i] != ft[i + 8]) |
| abort (); |
| ull2f2 (); |
| for (i = 0; i < 8; i++) |
| if (f[i] != uft[i + 8]) |
| abort (); |
| else |
| { |
| f[i] = ft[i + 8]; |
| ll[i] = 1234567LL; |
| ull[i] = 7654321ULL; |
| } |
| f2ll2 (); |
| for (i = 0; i < 8; i++) |
| if (ll[i] != llt[i + 8]) |
| abort (); |
| else |
| f[i] = uft[i + 8]; |
| f2ull2 (); |
| for (i = 0; i < 8; i++) |
| if (ull[i] != ullt[i + 8]) |
| abort (); |
| for (i = 0; i < 16; i++) |
| { |
| ll[i] = llt[i]; |
| ull[i] = ullt[i]; |
| } |
| ll2d3 (); |
| for (i = 0; i < 16; i++) |
| if (d[i] != ft[i]) |
| abort (); |
| ull2d3 (); |
| for (i = 0; i < 16; i++) |
| if (d[i] != uft[i]) |
| abort (); |
| else |
| { |
| d[i] = ft[i]; |
| ll[i] = 1234567LL; |
| ull[i] = 7654321ULL; |
| } |
| d2ll3 (); |
| for (i = 0; i < 16; i++) |
| if (ll[i] != llt[i]) |
| abort (); |
| else |
| d[i] = uft[i]; |
| d2ull3 (); |
| for (i = 0; i < 16; i++) |
| if (ull[i] != ullt[i]) |
| abort (); |
| else |
| { |
| ll[i] = llt[i]; |
| ull[i] = ullt[i]; |
| f[i] = 3.0f; |
| d[i] = 4.0; |
| } |
| ll2f3 (); |
| for (i = 0; i < 16; i++) |
| if (f[i] != ft[i]) |
| abort (); |
| ull2f3 (); |
| for (i = 0; i < 16; i++) |
| if (f[i] != uft[i]) |
| abort (); |
| else |
| { |
| f[i] = ft[i]; |
| ll[i] = 1234567LL; |
| ull[i] = 7654321ULL; |
| } |
| f2ll3 (); |
| for (i = 0; i < 16; i++) |
| if (ll[i] != llt[i]) |
| abort (); |
| else |
| f[i] = uft[i]; |
| f2ull3 (); |
| for (i = 0; i < 16; i++) |
| if (ull[i] != ullt[i]) |
| abort (); |
| } |