#include "prx/libc/libc.hpp" #include #include #include static void Require(bool value) { if (!value) std::abort(); } struct ScaleCase { std::uint64_t input; long long exponent; short code; std::uint64_t result; short extendedCode; std::uint64_t extendedResult; }; struct FloatScaleCase { std::uint32_t input; long long exponent; short code; std::uint32_t result; }; struct UnscaleCase { std::uint64_t input; short code; short exponent; std::uint64_t result; short extendedCode; short extendedExponent; std::uint64_t extendedResult; }; struct FloatUnscaleCase { std::uint32_t input; short code; short exponent; std::uint32_t result; }; static const ScaleCase kScales[] = { {0x0000000000000000ull, 0ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000000ull, 52ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000000ull, -1022ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000000ull, -1075ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000000ull, 2047ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000000ull, -9223372036854775807ll - 1, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x8000000000000000ull, -1ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000000ull, 1023ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000000ull, -1074ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000000ull, 1024ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000000ull, 9223372036854775807ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x0000000000000001ull, 1ll, -1, 0x0000000000000002ull, -1, 0x0000000000000002ull}, {0x0000000000000001ull, -52ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000001ull, -1023ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000001ull, -1076ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000001ull, -2100ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x8000000000000003ull, 0ll, -1, 0x8000000000000003ull, -1, 0x8000000000000003ull}, {0x8000000000000003ull, 52ll, -1, 0x8028000000000000ull, -1, 0x8028000000000000ull}, {0x8000000000000003ull, -1022ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000003ull, -1075ll, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x8000000000000003ull, 2047ll, -1, 0xfcd8000000000000ull, -1, 0xfcd8000000000000ull}, {0x8000000000000003ull, -9223372036854775807ll - 1, 0, 0x8000000000000000ull, 0, 0x8000000000000000ull}, {0x000fffffffffffffull, -1ll, -1, 0x0008000000000000ull, -1, 0x0008000000000000ull}, {0x000fffffffffffffull, 1023ll, -1, 0x3ffffffffffffffeull, -1, 0x3ffffffffffffffeull}, {0x000fffffffffffffull, -1074ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x000fffffffffffffull, 1024ll, -1, 0x400ffffffffffffeull, -1, 0x400ffffffffffffeull}, {0x000fffffffffffffull, 9223372036854775807ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x0010000000000000ull, 1ll, -1, 0x0020000000000000ull, -1, 0x0020000000000000ull}, {0x0010000000000000ull, -52ll, -1, 0x0000000000000001ull, -1, 0x0000000000000001ull}, {0x0010000000000000ull, -1023ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0010000000000000ull, -1076ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0010000000000000ull, -2100ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ff0000000000000ull, 0ll, -1, 0x3ff0000000000000ull, -1, 0x3ff0000000000000ull}, {0x3ff0000000000000ull, 52ll, -1, 0x4330000000000000ull, -1, 0x4330000000000000ull}, {0x3ff0000000000000ull, -1022ll, -1, 0x0010000000000000ull, -1, 0x0010000000000000ull}, {0x3ff0000000000000ull, -1075ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ff0000000000000ull, 2047ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x3ff0000000000000ull, -9223372036854775807ll - 1, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0xbff8000000000000ull, -1ll, -1, 0xbfe8000000000000ull, -1, 0xbfe8000000000000ull}, {0xbff8000000000000ull, 1023ll, -1, 0xffe8000000000000ull, -1, 0xffe8000000000000ull}, {0xbff8000000000000ull, -1074ll, -1, 0x8000000000000002ull, -1, 0x8000000000000002ull}, {0xbff8000000000000ull, 1024ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xbff8000000000000ull, 9223372036854775807ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0x3ff0000000000001ull, 1ll, -1, 0x4000000000000001ull, -1, 0x4000000000000001ull}, {0x3ff0000000000001ull, -52ll, -1, 0x3cb0000000000001ull, -1, 0x3cb0000000000001ull}, {0x3ff0000000000001ull, -1023ll, -1, 0x0008000000000000ull, -1, 0x0008000000000000ull}, {0x3ff0000000000001ull, -1076ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ff0000000000001ull, -2100ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ff8000000000000ull, 0ll, -1, 0x3ff8000000000000ull, -1, 0x3ff8000000000000ull}, {0x3ff8000000000000ull, 52ll, -1, 0x4338000000000000ull, -1, 0x4338000000000000ull}, {0x3ff8000000000000ull, -1022ll, -1, 0x0018000000000000ull, -1, 0x0018000000000000ull}, {0x3ff8000000000000ull, -1075ll, -1, 0x0000000000000001ull, -1, 0x0000000000000001ull}, {0x3ff8000000000000ull, 2047ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x3ff8000000000000ull, -9223372036854775807ll - 1, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ff4000000000000ull, -1ll, -1, 0x3fe4000000000000ull, -1, 0x3fe4000000000000ull}, {0x3ff4000000000000ull, 1023ll, -1, 0x7fe4000000000000ull, -1, 0x7fe4000000000000ull}, {0x3ff4000000000000ull, -1074ll, -1, 0x0000000000000001ull, -1, 0x0000000000000001ull}, {0x3ff4000000000000ull, 1024ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x3ff4000000000000ull, 9223372036854775807ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x3ffc000000000000ull, 1ll, -1, 0x400c000000000000ull, -1, 0x400c000000000000ull}, {0x3ffc000000000000ull, -52ll, -1, 0x3cbc000000000000ull, -1, 0x3cbc000000000000ull}, {0x3ffc000000000000ull, -1023ll, -1, 0x000e000000000000ull, -1, 0x000e000000000000ull}, {0x3ffc000000000000ull, -1076ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x3ffc000000000000ull, -2100ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x7fefffffffffffffull, 0ll, -1, 0x7fefffffffffffffull, -1, 0x7fefffffffffffffull}, {0x7fefffffffffffffull, 52ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7fefffffffffffffull, -1022ll, -1, 0x400fffffffffffffull, -1, 0x400fffffffffffffull}, {0x7fefffffffffffffull, -1075ll, -1, 0x3cbfffffffffffffull, -1, 0x3cbfffffffffffffull}, {0x7fefffffffffffffull, 2047ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7fefffffffffffffull, -9223372036854775807ll - 1, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0xffefffffffffffffull, -1ll, -1, 0xffdfffffffffffffull, -1, 0xffdfffffffffffffull}, {0xffefffffffffffffull, 1023ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xffefffffffffffffull, -1074ll, -1, 0xbccfffffffffffffull, -1, 0xbccfffffffffffffull}, {0xffefffffffffffffull, 1024ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xffefffffffffffffull, 9223372036854775807ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0x7ff0000000000000ull, 1ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7ff0000000000000ull, -52ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7ff0000000000000ull, -1023ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7ff0000000000000ull, -1076ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x7ff0000000000000ull, -2100ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0xfff0000000000000ull, 0ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xfff0000000000000ull, 52ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xfff0000000000000ull, -1022ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xfff0000000000000ull, -1075ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xfff0000000000000ull, 2047ll, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0xfff0000000000000ull, -9223372036854775807ll - 1, 1, 0xfff0000000000000ull, 1, 0xfff0000000000000ull}, {0x7ff8000000000000ull, -1ll, 2, 0x7ff8000000000000ull, 2, 0x7ff8000000000000ull}, {0x7ff8000000000000ull, 1023ll, 2, 0x7ff8000000000000ull, 2, 0x7ff8000000000000ull}, {0x7ff8000000000000ull, -1074ll, 2, 0x7ff8000000000000ull, 2, 0x7ff8000000000000ull}, {0x7ff8000000000000ull, 1024ll, 2, 0x7ff8000000000000ull, 2, 0x7ff8000000000000ull}, {0x7ff8000000000000ull, 9223372036854775807ll, 2, 0x7ff8000000000000ull, 2, 0x7ff8000000000000ull}, {0x7ff0000000000001ull, 1ll, 2, 0x7ff0000000000001ull, 2, 0x7ff0000000000001ull}, {0x7ff0000000000001ull, -52ll, 2, 0x7ff0000000000001ull, 2, 0x7ff0000000000001ull}, {0x7ff0000000000001ull, -1023ll, 2, 0x7ff0000000000001ull, 2, 0x7ff0000000000001ull}, {0x7ff0000000000001ull, -1076ll, 2, 0x7ff0000000000001ull, 2, 0x7ff0000000000001ull}, {0x7ff0000000000001ull, -2100ll, 2, 0x7ff0000000000001ull, 2, 0x7ff0000000000001ull}, {0x405edd2f1a9fbe77ull, 0ll, -1, 0x405edd2f1a9fbe77ull, -1, 0x405edd2f1a9fbe77ull}, {0x405edd2f1a9fbe77ull, 52ll, -1, 0x439edd2f1a9fbe77ull, -1, 0x439edd2f1a9fbe77ull}, {0x405edd2f1a9fbe77ull, -1022ll, -1, 0x007edd2f1a9fbe77ull, -1, 0x007edd2f1a9fbe77ull}, {0x405edd2f1a9fbe77ull, -1075ll, -1, 0x000000000000003eull, -1, 0x000000000000003eull}, {0x405edd2f1a9fbe77ull, 2047ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x405edd2f1a9fbe77ull, -9223372036854775807ll - 1, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0008000000000000ull, -1ll, -1, 0x0004000000000000ull, -1, 0x0004000000000000ull}, {0x0008000000000000ull, 1023ll, -1, 0x3ff0000000000000ull, -1, 0x3ff0000000000000ull}, {0x0008000000000000ull, -1074ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0008000000000000ull, 1024ll, -1, 0x4000000000000000ull, -1, 0x4000000000000000ull}, {0x0008000000000000ull, 9223372036854775807ll, 1, 0x7ff0000000000000ull, 1, 0x7ff0000000000000ull}, {0x0000000000000400ull, 1ll, -1, 0x0000000000000800ull, -1, 0x0000000000000800ull}, {0x0000000000000400ull, -52ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000400ull, -1023ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000400ull, -1076ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, {0x0000000000000400ull, -2100ll, 0, 0x0000000000000000ull, 0, 0x0000000000000000ull}, }; static const FloatScaleCase kFloatScales[] = { {0x00000000u, 0ll, 0, 0x00000000u}, {0x00000000u, 23ll, 0, 0x00000000u}, {0x00000000u, -127ll, 0, 0x00000000u}, {0x00000000u, -151ll, 0, 0x00000000u}, {0x00000000u, 9223372036854775807ll, 0, 0x00000000u}, {0x80000000u, 1ll, 0, 0x80000000u}, {0x80000000u, 127ll, 0, 0x80000000u}, {0x80000000u, -149ll, 0, 0x80000000u}, {0x80000000u, 255ll, 0, 0x80000000u}, {0x80000000u, -9223372036854775807ll - 1, 0, 0x80000000u}, {0x00000001u, 23ll, -1, 0x00800000u}, {0x00000001u, -126ll, 0, 0x00000000u}, {0x00000001u, -151ll, 0, 0x00000000u}, {0x00000001u, -300ll, 0, 0x00000000u}, {0x80000003u, 1ll, -1, 0x80000006u}, {0x80000003u, -23ll, 0, 0x80000000u}, {0x80000003u, -149ll, 0, 0x80000000u}, {0x80000003u, 128ll, -1, 0xb5c00000u}, {0x80000003u, -9223372036854775807ll - 1, 0, 0x80000000u}, {0x007fffffu, -1ll, -1, 0x00400000u}, {0x007fffffu, -126ll, 0, 0x00000000u}, {0x007fffffu, -150ll, 0, 0x00000000u}, {0x007fffffu, -300ll, 0, 0x00000000u}, {0x00800000u, 0ll, -1, 0x00800000u}, {0x00800000u, -23ll, -1, 0x00000001u}, {0x00800000u, -127ll, 0, 0x00000000u}, {0x00800000u, 128ll, -1, 0x40800000u}, {0x00800000u, 9223372036854775807ll, 1, 0x7f800000u}, {0x3f800000u, -1ll, -1, 0x3f000000u}, {0x3f800000u, 127ll, -1, 0x7f000000u}, {0x3f800000u, -150ll, 0, 0x00000000u}, {0x3f800000u, 255ll, 1, 0x7f800000u}, {0xbfc00000u, 0ll, -1, 0xbfc00000u}, {0xbfc00000u, 23ll, -1, 0xcb400000u}, {0xbfc00000u, -127ll, -1, 0x80600000u}, {0xbfc00000u, -151ll, 0, 0x80000000u}, {0xbfc00000u, 9223372036854775807ll, 1, 0xff800000u}, {0x3f800001u, 1ll, -1, 0x40000001u}, {0x3f800001u, 127ll, -1, 0x7f000001u}, {0x3f800001u, -149ll, -1, 0x00000001u}, {0x3f800001u, 255ll, 1, 0x7f800000u}, {0x3f800001u, -9223372036854775807ll - 1, 0, 0x00000000u}, {0x3fc00000u, 23ll, -1, 0x4b400000u}, {0x3fc00000u, -126ll, -1, 0x00c00000u}, {0x3fc00000u, -151ll, 0, 0x00000000u}, {0x3fc00000u, -300ll, 0, 0x00000000u}, {0x3fa00000u, 1ll, -1, 0x40200000u}, {0x3fa00000u, -23ll, -1, 0x34200000u}, {0x3fa00000u, -149ll, -1, 0x00000001u}, {0x3fa00000u, 128ll, 1, 0x7f800000u}, {0x3fa00000u, -9223372036854775807ll - 1, 0, 0x00000000u}, {0x3fe00000u, -1ll, -1, 0x3f600000u}, {0x3fe00000u, -126ll, -1, 0x00e00000u}, {0x3fe00000u, -150ll, -1, 0x00000001u}, {0x3fe00000u, -300ll, 0, 0x00000000u}, {0x7f7fffffu, 0ll, -1, 0x7f7fffffu}, {0x7f7fffffu, -23ll, -1, 0x73ffffffu}, {0x7f7fffffu, -127ll, -1, 0x3fffffffu}, {0x7f7fffffu, 128ll, 1, 0x7f800000u}, {0x7f7fffffu, 9223372036854775807ll, 1, 0x7f800000u}, {0xff7fffffu, -1ll, -1, 0xfeffffffu}, {0xff7fffffu, 127ll, 1, 0xff800000u}, {0xff7fffffu, -150ll, -1, 0xb47fffffu}, {0xff7fffffu, 255ll, 1, 0xff800000u}, {0x7f800000u, 0ll, 1, 0x7f800000u}, {0x7f800000u, 23ll, 1, 0x7f800000u}, {0x7f800000u, -127ll, 1, 0x7f800000u}, {0x7f800000u, -151ll, 1, 0x7f800000u}, {0x7f800000u, 9223372036854775807ll, 1, 0x7f800000u}, {0xff800000u, 1ll, 1, 0xff800000u}, {0xff800000u, 127ll, 1, 0xff800000u}, {0xff800000u, -149ll, 1, 0xff800000u}, {0xff800000u, 255ll, 1, 0xff800000u}, {0xff800000u, -9223372036854775807ll - 1, 1, 0xff800000u}, {0x7fc00000u, 23ll, 2, 0x7fc00000u}, {0x7fc00000u, -126ll, 2, 0x7fc00000u}, {0x7fc00000u, -151ll, 2, 0x7fc00000u}, {0x7fc00000u, -300ll, 2, 0x7fc00000u}, {0x7f800001u, 1ll, 2, 0x7f800001u}, {0x7f800001u, -23ll, 2, 0x7f800001u}, {0x7f800001u, -149ll, 2, 0x7f800001u}, {0x7f800001u, 128ll, 2, 0x7f800001u}, {0x7f800001u, -9223372036854775807ll - 1, 2, 0x7f800001u}, {0x42f6e979u, -1ll, -1, 0x4276e979u}, {0x42f6e979u, -126ll, -1, 0x03f6e979u}, {0x42f6e979u, -150ll, -1, 0x0000003eu}, {0x42f6e979u, -300ll, 0, 0x00000000u}, {0x00400000u, 0ll, -1, 0x00400000u}, {0x00400000u, -23ll, 0, 0x00000000u}, {0x00400000u, -127ll, 0, 0x00000000u}, {0x00400000u, 128ll, -1, 0x40000000u}, {0x00400000u, 9223372036854775807ll, 1, 0x7f800000u}, {0x00000400u, -1ll, -1, 0x00000200u}, {0x00000400u, 127ll, -1, 0x39800000u}, {0x00000400u, -150ll, 0, 0x00000000u}, {0x00000400u, 255ll, -1, 0x79800000u}, }; static const UnscaleCase kUnscales[] = { {0x0000000000000000ull, 0, 0, 0x0000000000000000ull, 0, 0, 0x0000000000000000ull}, {0x8000000000000000ull, 0, 0, 0x8000000000000000ull, 0, 0, 0x8000000000000000ull}, {0x0000000000000001ull, -1, -1073, 0x3fe0000000000000ull, -1, -1073, 0x3fe0000000000000ull}, {0x8000000000000003ull, -1, -1072, 0xbfe8000000000000ull, -1, -1072, 0xbfe8000000000000ull}, {0x000fffffffffffffull, -1, -1022, 0x3feffffffffffffeull, -1, -1022, 0x3feffffffffffffeull}, {0x0010000000000000ull, -1, -1021, 0x3fe0000000000000ull, -1, -1021, 0x3fe0000000000000ull}, {0x3ff0000000000000ull, -1, 1, 0x3fe0000000000000ull, -1, 1, 0x3fe0000000000000ull}, {0xbff8000000000000ull, -1, 1, 0xbfe8000000000000ull, -1, 1, 0xbfe8000000000000ull}, {0x3ff0000000000001ull, -1, 1, 0x3fe0000000000001ull, -1, 1, 0x3fe0000000000001ull}, {0x3ff8000000000000ull, -1, 1, 0x3fe8000000000000ull, -1, 1, 0x3fe8000000000000ull}, {0x3ff4000000000000ull, -1, 1, 0x3fe4000000000000ull, -1, 1, 0x3fe4000000000000ull}, {0x3ffc000000000000ull, -1, 1, 0x3fec000000000000ull, -1, 1, 0x3fec000000000000ull}, {0x7fefffffffffffffull, -1, 1024, 0x3fefffffffffffffull, -1, 1024, 0x3fefffffffffffffull}, {0xffefffffffffffffull, -1, 1024, 0xbfefffffffffffffull, -1, 1024, 0xbfefffffffffffffull}, {0x7ff0000000000000ull, 1, 0, 0x7ff0000000000000ull, 1, 0, 0x7ff0000000000000ull}, {0xfff0000000000000ull, 1, 0, 0xfff0000000000000ull, 1, 0, 0xfff0000000000000ull}, {0x7ff8000000000000ull, 2, 0, 0x7ff8000000000000ull, 2, 0, 0x7ff8000000000000ull}, {0x7ff0000000000001ull, 2, 0, 0x7ff0000000000001ull, 2, 0, 0x7ff0000000000001ull}, {0x405edd2f1a9fbe77ull, -1, 7, 0x3feedd2f1a9fbe77ull, -1, 7, 0x3feedd2f1a9fbe77ull}, {0x0008000000000000ull, -1, -1022, 0x3fe0000000000000ull, -1, -1022, 0x3fe0000000000000ull}, {0x0000000000000400ull, -1, -1063, 0x3fe0000000000000ull, -1, -1063, 0x3fe0000000000000ull}, }; static const FloatUnscaleCase kFloatUnscales[] = { {0x00000000u, 0, 0, 0x00000000u}, {0x80000000u, 0, 0, 0x80000000u}, {0x00000001u, -1, -148, 0x3f000000u}, {0x80000003u, -1, -147, 0xbf400000u}, {0x007fffffu, -1, -126, 0x3f7ffffeu}, {0x00800000u, -1, -125, 0x3f000000u}, {0x3f800000u, -1, 1, 0x3f000000u}, {0xbfc00000u, -1, 1, 0xbf400000u}, {0x3f800001u, -1, 1, 0x3f000001u}, {0x3fc00000u, -1, 1, 0x3f400000u}, {0x3fa00000u, -1, 1, 0x3f200000u}, {0x3fe00000u, -1, 1, 0x3f600000u}, {0x7f7fffffu, -1, 128, 0x3f7fffffu}, {0xff7fffffu, -1, 128, 0xbf7fffffu}, {0x7f800000u, 1, 0, 0x7f800000u}, {0xff800000u, 1, 0, 0xff800000u}, {0x7fc00000u, 2, 0, 0x7fc00000u}, {0x7f800001u, 2, 0, 0x7f800001u}, {0x42f6e979u, -1, 7, 0x3f76e979u}, {0x00400000u, -1, -126, 0x3f000000u}, {0x00000400u, -1, -138, 0x3f000000u}, }; int main() { for (const auto& c : kScales) { double value = std::bit_cast(c.input); Require(_ZNSt8__sce_v27_DscaleEPdl_nid_postfix(&value, c.exponent) == c.code && std::bit_cast(value) == c.result); value = std::bit_cast(c.input); Require(_ZNSt8__sce_v28_LDscaleEPel_nid_postfix(&value, c.exponent) == c.extendedCode && std::bit_cast(value) == c.extendedResult); } for (const auto& c : kFloatScales) { float value = std::bit_cast(c.input); Require(_ZNSt8__sce_v28_FDscaleEPfl_nid_postfix(&value, c.exponent) == c.code && std::bit_cast(value) == c.result); } for (const auto& c : kUnscales) { double value = std::bit_cast(c.input); short exponent = 77; Require(_ZNSt8__sce_v29_DunscaleEPsPd_nid_postfix(&exponent, &value) == c.code && exponent == c.exponent && std::bit_cast(value) == c.result); value = std::bit_cast(c.input); exponent = 77; Require(_ZNSt8__sce_v210_LDunscaleEPsPe_nid_postfix(&exponent, &value) == c.extendedCode && exponent == c.extendedExponent && std::bit_cast(value) == c.extendedResult); } for (const auto& c : kFloatUnscales) { float value = std::bit_cast(c.input); short exponent = 77; Require(_ZNSt8__sce_v210_FDunscaleEPsPf_nid_postfix(&exponent, &value) == c.code && exponent == c.exponent && std::bit_cast(value) == c.result); } }