Skip to content

Commit c35eaae

Browse files
committed
c-writer.cc: represent float consts as integer literals
1 parent 1263c6a commit c35eaae

File tree

1 file changed

+5
-43
lines changed

1 file changed

+5
-43
lines changed

src/c-writer.cc

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1250,52 +1250,14 @@ void CWriter::Write(const Const& const_) {
12501250
Writef("%" PRIu64 "ull", static_cast<int64_t>(const_.u64()));
12511251
break;
12521252

1253-
case Type::F32: {
1254-
uint32_t f32_bits = const_.f32_bits();
1255-
// TODO(binji): Share with similar float info in interp.cc and literal.cc
1256-
if ((f32_bits & 0x7f800000u) == 0x7f800000u) {
1257-
const char* sign = (f32_bits & 0x80000000) ? "-" : "";
1258-
uint32_t significand = f32_bits & 0x7fffffu;
1259-
if (significand == 0) {
1260-
// Infinity.
1261-
Writef("%sINFINITY", sign);
1262-
} else {
1263-
// Nan.
1264-
Writef("f32_reinterpret_i32(0x%08x) /* %snan:0x%06x */", f32_bits,
1265-
sign, significand);
1266-
}
1267-
} else if (f32_bits == 0x80000000) {
1268-
// Negative zero. Special-cased so it isn't written as -0 below.
1269-
Writef("-0.f");
1270-
} else {
1271-
Writef("%.9g", Bitcast<float>(f32_bits));
1272-
}
1253+
case Type::F32:
1254+
Writef("f32_reinterpret_i32(0x%" PRIx32 ")", const_.f32_bits());
12731255
break;
1274-
}
12751256

1276-
case Type::F64: {
1277-
uint64_t f64_bits = const_.f64_bits();
1278-
// TODO(binji): Share with similar float info in interp.cc and literal.cc
1279-
if ((f64_bits & 0x7ff0000000000000ull) == 0x7ff0000000000000ull) {
1280-
const char* sign = (f64_bits & 0x8000000000000000ull) ? "-" : "";
1281-
uint64_t significand = f64_bits & 0xfffffffffffffull;
1282-
if (significand == 0) {
1283-
// Infinity.
1284-
Writef("%sINFINITY", sign);
1285-
} else {
1286-
// Nan.
1287-
Writef("f64_reinterpret_i64(0x%016" PRIx64 ") /* %snan:0x%013" PRIx64
1288-
" */",
1289-
f64_bits, sign, significand);
1290-
}
1291-
} else if (f64_bits == 0x8000000000000000ull) {
1292-
// Negative zero. Special-cased so it isn't written as -0 below.
1293-
Writef("-0.0");
1294-
} else {
1295-
Writef("%.17g", Bitcast<double>(f64_bits));
1296-
}
1257+
case Type::F64:
1258+
Writef("f64_reinterpret_i64(0x%" PRIx64 ")", const_.f64_bits());
12971259
break;
1298-
}
1260+
12991261
case Type::V128: {
13001262
Writef("v128_const(0x%02x", const_.vec128().u8(0));
13011263
for (int i = 1; i < 16; i++) {

0 commit comments

Comments
 (0)