summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2017-01-07 10:46:12 +0800
committerJohn Hodge <tpg@mutabah.net>2017-01-07 10:46:12 +0800
commit7fee2c6c05fbc388ec21960c66c818ff0ab5a30f (patch)
treef3a03fbf8cb962656b165c8b22777a7e6743acac /src
parentfc7d85e0f6005f6ef35b3ca94620896ed56fc6b8 (diff)
downloadmrust-7fee2c6c05fbc388ec21960c66c818ff0ab5a30f.tar.gz
Codegen C - Floating point tweaks
Diffstat (limited to 'src')
-rw-r--r--src/trans/codegen_c.cpp14
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