diff options
author | John Hodge <tpg@mutabah.net> | 2017-01-07 10:46:12 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-01-07 10:46:12 +0800 |
commit | 7fee2c6c05fbc388ec21960c66c818ff0ab5a30f (patch) | |
tree | f3a03fbf8cb962656b165c8b22777a7e6743acac /src | |
parent | fc7d85e0f6005f6ef35b3ca94620896ed56fc6b8 (diff) | |
download | mrust-7fee2c6c05fbc388ec21960c66c818ff0ab5a30f.tar.gz |
Codegen C - Floating point tweaks
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/codegen_c.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 8d28a459..e3f66971 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -1090,7 +1090,15 @@ namespace { (Float, emit_lvalue(e.dst); m_of << " = "; - m_of << c; + if( ::std::isnan(c) ) { + m_of << "NAN"; + } + else if( ::std::isinf(c) ) { + m_of << "INFINITY"; + } + else { + m_of << c; + } ), (Bool, emit_lvalue(e.dst); @@ -1950,10 +1958,10 @@ namespace { emit_lvalue(e.ret_val); m_of << " = trunc("; emit_lvalue(e.args.at(0)); m_of << ")"; } else if( name == "powif32" ) { - emit_lvalue(e.ret_val); m_of << " = powif("; emit_lvalue(e.args.at(0)); m_of << ")"; + emit_lvalue(e.ret_val); m_of << " = powf("; emit_lvalue(e.args.at(0)); m_of << ", "; emit_lvalue(e.args.at(1)); m_of << ")"; } else if( name == "powif64" ) { - emit_lvalue(e.ret_val); m_of << " = powi("; emit_lvalue(e.args.at(0)); m_of << ")"; + emit_lvalue(e.ret_val); m_of << " = pow("; emit_lvalue(e.args.at(0)); m_of << ", "; emit_lvalue(e.args.at(1)); m_of << ")"; } // --- Atomics! // > Single-ordering atomics |