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

Reply via email to