[PATCH] D35295: [docs] Add section 'Half-Precision Floating Point'

Simon Tatham via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 12 04:00:46 PDT 2017


simon_tatham added inline comments.


================
Comment at: docs/LanguageExtensions.rst:457
+that arithmetic on ``_Float16`` is performed in half-precision, thus it is not
+a storage-only format. It is recommended that portable code use the
+``_Float16`` type.
----------------
I think the use of "portable" here doesn't really give enough detail.

>From an ARM-specific perspective, source code using `_Float16` will be compiled into code that uses the hardware FP instructions for arithmetic on 16-bit FP values which were introduced in ARMv8.2, whereas `__fp16` will be compiled into code that only uses the instructions to convert 16-bit to and from 32-bit, from a much earlier architecture revision. So from that perspective, using `_Float16` will //reduce// portability, because it will make your code run (or at least run at full hardware-FP speed) on a smaller set of CPUs.

On the other hand, from a source language perspective, `__fp16` is defined in an ARM-specific language extension, whereas `_Float16` is defined by the C standards committee. So if your portability concern is between entire architectures, rather than between versions of the ARM architecture, then using `_Float16` probably does help.

So I think it would probably be better to make some of this explicit – don't just say one or the other type is "more portable", but say something more specific about the circumstances in which each one can be expected to work.


https://reviews.llvm.org/D35295





More information about the cfe-commits mailing list