323 bool inline_montgomeryMultiply(); |
323 bool inline_montgomeryMultiply(); |
324 bool inline_montgomerySquare(); |
324 bool inline_montgomerySquare(); |
325 bool inline_vectorizedMismatch(); |
325 bool inline_vectorizedMismatch(); |
326 bool inline_fma(vmIntrinsics::ID id); |
326 bool inline_fma(vmIntrinsics::ID id); |
327 bool inline_character_compare(vmIntrinsics::ID id); |
327 bool inline_character_compare(vmIntrinsics::ID id); |
|
328 bool inline_fp_min_max(vmIntrinsics::ID id); |
328 |
329 |
329 bool inline_profileBoolean(); |
330 bool inline_profileBoolean(); |
330 bool inline_isCompileConstant(); |
331 bool inline_isCompileConstant(); |
331 void clear_upper_avx() { |
332 void clear_upper_avx() { |
332 #ifdef X86 |
333 #ifdef X86 |
871 case vmIntrinsics::_isDigit: |
872 case vmIntrinsics::_isDigit: |
872 case vmIntrinsics::_isLowerCase: |
873 case vmIntrinsics::_isLowerCase: |
873 case vmIntrinsics::_isUpperCase: |
874 case vmIntrinsics::_isUpperCase: |
874 case vmIntrinsics::_isWhitespace: |
875 case vmIntrinsics::_isWhitespace: |
875 return inline_character_compare(intrinsic_id()); |
876 return inline_character_compare(intrinsic_id()); |
|
877 |
|
878 case vmIntrinsics::_maxF: |
|
879 case vmIntrinsics::_minF: |
|
880 case vmIntrinsics::_maxD: |
|
881 case vmIntrinsics::_minD: |
|
882 return inline_fp_min_max(intrinsic_id()); |
876 |
883 |
877 default: |
884 default: |
878 // If you get here, it may be that someone has added a new intrinsic |
885 // If you get here, it may be that someone has added a new intrinsic |
879 // to the list in vmSymbols.hpp without implementing it here. |
886 // to the list in vmSymbols.hpp without implementing it here. |
880 #ifndef PRODUCT |
887 #ifndef PRODUCT |
6586 |
6593 |
6587 set_result(_gvn.transform(n)); |
6594 set_result(_gvn.transform(n)); |
6588 return true; |
6595 return true; |
6589 } |
6596 } |
6590 |
6597 |
|
6598 //------------------------------inline_fp_min_max------------------------------ |
|
6599 bool LibraryCallKit::inline_fp_min_max(vmIntrinsics::ID id) { |
|
6600 Node *a = NULL; |
|
6601 Node *b = NULL; |
|
6602 Node *n = NULL; |
|
6603 switch (id) { |
|
6604 case vmIntrinsics::_maxF: |
|
6605 case vmIntrinsics::_minF: |
|
6606 assert(callee()->signature()->size() == 2, "minF/maxF has 2 parameters of size 1 each."); |
|
6607 a = argument(0); |
|
6608 b = argument(1); |
|
6609 break; |
|
6610 case vmIntrinsics::_maxD: |
|
6611 case vmIntrinsics::_minD: |
|
6612 assert(callee()->signature()->size() == 4, "minD/maxD has 2 parameters of size 2 each."); |
|
6613 a = round_double_node(argument(0)); |
|
6614 b = round_double_node(argument(2)); |
|
6615 break; |
|
6616 default: |
|
6617 fatal_unexpected_iid(id); |
|
6618 break; |
|
6619 } |
|
6620 if (a->is_Con() || b->is_Con()) { |
|
6621 return false; |
|
6622 } |
|
6623 switch (id) { |
|
6624 case vmIntrinsics::_maxF: n = new MaxFNode(a, b); break; |
|
6625 case vmIntrinsics::_minF: n = new MinFNode(a, b); break; |
|
6626 case vmIntrinsics::_maxD: n = new MaxDNode(a, b); break; |
|
6627 case vmIntrinsics::_minD: n = new MinDNode(a, b); break; |
|
6628 default: fatal_unexpected_iid(id); break; |
|
6629 } |
|
6630 set_result(_gvn.transform(n)); |
|
6631 return true; |
|
6632 } |
|
6633 |
6591 bool LibraryCallKit::inline_profileBoolean() { |
6634 bool LibraryCallKit::inline_profileBoolean() { |
6592 Node* counts = argument(1); |
6635 Node* counts = argument(1); |
6593 const TypeAryPtr* ary = NULL; |
6636 const TypeAryPtr* ary = NULL; |
6594 ciArray* aobj = NULL; |
6637 ciArray* aobj = NULL; |
6595 if (counts->is_Con() |
6638 if (counts->is_Con() |