From 700c910cd1be1dcfd84f3a2bc4252a47999b9341 Mon Sep 17 00:00:00 2001 From: JF Bastien Date: Thu, 28 Jan 2016 09:01:07 -0800 Subject: Output NaN payloads only As discussed with @binji and @sunfish in https://github.com/WebAssembly/sexpr-wasm-prototype/issues/28 --- src/wasm.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/wasm.h b/src/wasm.h index 91c318034..367af082a 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -193,9 +193,12 @@ struct Literal { union { float ff; uint32_t ll; - } u; - u.ff = f; - o << "nan:0x" << std::hex << u.ll << std::dec; + } fu, iu; + fu.ff = f; + memcpy(&iu, &fu, sizeof(fu)); + bool sign = std::signbit(f); + uint32_t payload = ~0xffc00000u & iu.ll; + o << (sign ? "-" : "") << "nan:0x" << std::hex << payload << std::dec; return; } printDouble(o, f); @@ -210,9 +213,12 @@ struct Literal { union { double dd; uint64_t ll; - } u; - u.dd = d; - o << "nan:0x" << std::hex << u.ll << std::dec; + } du, iu; + du.dd = d; + memcpy(&iu, &du, sizeof(du)); + bool sign = std::signbit(d); + uint32_t payload = ~0xfff8000000000000ull & iu.ll; + o << (sign ? "" : "-") << "nan:0x" << std::hex << payload << std::dec; return; } if (!std::isfinite(d)) { -- cgit v1.2.3