PR libstdc++/116513 * libsupc++/compare (_S_fp_bits) [__fmt == _M68k_80bit]: Shift padding out of exponent word. --- libstdc++-v3/libsupc++/compare | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/libstdc++-v3/libsupc++/compare b/libstdc++-v3/libsupc++/compare index 686aa6d218f..63ad6b5c23e 100644 --- a/libstdc++-v3/libsupc++/compare +++ b/libstdc++-v3/libsupc++/compare @@ -838,7 +838,7 @@ namespace std _GLIBCXX_VISIBILITY(default) using enum _Fp_fmt; #endif constexpr auto __fmt = _S_fp_fmt<_Tp>(); - if constexpr (__fmt == _X86_80bit || __fmt == _M68k_80bit) + if constexpr (__fmt == _X86_80bit) { if constexpr (sizeof(_Tp) == 3 * sizeof(int32_t)) { @@ -851,6 +851,11 @@ namespace std _GLIBCXX_VISIBILITY(default) return _Int<int16_t>(__ival._M_hi, __ival._M_lo); } } + else if constexpr (__fmt == _M68k_80bit) + { + auto __ival = __builtin_bit_cast(_Int<int32_t>, __val); + return _Int<int16_t>(__ival._M_hi >> 16, __ival._M_lo); + } else if constexpr (sizeof(_Tp) == 2 * sizeof(int64_t)) { #if __SIZEOF_INT128__ -- 2.46.0 -- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."