hotspot/src/share/vm/opto/library_call.cpp
changeset 31856 614d6786ba55
parent 31587 e48945b7849c
child 31867 5d39059535ba
equal deleted inserted replaced
31855:1550546a6e8e 31856:614d6786ba55
   223   bool inline_math_subtractExactL(bool is_decrement);
   223   bool inline_math_subtractExactL(bool is_decrement);
   224   bool inline_exp();
   224   bool inline_exp();
   225   bool inline_pow();
   225   bool inline_pow();
   226   Node* finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName);
   226   Node* finish_pow_exp(Node* result, Node* x, Node* y, const TypeFunc* call_type, address funcAddr, const char* funcName);
   227   bool inline_min_max(vmIntrinsics::ID id);
   227   bool inline_min_max(vmIntrinsics::ID id);
       
   228   bool inline_notify(vmIntrinsics::ID id);
   228   Node* generate_min_max(vmIntrinsics::ID id, Node* x, Node* y);
   229   Node* generate_min_max(vmIntrinsics::ID id, Node* x, Node* y);
   229   // This returns Type::AnyPtr, RawPtr, or OopPtr.
   230   // This returns Type::AnyPtr, RawPtr, or OopPtr.
   230   int classify_unsafe_addr(Node* &base, Node* &offset);
   231   int classify_unsafe_addr(Node* &base, Node* &offset);
   231   Node* make_unsafe_address(Node* base, Node* offset);
   232   Node* make_unsafe_address(Node* base, Node* offset);
   232   // Helper for inline_unsafe_access.
   233   // Helper for inline_unsafe_access.
   773   case vmIntrinsics::_dlog10:
   774   case vmIntrinsics::_dlog10:
   774   case vmIntrinsics::_dpow:                     return inline_math_native(intrinsic_id());
   775   case vmIntrinsics::_dpow:                     return inline_math_native(intrinsic_id());
   775 
   776 
   776   case vmIntrinsics::_min:
   777   case vmIntrinsics::_min:
   777   case vmIntrinsics::_max:                      return inline_min_max(intrinsic_id());
   778   case vmIntrinsics::_max:                      return inline_min_max(intrinsic_id());
       
   779 
       
   780   case vmIntrinsics::_notify:
       
   781   case vmIntrinsics::_notifyAll:
       
   782     if (InlineNotify) {
       
   783       return inline_notify(intrinsic_id());
       
   784     }
       
   785     return false;
   778 
   786 
   779   case vmIntrinsics::_addExactI:                return inline_math_addExactI(false /* add */);
   787   case vmIntrinsics::_addExactI:                return inline_math_addExactI(false /* add */);
   780   case vmIntrinsics::_addExactL:                return inline_math_addExactL(false /* add */);
   788   case vmIntrinsics::_addExactL:                return inline_math_addExactL(false /* add */);
   781   case vmIntrinsics::_decrementExactI:          return inline_math_subtractExactI(true /* decrement */);
   789   case vmIntrinsics::_decrementExactI:          return inline_math_subtractExactI(true /* decrement */);
   782   case vmIntrinsics::_decrementExactL:          return inline_math_subtractExactL(true /* decrement */);
   790   case vmIntrinsics::_decrementExactL:          return inline_math_subtractExactL(true /* decrement */);
  2073           || n->is_Proj()       // parameter or return value
  2081           || n->is_Proj()       // parameter or return value
  2074           || n->is_Phi()        // local of some sort
  2082           || n->is_Phi()        // local of some sort
  2075           );
  2083           );
  2076 }
  2084 }
  2077 
  2085 
       
  2086 //----------------------------inline_notify-----------------------------------*
       
  2087 bool LibraryCallKit::inline_notify(vmIntrinsics::ID id) {
       
  2088   const TypeFunc* ftype = OptoRuntime::monitor_notify_Type();
       
  2089   address func;
       
  2090   if (id == vmIntrinsics::_notify) {
       
  2091     func = OptoRuntime::monitor_notify_Java();
       
  2092   } else {
       
  2093     func = OptoRuntime::monitor_notifyAll_Java();
       
  2094   }
       
  2095   Node* call = make_runtime_call(RC_NO_LEAF, ftype, func, NULL, TypeRawPtr::BOTTOM, argument(0));
       
  2096   make_slow_call_ex(call, env()->Throwable_klass(), false);
       
  2097   return true;
       
  2098 }
       
  2099 
       
  2100 
  2078 //----------------------------inline_min_max-----------------------------------
  2101 //----------------------------inline_min_max-----------------------------------
  2079 bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) {
  2102 bool LibraryCallKit::inline_min_max(vmIntrinsics::ID id) {
  2080   set_result(generate_min_max(id, argument(0), argument(1)));
  2103   set_result(generate_min_max(id, argument(0), argument(1)));
  2081   return true;
  2104   return true;
  2082 }
  2105 }