]> git.ipfire.org Git - thirdparty/gcc.git/commit
RISC-V: Support _Float16 type.
authorKito Cheng <kito.cheng@sifive.com>
Mon, 4 Jul 2022 12:17:47 +0000 (20:17 +0800)
committerKito Cheng <kito.cheng@sifive.com>
Tue, 16 Aug 2022 15:34:20 +0000 (23:34 +0800)
commit27d68a60783b52504a08503d3fe12054de104241
tree1dfae8996fc876b3030172e481b3d0943e529b2b
parente230261073950e554319f56716d2b17c09a28658
RISC-V: Support _Float16 type.

RISC-V decide use _Float16 as primary IEEE half precision type, and this
already become part of psABI, this patch has added folloing support for
_Float16:

- Soft-float support for _Float16.
- Make sure _Float16 available on C++ mode.
- Name mangling for _Float16 on C++ mode.

gcc/ChangeLog

* config/riscv/riscv-builtins.cc: include stringpool.h
(riscv_float16_type_node): New.
(riscv_init_builtin_types): Ditto.
(riscv_init_builtins): Call riscv_init_builtin_types.
* config/riscv/riscv-modes.def (HF): New.
* config/riscv/riscv.cc (riscv_output_move): Handle HFmode.
(riscv_mangle_type): New.
(riscv_scalar_mode_supported_p): Ditto.
(riscv_libgcc_floating_mode_supported_p): Ditto.
(riscv_excess_precision): Ditto.
(riscv_floatn_mode): Ditto.
(riscv_init_libfuncs): Ditto.
(TARGET_MANGLE_TYPE): Ditto.
(TARGET_SCALAR_MODE_SUPPORTED_P): Ditto.
(TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P): Ditto.
(TARGET_INIT_LIBFUNCS): Ditto.
(TARGET_C_EXCESS_PRECISION): Ditto.
(TARGET_FLOATN_MODE): Ditto.
* config/riscv/riscv.md (mode): Add HF.
(softload): Add HF.
(softstore): Ditto.
(fmt): Ditto.
(UNITMODE): Ditto.
(movhf): New.
(*movhf_softfloat): New.

libgcc/ChangeLog:

* config/riscv/sfp-machine.h (_FP_NANFRAC_H): New.
(_FP_NANFRAC_H): Ditto.
(_FP_NANSIGN_H): Ditto.
* config/riscv/t-softfp32 (softfp_extensions): Add HF related
routines.
(softfp_truncations): Ditto.
(softfp_extras): Ditto.
* config/riscv/t-softfp64 (softfp_extras): Add HF related routines.

gcc/testsuite/ChangeLog:

* g++.target/riscv/_Float16.C: New.
* gcc.target/riscv/_Float16-soft-1.c: Ditto.
* gcc.target/riscv/_Float16-soft-2.c: Ditto.
* gcc.target/riscv/_Float16-soft-3.c: Ditto.
* gcc.target/riscv/_Float16-soft-4.c: Ditto.
* gcc.target/riscv/_Float16.c: Ditto.
13 files changed:
gcc/config/riscv/riscv-builtins.cc
gcc/config/riscv/riscv-modes.def
gcc/config/riscv/riscv.cc
gcc/config/riscv/riscv.md
gcc/testsuite/g++.target/riscv/_Float16.C [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-soft-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-soft-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-soft-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16-soft-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/_Float16.c [new file with mode: 0644]
libgcc/config/riscv/sfp-machine.h
libgcc/config/riscv/t-softfp32
libgcc/config/riscv/t-softfp64