From: Pan Li <pan2...@intel.com> The spec of RVV is somehow not that clear about the difference between the float point and fixed point for the rounding that discard least-significant information.
For float point which is not two's complement, the "discard least-significant information" indicates truncation round. For example as below: * 3.5 -> 3 * -2.3 -> -2 For fixed point which is two's complement, the "discard least-significant information" indicates round down. For example as below: * 3.5 -> 3 * -2.3 -> -3 And the vaadd takes the round down which is totally matching the sematics of the avf_floor. Thus, leverage it to implement the avg_floor. The below test suites are passed for this patch series. * The rv64gcv fully regression test. Pan Li (3): RISC-V: Leverage vaadd.vv for signed standard name avg_floor RISC-V: Reconcile the existing test for avg_floor RISC-V: Add test cases for avg_floor vaadd implementation gcc/config/riscv/autovec.md | 32 +-- .../gcc.target/riscv/rvv/autovec/avg.h | 23 +++ .../gcc.target/riscv/rvv/autovec/avg_data.h | 185 ++++++++++++++++++ .../rvv/autovec/avg_floor-1-i16-from-i32.c | 12 ++ .../rvv/autovec/avg_floor-1-i16-from-i64.c | 12 ++ .../rvv/autovec/avg_floor-1-i32-from-i64.c | 12 ++ .../rvv/autovec/avg_floor-1-i8-from-i16.c | 12 ++ .../rvv/autovec/avg_floor-1-i8-from-i32.c | 12 ++ .../rvv/autovec/avg_floor-1-i8-from-i64.c | 12 ++ .../autovec/avg_floor-run-1-i16-from-i32.c | 16 ++ .../autovec/avg_floor-run-1-i16-from-i64.c | 16 ++ .../autovec/avg_floor-run-1-i32-from-i64.c | 16 ++ .../rvv/autovec/avg_floor-run-1-i8-from-i16.c | 16 ++ .../rvv/autovec/avg_floor-run-1-i8-from-i32.c | 16 ++ .../rvv/autovec/avg_floor-run-1-i8-from-i64.c | 16 ++ .../gcc.target/riscv/rvv/autovec/avg_run.h | 28 +++ .../gcc.target/riscv/rvv/autovec/vls/avg-1.c | 5 +- .../gcc.target/riscv/rvv/autovec/vls/avg-2.c | 5 +- .../gcc.target/riscv/rvv/autovec/vls/avg-3.c | 5 +- .../riscv/rvv/autovec/widen/vec-avg-rv32gcv.c | 7 +- .../riscv/rvv/autovec/widen/vec-avg-rv64gcv.c | 7 +- 21 files changed, 424 insertions(+), 41 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_data.h create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i16-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i32-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-1-i8-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i16-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i32-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_floor-run-1-i8-from-i64.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/avg_run.h -- 2.43.0