diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c')
-rw-r--r-- | gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c new file mode 100644 index 0000000..8ec261b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/ternop/ternop-12.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d --param=riscv-autovec-preference=scalable -ffast-math" } */ + +#include <stdint-gcc.h> + +#define TEST_TYPE(TYPE) \ + __attribute__ ((noipa)) void ternop_##TYPE (TYPE *__restrict dest1, \ + TYPE *__restrict dest2, \ + TYPE *__restrict dest3, \ + TYPE *__restrict src1, \ + TYPE *__restrict src2, int n) \ + { \ + for (int i = 0; i < n; ++i) \ + { \ + dest1[i] = -(src1[i] * src2[i]) - dest2[i]; \ + dest2[i] = src1[i] * dest1[i] - dest2[i]; \ + dest3[i] = src2[i] * dest2[i] - dest3[i]; \ + } \ + } + +#define TEST_ALL() \ + TEST_TYPE (_Float16) \ + TEST_TYPE (float) \ + TEST_TYPE (double) + +TEST_ALL () + +/* { dg-final { scan-assembler-times {\tvmv} 3 } } */ |