]> git.ipfire.org Git - people/ms/gcc.git/commit
RISC-V: Support zfh and zfhmin extension
authorKito Cheng <kito.cheng@sifive.com>
Mon, 4 Jul 2022 15:09:57 +0000 (23:09 +0800)
committerKito Cheng <kito.cheng@sifive.com>
Tue, 16 Aug 2022 15:34:51 +0000 (23:34 +0800)
commitbd159a7660bf1cac2b884ffbf6667bb64189017f
tree47664c6e3bd907e821ec263f387c881a77b3f47f
parent27d68a60783b52504a08503d3fe12054de104241
RISC-V: Support zfh and zfhmin extension

Zfh and Zfhmin are extensions for IEEE half precision, both are ratified
in Jan. 2022[1]:

- Zfh has full set of operation like F or D for single or double precision.
- Zfhmin has only provide minimal support for half precision operation,
  like conversion, load, store and move instructions.

[1] https://github.com/riscv/riscv-isa-manual/commit/b35a54079e0da11740ce5b1e6db999d1d5172768

gcc/ChangeLog:

* common/config/riscv/riscv-common.cc (riscv_implied_info): Add
zfh and zfhmin.
(riscv_ext_version_table): Ditto.
(riscv_ext_flag_table): Ditto.
* config/riscv/riscv-opts.h (MASK_ZFHMIN): New.
(MASK_ZFH): Ditto.
(TARGET_ZFHMIN): Ditto.
(TARGET_ZFH): Ditto.
* config/riscv/riscv.cc (riscv_output_move): Handle HFmode move
for zfh and zfhmin.
(riscv_emit_float_compare): Handle HFmode.
* config/riscv/riscv.md (ANYF): Add HF.
(SOFTF): Add HF.
(load): Ditto.
(store): Ditto.
(truncsfhf2): New.
(truncdfhf2): Ditto.
(extendhfsf2): Ditto.
(extendhfdf2): Ditto.
(*movhf_hardfloat): Ditto.
(*movhf_softfloat): Make sure not ZFHMIN.
* config/riscv/riscv.opt (riscv_zf_subext): New.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/_Float16-zfh-1.c: New.
* gcc.target/riscv/_Float16-zfh-2.c: Ditto.
* gcc.target/riscv/_Float16-zfh-3.c: Ditto.
* gcc.target/riscv/_Float16-zfhmin-1.c: Ditto.
* gcc.target/riscv/_Float16-zfhmin-2.c: Ditto.
* gcc.target/riscv/_Float16-zfhmin-3.c: Ditto.
* gcc.target/riscv/arch-16.c: Ditto.
* gcc.target/riscv/arch-17.c: Ditto.
* gcc.target/riscv/predef-21.c: Ditto.
* gcc.target/riscv/predef-22.c: Ditto.
15 files changed:
gcc/common/config/riscv/riscv-common.cc
gcc/config/riscv/riscv-opts.h
gcc/config/riscv/riscv.cc
gcc/config/riscv/riscv.md
gcc/config/riscv/riscv.opt
gcc/testsuite/gcc.target/riscv/_Float16-zfh-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-zfh-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-zfh-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-zfhmin-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-zfhmin-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-zfhmin-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/arch-16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/arch-17.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-21.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/predef-22.c [new file with mode: 0644]