8187684: Intrinsify Math.multiplyHigh(long, long)

Reviewed-by: kvn, aph, lucy
This commit is contained in:
Dmitrij Pochepko 2017-10-04 11:52:07 -07:00
parent f651176392
commit 949f677957
4 changed files with 13 additions and 0 deletions

View file

@ -231,6 +231,7 @@ class LibraryCallKit : public GraphKit {
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 @@ bool LibraryCallKit::try_to_inline(int predicate) {
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 @@ bool LibraryCallKit::inline_math_multiplyExactL() {
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: