Implement the internal feature cfg_target_has_reliable_f16_f128 by tgross35 · Pull Request #140323 · rust-lang/rust (original) (raw)

Support for f16 and f128 is varied across targets, backends, and backend versions. Eventually we would like to reach a point where all backends support these approximately equally, but until then we have to work around some of these nuances of support being observable.

Introduce the cfg_target_has_reliable_f16_f128 internal feature, which provides the following new configuration gates:

reliable_f16 and reliable_f128 indicate that basic arithmetic for the type works correctly. The _math versions indicate that anything relying on libm works correctly, since sometimes this hits a separate class of codegen bugs.

These options match configuration set by the build script at 1. The logic for LLVM support is duplicated as-is from the same script. There are a few possible updates that will come as a follow up.

The config introduced here is not planned to ever become stable, it is only intended to replace the build scripts for std tests and compiler-builtins that don't have any way to configure based on the codegen backend.

MCP: rust-lang/compiler-team#866
Closes: rust-lang/compiler-team#866


The second commit makes use of this config to replace cfg_{f16,f128}{,_math} in library/. I omitted providing a cfg(bootstrap) configuration to keep things simpler since the next beta branch is in two weeks.

try-job: aarch64-gnu
try-job: i686-msvc-1
try-job: test-various
try-job: x86_64-gnu
try-job: x86_64-msvc-ext2

r? @ghost