Viewing file: avx512fp16-vcondmn-loop-2.c (4.69 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run { target avx512fp16 } } */ /* { dg-options "-O2 -mavx512fp16 -mavx512vl -mprefer-vector-width=512" } */
static void condmov_test (void); #define DO_TEST condmov_test #define AVX512FP16 #define AVX512VL #include "avx512f-check.h" #include "avx512fp16-vcondmn-loop-1.c"
_Float16 a[32], b[32], c[32], fexp[32], fref[32]; s16 sa[32], sb[32], sc[32], sexp[32], sref[32]; u16 ua[32], ub[32], uc[32], uexp[32], uref[32];
#define EMULATE_CONDMOV_LOOP(size, type, ptype, op, name) \ void \ __attribute__ ((noinline, noclone)) \ scalar_cond_##size##ptype##type##name ( \ ptype * restrict a, ptype * restrict b, \ type * restrict c, type * restrict d) \ { \ int i; \ for (i = 0; i < size; i++) \ { \ if (a[i] op b[i]) \ d[i] = c[i]; \ } \ }
EMULATE_CONDMOV_LOOP (32, _Float16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (32, _Float16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (32, _Float16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (16, _Float16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (16, _Float16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (16, _Float16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (8, _Float16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (8, _Float16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (8, _Float16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (32, _Float16, s16, <, lt) EMULATE_CONDMOV_LOOP (32, _Float16, s16, >, gt) EMULATE_CONDMOV_LOOP (32, _Float16, s16, ==, eq) EMULATE_CONDMOV_LOOP (16, _Float16, s16, <, lt) EMULATE_CONDMOV_LOOP (16, _Float16, s16, >, gt) EMULATE_CONDMOV_LOOP (16, _Float16, s16, ==, eq) EMULATE_CONDMOV_LOOP (8, _Float16, s16, <, lt) EMULATE_CONDMOV_LOOP (8, _Float16, s16, >, gt) EMULATE_CONDMOV_LOOP (8, _Float16, s16, ==, eq) EMULATE_CONDMOV_LOOP (32, s16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (32, s16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (32, s16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (16, s16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (16, s16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (16, s16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (8, s16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (8, s16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (8, s16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (32, _Float16, u16, <, lt) EMULATE_CONDMOV_LOOP (32, _Float16, u16, >, gt) EMULATE_CONDMOV_LOOP (32, _Float16, u16, ==, eq) EMULATE_CONDMOV_LOOP (16, _Float16, u16, <, lt) EMULATE_CONDMOV_LOOP (16, _Float16, u16, >, gt) EMULATE_CONDMOV_LOOP (16, _Float16, u16, ==, eq) EMULATE_CONDMOV_LOOP (8, _Float16, u16, <, lt) EMULATE_CONDMOV_LOOP (8, _Float16, u16, >, gt) EMULATE_CONDMOV_LOOP (8, _Float16, u16, ==, eq) EMULATE_CONDMOV_LOOP (32, u16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (32, u16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (32, u16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (16, u16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (16, u16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (16, u16, _Float16, ==, eq) EMULATE_CONDMOV_LOOP (8, u16, _Float16, <, lt) EMULATE_CONDMOV_LOOP (8, u16, _Float16, >, gt) EMULATE_CONDMOV_LOOP (8, u16, _Float16, ==, eq)
void init() { int i; for (i = 0; i < 32; i++) { ua[i] = sa[i] = a[i] = i; ub[i] = sb[i] = b[i] = i; uc[i] = sc[i] = c[i] = (32 - i) * 2; uexp[i] = sexp[i] = fexp[i] = -1; uref[i] = sref[i] = fref[i] = -1; } }
int check_cond(void *a, void *b, int size) { int i; u16 *pa = (u16 *)a, *pb = (u16 *)b; for (i = 0; i < size; i++) if (pa[i] != pb[i]) return 0; return 1; }
#define TEST_CONDMOV_LOOP(size, name) \ { \ init (); \ scalar_cond_##size##_Float16_Float16##name (a, b, c, fexp); \ loop_cond_##size##_Float16_Float16##name (a, b, c, fref); \ if (!check_cond ((void *)fexp, (void *)fref, size)) \ abort(); \ \ init (); \ scalar_cond_##size##_Float16s16##name (a, b, sc, sexp); \ loop_cond_##size##_Float16s16##name (a, b, sc, sref); \ if (!check_cond ((void *)sexp, (void *)sref, size)) \ abort(); \ \ init (); \ scalar_cond_##size##s16_Float16##name (sa, sb, c, fexp); \ loop_cond_##size##s16_Float16##name (sa, sb, c, fref); \ if (!check_cond ((void *)fexp, (void *)fref, size)) \ abort(); \ \ init (); \ scalar_cond_##size##_Float16u16##name (a, b, uc, uexp); \ loop_cond_##size##_Float16u16##name (a, b, uc, uref); \ if (!check_cond ((void *)uexp, (void *)uref, size)) \ abort(); \ \ init (); \ scalar_cond_##size##u16_Float16##name (ua, ub, c, fexp); \ loop_cond_##size##u16_Float16##name (ua, ub, c, fref); \ if (!check_cond ((void *)fexp, (void *)fref, size)) \ abort(); \ }
static void condmov_test() { TEST_CONDMOV_LOOP (32, lt) TEST_CONDMOV_LOOP (32, gt) TEST_CONDMOV_LOOP (32, eq) TEST_CONDMOV_LOOP (16, lt) TEST_CONDMOV_LOOP (16, gt) TEST_CONDMOV_LOOP (16, eq) TEST_CONDMOV_LOOP (8, lt) TEST_CONDMOV_LOOP (8, gt) TEST_CONDMOV_LOOP (8, eq) }
|