src/hotspot/share/opto/library_call.cpp
changeset 53041 f15af1e2c683
parent 52979 7384e00d5860
child 53457 e3ed96060992
equal deleted inserted replaced
53040:6aeb6a23fb83 53041:f15af1e2c683
   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()