From 4bb00a5159ba42ab4460bca40324c4519d00966c Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sun, 8 Jan 2017 21:19:08 +0800 Subject: Codegen C - Missing float intrinsics --- src/trans/codegen_c.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'src/trans/codegen_c.cpp') diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index df6ac636..8c0a08d4 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -1996,24 +1996,21 @@ namespace { } // --- Floating Point // > Round to nearest integer, half-way rounds away from zero - else if( name == "roundf32" ) { - emit_lvalue(e.ret_val); m_of << " = roundf("; emit_lvalue(e.args.at(0)); m_of << ")"; + else if( name == "roundf32" && name == "roundf64" ) { + emit_lvalue(e.ret_val); m_of << " = round" << (name.back()=='2'?"f":"") << "("; emit_lvalue(e.args.at(0)); m_of << ")"; } - else if( name == "roundf64" ) { - emit_lvalue(e.ret_val); m_of << " = round("; emit_lvalue(e.args.at(0)); m_of << ")"; + else if( name == "fabsf32" || name == "fabsf64" ) { + emit_lvalue(e.ret_val); m_of << " = fabs" << (name.back()=='2'?"f":"") << "("; emit_lvalue(e.args.at(0)); m_of << ")"; } - // > Returns the integer part of an `f32`. - else if( name == "truncf32" ) { - emit_lvalue(e.ret_val); m_of << " = truncf("; emit_lvalue(e.args.at(0)); m_of << ")"; - } - else if( name == "truncf64" ) { - emit_lvalue(e.ret_val); m_of << " = trunc("; emit_lvalue(e.args.at(0)); m_of << ")"; + else if( name == "copysignf32" || name == "copysignf64" ) { + emit_lvalue(e.ret_val); m_of << " = copysign" << (name.back()=='2'?"f":"") << "("; emit_lvalue(e.args.at(0)); m_of << ")"; } - else if( name == "powif32" ) { - emit_lvalue(e.ret_val); m_of << " = powf("; emit_lvalue(e.args.at(0)); m_of << ", "; emit_lvalue(e.args.at(1)); m_of << ")"; + // > Returns the integer part of an `f32`. + else if( name == "truncf32" || name == "truncf64" ) { + emit_lvalue(e.ret_val); m_of << " = trunc" << (name.back()=='2'?"f":"") << "("; emit_lvalue(e.args.at(0)); m_of << ")"; } - else if( name == "powif64" ) { - emit_lvalue(e.ret_val); m_of << " = pow("; emit_lvalue(e.args.at(0)); m_of << ", "; emit_lvalue(e.args.at(1)); m_of << ")"; + else if( name == "powif32" || name == "powif64" ) { + emit_lvalue(e.ret_val); m_of << " = pow" << (name.back()=='2'?"f":"") << "("; emit_lvalue(e.args.at(0)); m_of << ", "; emit_lvalue(e.args.at(1)); m_of << ")"; } // --- Atomics! // > Single-ordering atomics -- cgit v1.2.3