diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/codegen_c.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 2d7a521d..5ea03eca 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -1062,7 +1062,15 @@ namespace { } ), (Float, - m_of << e; + if( ::std::isnan(e) ) { + m_of << "NAN"; + } + else if( ::std::isinf(e) ) { + m_of << "INFINITY"; + } + else { + m_of << e; + } ), (BorrowOf, TU_MATCHA( (e.m_data), (pe), @@ -2273,6 +2281,12 @@ namespace { else if( name == "unchecked_rem" ) { emit_lvalue(e.ret_val); m_of << " = "; emit_param(e.args.at(0)); m_of << " % "; emit_param(e.args.at(1)); } + else if( name == "unchecked_shl" ) { + emit_lvalue(e.ret_val); m_of << " = "; emit_param(e.args.at(0)); m_of << " << "; emit_param(e.args.at(1)); + } + else if( name == "unchecked_shr" ) { + emit_lvalue(e.ret_val); m_of << " = "; emit_param(e.args.at(0)); m_of << " >> "; emit_param(e.args.at(1)); + } // Bit Twiddling // - CounT Leading Zeroes // - CounT Trailing Zeroes @@ -2463,6 +2477,9 @@ namespace { auto ordering = H::get_atomic_ordering(mir_res, name, 7+6); m_of << "atomic_thread_fence(" << ordering << ")"; } + else if( name == "atomic_singlethreadfence" || name.compare(0, 7+18, "atomic_singlethreadfence_") == 0 ) { + // TODO: Does this matter? + } else { MIR_BUG(mir_res, "Unknown intrinsic '" << name << "'"); } @@ -2718,7 +2735,8 @@ namespace { emit_literal(ty, lit, {}); ), (Float, - emit_dst(); m_of << " = " << e; + emit_dst(); m_of << " = "; + emit_literal(ty, lit, {}); ), (BorrowOf, if( ty.m_data.is_Function() ) |