diff options
Diffstat (limited to 'SingleSource/UnitTests/Vector/AVX512F/abs.c')
-rw-r--r-- | SingleSource/UnitTests/Vector/AVX512F/abs.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/SingleSource/UnitTests/Vector/AVX512F/abs.c b/SingleSource/UnitTests/Vector/AVX512F/abs.c new file mode 100644 index 00000000..de100b52 --- /dev/null +++ b/SingleSource/UnitTests/Vector/AVX512F/abs.c @@ -0,0 +1,65 @@ +/* + * Test absolute value intrinsics. + * Here we check for _mm512_abs_ps and _mm512_abs_pd intrinsics. + */ + +#include "m512_test_util.h" +#include <stdio.h> + +V512 f32; +V512 f64; + +void NOINLINE init() { + volatile int i; + + for (i = 0; i < 16; i++) { + f32.f32[i] = (i & 1) ? i : -i; + } + + for (i = 0; i < 8; i++) { + f64.f64[i] = (i & 1) ? -i : i; + } +} + +void NOINLINE do_abs_ps() { + V512 res; + V512 expected; + volatile int i; + + res.zmm = _mm512_abs_ps(f32.zmm); + + for (i = 0; i < 16; i++) { + expected.s32[i] = f32.s32[i] & 0x7fffffff; + } + + check_equal_nd(&res, &expected, 16, "_mm512_abs_ps", __LINE__); +} + +void NOINLINE do_abs_pd() { + V512 res; + V512 expected; + volatile int i; + + res.zmmd = _mm512_abs_pd(f64.zmmd); + + for (i = 0; i < 8; i++) { + expected.s64[i] = f64.s64[i] & 0x7fffffffffffffff; + } + + check_equal_nd(&res, &expected, 16, "_mm512_abs_pd", __LINE__); +} + +int main(int argc, char *argv[]) { + init(); + + do_abs_ps(); + do_abs_pd(); + + if (n_errs != 0) { + printf("FAILED\n"); + return 1; + } + + printf("PASSED\n"); + return 0; +} |