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:
cfg(target_has_reliable_f16)
cfg(target_has_reliable_f16_math)
cfg(target_has_reliable_f128)
cfg(target_has_reliable_f128_math)
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