On Fri, 12 Mar 2021, Jonathan Wakely via Gcc wrote:

> Why not just make _Float16 available in C++ as a GCC extension?

There may be questions about promotions from _Float16 to wider formats for 
arithmetic.

For C, there are no such promotions at the level of types (adding two 
_Float16 values produces a result of type _Float16), but the excess 
precision mechanism is used in some cases to cause a result of _Float16 
arithmetic, although of semantic type _Float16, to be represented with the 
range and precision of _Float32, to reduce the number of conversions of 
intermediate results back to the range and precision of _Float16 that are 
needed on hardware that doesn't have arithmetic operating directly on 
_Float16.  Specifically, on AArch64, the excess precision mechanism is 
used before ARMv8.2-A; v8.2-A adds direct arithmetic on _Float16 so no 
excess precision is used from then on (see aarch64_excess_precision).

As we don't have excess precision support in the C++ front end, supporting 
_Float16 for C++ will require a decision about how to handle _Float16 
arithmetic on hardware where there aren't actual _Float16 arithmetic 
operations.

(The RISC-V document linked to suggests that won't be an issue for RISC-V 
with hardware _Float16 support, though obviously it's still necessary to 
decide what to do when using _Float16 on RISC-V systems without the 
hardware support, if that is allowed at all.)

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to