-
- Downloads
RISC-V: Support basic floating-point dynamic rounding mode
This patch would like to support the basic floating-point dynamic rounding modes for the RVV. We implement the dynamic rounding mode by below steps. 1. Set entry to DYN and exit to DYN_EXIT. 2. Add one rtl variable into machine_function for backup/restore. 3. Backup frm value when entry. 4. Restore frm value when exit and prev mode is not DYN. 5. Restore frm when mode switching to DYN. 6. Set frm when mode switching to STATIC. Take one flow to describe the scenarios. +-------------+ | Entry (DYN) | <- frrm a5 +-------------+ / \ +-------+ +-----------+ | VFADD | <- fsrm a5 | VFADD RTZ | <- fsrmi 1(RTZ) +-------+ +-----------+ | | +-------+ +-----------+ | VFADD | | VFADD RTZ | +-------+ +-----------+ | | +-----------+ +-------+ | VFADD RUP | <- fsrmi 3(RUP) | VFADD | <- fsrm a5 +-----------+ +-------+ | / +-----------+ / | VFADD RUP | / +-----------+ / \ / +-----------------+ | Exit (DYN_EXIT) | <- fsrm a5 +-----------------+ Please *NOTE* inline asm and call during the cfun will be implemented in another PATCH(s). Signed-off-by:Pan Li <pan2.li@intel.com> Co-Authored-By:
Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/riscv.cc (struct machine_function): Add new field. (riscv_static_frm_mode_p): New function. (riscv_emit_frm_mode_set): New function for emit FRM. (riscv_emit_mode_set): Extract function for FRM. (riscv_mode_needed): Fix the TODO. (riscv_mode_entry): Initial dynamic frm RTL. (riscv_mode_exit): Return DYN_EXIT. * config/riscv/riscv.md: Add rdfrm. * config/riscv/vector-iterators.md (unspecv): Add DYN_EXIT unspecv. * config/riscv/vector.md (frm_modee): Add new mode dyn_exit. (fsrm): Removed. (fsrmsi_backup): New pattern for swap. (fsrmsi_restore): New pattern for restore. (fsrmsi_restore_exit): New pattern for restore exit. (frrmsi): New pattern for backup. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/float-point-frm-insert-1.c: Adjust test cases. * gcc.target/riscv/rvv/base/float-point-frm-insert-10.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-2.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-3.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-4.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-5.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-6.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-7.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-8.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-insert-9.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-run-1.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-run-2.c: Ditto. * gcc.target/riscv/rvv/base/float-point-frm-run-3.c: Ditto. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-1.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-10.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-11.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-12.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-13.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-14.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-15.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-16.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-17.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-18.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-19.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-2.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-20.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-21.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-22.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-23.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-24.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-25.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-26.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-27.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-28.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-29.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-3.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-30.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-31.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-32.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-4.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-5.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-6.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-7.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-8.c: New test. * gcc.target/riscv/rvv/base/float-point-dynamic-frm-9.c: New test.
Showing
- gcc/config/riscv/riscv.cc 67 additions, 28 deletionsgcc/config/riscv/riscv.cc
- gcc/config/riscv/riscv.md 1 addition, 1 deletiongcc/config/riscv/riscv.md
- gcc/config/riscv/vector-iterators.md 3 additions, 1 deletiongcc/config/riscv/vector-iterators.md
- gcc/config/riscv/vector.md 45 additions, 18 deletionsgcc/config/riscv/vector.md
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-1.c 21 additions, 0 deletions...ite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-1.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-10.c 26 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-10.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-11.c 26 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-11.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-12.c 29 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-12.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-13.c 29 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-13.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-14.c 28 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-14.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-15.c 28 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-15.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-16.c 22 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-16.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-17.c 22 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-17.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-18.c 25 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-18.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-19.c 25 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-19.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-2.c 20 additions, 0 deletions...ite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-2.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-20.c 27 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-20.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-21.c 27 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-21.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-22.c 25 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-22.c
- gcc/testsuite/gcc.target/riscv/rvv/base/float-point-dynamic-frm-23.c 25 additions, 0 deletions...te/gcc.target/riscv/rvv/base/float-point-dynamic-frm-23.c
Loading
Please register or sign in to comment