src/hotspot/share/opto/library_call.cpp
changeset 47587 bf73ca31add9
parent 47580 96392e113a0a
child 48371 291020144f22
child 48396 3c9975e46464
--- a/src/hotspot/share/opto/library_call.cpp	Wed Oct 04 16:44:45 2017 +0200
+++ b/src/hotspot/share/opto/library_call.cpp	Wed Oct 04 11:52:07 2017 -0700
@@ -231,6 +231,7 @@
   bool inline_math_addExactL(bool is_increment);
   bool inline_math_multiplyExactI();
   bool inline_math_multiplyExactL();
+  bool inline_math_multiplyHigh();
   bool inline_math_negateExactI();
   bool inline_math_negateExactL();
   bool inline_math_subtractExactI(bool is_decrement);
@@ -549,6 +550,7 @@
   case vmIntrinsics::_incrementExactL:          return inline_math_addExactL(true /* increment */);
   case vmIntrinsics::_multiplyExactI:           return inline_math_multiplyExactI();
   case vmIntrinsics::_multiplyExactL:           return inline_math_multiplyExactL();
+  case vmIntrinsics::_multiplyHigh:             return inline_math_multiplyHigh();
   case vmIntrinsics::_negateExactI:             return inline_math_negateExactI();
   case vmIntrinsics::_negateExactL:             return inline_math_negateExactL();
   case vmIntrinsics::_subtractExactI:           return inline_math_subtractExactI(false /* subtract */);
@@ -1897,6 +1899,11 @@
   return inline_math_overflow<OverflowMulLNode>(argument(0), argument(2));
 }
 
+bool LibraryCallKit::inline_math_multiplyHigh() {
+  set_result(_gvn.transform(new MulHiLNode(argument(0), argument(2))));
+  return true;
+}
+
 Node*
 LibraryCallKit::generate_min_max(vmIntrinsics::ID id, Node* x0, Node* y0) {
   // These are the candidate return value: