Open
Description
f16
should be okay to pass in GPRs. f16
and f128
can likely get passed in vector or FP registers, but we should prefer to only allow this if an ABI is specified for the type.
Loose list of platforms that specify an ABI:
arm-*
,armv7-*
,aarch64-*
, https://developer.arm.com/documentation/den0024/a/Porting-to-A64/Data-types- PowerPC PowerISA apparently has a half-precision format according to section 7.3.2.1 https://files.openpower.foundation/s/dAYSdGzTfW4j2r2, but I can't get LLVM to emit any instructions for it. Per others, the VSX feature on PowerISA 3.1+ has conversion support for
f16
, and the SVP64 feature (which I can't find documented anywhere) adds full hardware support - MIPS with the MSA extension...? https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00868-1D-MSA64-AFP-01.12.pdf section 3.1 says "16-bit floating-point storage format is supported through conversion instructions to/from 32-bit floating-point data.", I am unsure whether its vector registers have any special support
- riscv64gc with the Q extension: https://github.com/riscv/riscv-isa-manual/blob/riscv-isa-release-2023-05-23/src/q-st-ext.adoc
x86
specifies an ABI for these types, and AVX512fp16 can use them
Additionally, for f128
:
- s390x supports
f128
, referred to as "BFP Extended Format" in https://publibfp.dhe.ibm.com/epubs/pdf/a227832c.pdf. I am not sure if this comes with any special instructions. - PowerPC with
-Ctarget-cpu=pwr9
seems to have f128 support via instructions likexsaddqp
Tracking issue: #116909