summaryrefslogtreecommitdiff
path: root/src/trans
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2017-01-08 21:19:08 +0800
committerJohn Hodge <tpg@mutabah.net>2017-01-08 21:19:08 +0800
commit4bb00a5159ba42ab4460bca40324c4519d00966c (patch)
treea9cd8e07b6f4f972b25c78ff8f03c60011c221ab /src/trans
parent24ba23f0a1a3bda18111e00ea49f1dd95a4556f0 (diff)
downloadmrust-4bb00a5159ba42ab4460bca40324c4519d00966c.tar.gz
Codegen C - Missing float intrinsics
Diffstat (limited to 'src/trans')
-rw-r--r--src/trans/codegen_c.cpp25
1 files changed, 11 insertions, 14 deletions
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