Viewing file: avx512fp16-vcondmn-vec.C (2.2 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do compile } */ /* { dg-options "-O2 -mavx512fp16 -mavx512vl" } */
/* { dg-final { scan-assembler-times "vcmpph" 45 } } */ /* { dg-final { scan-assembler-times "vpcmpuw" 12 } } */ /* { dg-final { scan-assembler-times "vpcmpw" 18 } } */ /* { dg-final { scan-assembler-times "(?:vpblendmw|vmovdqu16\[^\{\n\]+\{%k\[1-7\]\})" 75 } } */
typedef _Float16 v8hf __attribute__ ((vector_size (16))); typedef _Float16 v16hf __attribute__ ((vector_size (32))); typedef _Float16 v32hf __attribute__ ((vector_size (64))); typedef short v8hi __attribute__ ((vector_size (16))); typedef short v16hi __attribute__ ((vector_size (32))); typedef short v32hi __attribute__ ((vector_size (64))); typedef unsigned short v8uhi __attribute__ ((vector_size (16))); typedef unsigned short v16uhi __attribute__ ((vector_size (32))); typedef unsigned short v32uhi __attribute__ ((vector_size (64)));
#define VCONDMOV(size, op, name) \ v##size##hf \ __attribute__ ((noinline, noclone)) \ vcond_##v##size##hf##v##size##hf##name (v##size##hf a, v##size##hf b, \ v##size##hf c, v##size##hf d) \ { \ return (a op b) ? c : d; \ }\ v##size##hf \ __attribute__ ((noinline, noclone)) \ vcond_##v##size##hi##v##size##hf##name (v##size##hi a, v##size##hi b, \ v##size##hf c, v##size##hf d) \ { \ return (a op b) ? c : d; \ }\ v##size##hi \ __attribute__ ((noinline, noclone)) \ vcond_##v##size##hf##v##size##hi##name (v##size##hi a, v##size##hi b, \ v##size##hf c, v##size##hf d) \ { \ return (c op d) ? a : b; \ } \ v##size##hf \ __attribute__ ((noinline, noclone)) \ vcond_##v##size##uhi##v##size##hf##name (v##size##uhi a, v##size##uhi b, \ v##size##hf c, v##size##hf d) \ { \ return (a op b) ? c : d; \ }\ v##size##uhi \ __attribute__ ((noinline, noclone)) \ vcond_##v##size##hf##v##size##uhi##name (v##size##uhi a, v##size##uhi b, \ v##size##hf c, v##size##hf d) \ { \ return (c op d) ? a : b; \ } \
VCONDMOV (8, <, lt) VCONDMOV (8, >, gt) VCONDMOV (8, ==, eq) VCONDMOV (8, <=, le) VCONDMOV (8, >=, ge) VCONDMOV (16, <, lt) VCONDMOV (16, >, gt) VCONDMOV (16, <=, le) VCONDMOV (16, >=, ge) VCONDMOV (16, ==, eq) VCONDMOV (32, <, lt) VCONDMOV (32, >, gt) VCONDMOV (32, <=, le) VCONDMOV (32, >=, ge) VCONDMOV (32, ==, eq)
|