< prev index next >
src/hotspot/share/opto/library_call.cpp
Print this page
@@ -50,10 +50,11 @@
#include "opto/narrowptrnode.hpp"
#include "opto/opaquenode.hpp"
#include "opto/parse.hpp"
#include "opto/runtime.hpp"
#include "opto/rootnode.hpp"
+#include "opto/signum.hpp"
#include "opto/subnode.hpp"
#include "prims/nativeLookup.hpp"
#include "prims/unsafe.hpp"
#include "runtime/objectMonitor.hpp"
#include "runtime/sharedRuntime.hpp"
@@ -549,11 +550,13 @@
case vmIntrinsics::_datan2:
case vmIntrinsics::_dsqrt:
case vmIntrinsics::_dexp:
case vmIntrinsics::_dlog:
case vmIntrinsics::_dlog10:
- case vmIntrinsics::_dpow: return inline_math_native(intrinsic_id());
+ case vmIntrinsics::_dpow:
+ case vmIntrinsics::_dsignum:
+ case vmIntrinsics::_fsignum: return inline_math_native(intrinsic_id());
case vmIntrinsics::_min:
case vmIntrinsics::_max: return inline_min_max(intrinsic_id());
case vmIntrinsics::_notify:
@@ -1811,10 +1814,11 @@
case vmIntrinsics::_dabs: n = new AbsDNode( arg); break;
case vmIntrinsics::_dsqrt: n = new SqrtDNode(C, control(), arg); break;
case vmIntrinsics::_ceil: n = RoundDoubleModeNode::make(_gvn, arg, RoundDoubleModeNode::rmode_ceil); break;
case vmIntrinsics::_floor: n = RoundDoubleModeNode::make(_gvn, arg, RoundDoubleModeNode::rmode_floor); break;
case vmIntrinsics::_rint: n = RoundDoubleModeNode::make(_gvn, arg, RoundDoubleModeNode::rmode_rint); break;
+ case vmIntrinsics::_dsignum: n = new SignumDNode(arg); break;
default: fatal_unexpected_iid(id); break;
}
set_result(_gvn.transform(n));
return true;
}
@@ -1828,10 +1832,11 @@
Node* n = NULL;
switch (id) {
case vmIntrinsics::_fabs: n = new AbsFNode( arg); break;
case vmIntrinsics::_iabs: n = new AbsINode( arg); break;
case vmIntrinsics::_labs: n = new AbsLNode( arg); break;
+ case vmIntrinsics::_fsignum: n = new SignumFNode(arg); break;
default: fatal_unexpected_iid(id); break;
}
set_result(_gvn.transform(n));
return true;
}
@@ -1912,10 +1917,15 @@
runtime_math(OptoRuntime::Math_DD_D_Type(), StubRoutines::dpow(), "dpow") :
runtime_math(OptoRuntime::Math_DD_D_Type(), FN_PTR(SharedRuntime::dpow), "POW");
}
#undef FN_PTR
+ case vmIntrinsics::_dsignum:
+ return UseSignumIntrinsic && (Matcher::match_rule_supported(Op_SignumD) ? inline_double_math(id) : false);
+ case vmIntrinsics::_fsignum:
+ return UseSignumIntrinsic && (Matcher::match_rule_supported(Op_SignumF) ? inline_math(id) : false);
+
// These intrinsics are not yet correctly implemented
case vmIntrinsics::_datan2:
return false;
default:
< prev index next >