From: bors Date: Tue, 4 Jul 2017 13:21:20 +0000 (+0000) Subject: Auto merge of #43025 - est31:nan_cross_platform, r=BurntSushi X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=de7f0617681fc94ecd0090d2dd2e4d70fea8f3a2;p=rust.git Auto merge of #43025 - est31:nan_cross_platform, r=BurntSushi Make sNaN removal code tolerate different sNaN encodings IEEE 754-1985 specifies the encoding of NaN floating point numbers, but while it mentions that NaNs can be subdivided into signaling and quiet ones, it doesn't fix the encoding of signaling NaNs in binary formats. This led to different implementations (CPUs) having different encodings. IEEE 754-2008 finally specified the encoding of signaling NaNs but some architectures are compatible with it, while others aren't. Certain MIPS and PA-RISC CPUs have different encodings for signaling NaNs. In order to have the float <-> binary cast feature of the std library be portable to them, we don't mask any quiet NaNs like we did before (only being compliant to IEEE 754-2008 and nothing else), but instead we simply pass a known good NaN instead. Note that in the code removed there was a bug; the 64 bit mask for quiet NaNs should have been `0x0008000000000000` instead of the specified `0x0001000000000000`. --- de7f0617681fc94ecd0090d2dd2e4d70fea8f3a2