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 } |