2965 |
2965 |
2966 // Support for java_lang_invoke_CallSite |
2966 // Support for java_lang_invoke_CallSite |
2967 |
2967 |
2968 int java_lang_invoke_CallSite::_target_offset; |
2968 int java_lang_invoke_CallSite::_target_offset; |
2969 int java_lang_invoke_CallSite::_context_offset; |
2969 int java_lang_invoke_CallSite::_context_offset; |
2970 int java_lang_invoke_CallSite::_default_context_offset; |
|
2971 |
2970 |
2972 void java_lang_invoke_CallSite::compute_offsets() { |
2971 void java_lang_invoke_CallSite::compute_offsets() { |
2973 Klass* k = SystemDictionary::CallSite_klass(); |
2972 Klass* k = SystemDictionary::CallSite_klass(); |
2974 if (k != NULL) { |
2973 if (k != NULL) { |
2975 compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature()); |
2974 compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature()); |
2976 compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::sun_misc_Cleaner_signature()); |
2975 compute_offset(_context_offset, k, vmSymbols::context_name(), |
2977 compute_offset(_default_context_offset, k, |
2976 vmSymbols::java_lang_invoke_MethodHandleNatives_CallSiteContext_signature()); |
2978 vmSymbols::DEFAULT_CONTEXT_name(), vmSymbols::sun_misc_Cleaner_signature(), |
2977 } |
2979 /*is_static=*/true, /*allow_super=*/false); |
2978 } |
2980 } |
2979 |
2981 } |
2980 oop java_lang_invoke_CallSite::context(oop call_site) { |
2982 |
|
2983 oop java_lang_invoke_CallSite::context_volatile(oop call_site) { |
|
2984 assert(java_lang_invoke_CallSite::is_instance(call_site), ""); |
2981 assert(java_lang_invoke_CallSite::is_instance(call_site), ""); |
2985 |
2982 |
2986 oop dep_oop = call_site->obj_field_volatile(_context_offset); |
2983 oop dep_oop = call_site->obj_field(_context_offset); |
2987 return dep_oop; |
2984 return dep_oop; |
2988 } |
2985 } |
2989 |
2986 |
2990 void java_lang_invoke_CallSite::set_context_volatile(oop call_site, oop context) { |
2987 // Support for java_lang_invoke_MethodHandleNatives_CallSiteContext |
2991 assert(java_lang_invoke_CallSite::is_instance(call_site), ""); |
2988 |
2992 call_site->obj_field_put_volatile(_context_offset, context); |
2989 int java_lang_invoke_MethodHandleNatives_CallSiteContext::_vmdependencies_offset; |
2993 } |
2990 |
2994 |
2991 void java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets() { |
2995 bool java_lang_invoke_CallSite::set_context_cas(oop call_site, oop context, oop expected) { |
2992 Klass* k = SystemDictionary::Context_klass(); |
2996 assert(java_lang_invoke_CallSite::is_instance(call_site), ""); |
2993 if (k != NULL) { |
2997 HeapWord* context_addr = call_site->obj_field_addr<HeapWord>(_context_offset); |
2994 CALLSITECONTEXT_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET); |
2998 oop res = oopDesc::atomic_compare_exchange_oop(context, context_addr, expected, true); |
2995 } |
2999 bool success = (res == expected); |
2996 } |
3000 if (success) { |
2997 |
3001 update_barrier_set((void*)context_addr, context); |
2998 nmethodBucket* java_lang_invoke_MethodHandleNatives_CallSiteContext::vmdependencies(oop call_site) { |
3002 } |
2999 assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), ""); |
3003 return success; |
3000 return (nmethodBucket*) (address) call_site->long_field(_vmdependencies_offset); |
3004 } |
3001 } |
3005 |
3002 |
3006 oop java_lang_invoke_CallSite::default_context() { |
3003 void java_lang_invoke_MethodHandleNatives_CallSiteContext::set_vmdependencies(oop call_site, nmethodBucket* context) { |
3007 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::CallSite_klass()); |
3004 assert(java_lang_invoke_MethodHandleNatives_CallSiteContext::is_instance(call_site), ""); |
3008 oop def_context_oop = ik->java_mirror()->obj_field(_default_context_offset); |
3005 call_site->long_field_put(_vmdependencies_offset, (jlong) (address) context); |
3009 assert(!oopDesc::is_null(def_context_oop), ""); |
|
3010 return def_context_oop; |
|
3011 } |
3006 } |
3012 |
3007 |
3013 // Support for java_security_AccessControlContext |
3008 // Support for java_security_AccessControlContext |
3014 |
3009 |
3015 int java_security_AccessControlContext::_context_offset = 0; |
3010 int java_security_AccessControlContext::_context_offset = 0; |
3401 java_lang_invoke_DirectMethodHandle::compute_offsets(); |
3396 java_lang_invoke_DirectMethodHandle::compute_offsets(); |
3402 java_lang_invoke_MemberName::compute_offsets(); |
3397 java_lang_invoke_MemberName::compute_offsets(); |
3403 java_lang_invoke_LambdaForm::compute_offsets(); |
3398 java_lang_invoke_LambdaForm::compute_offsets(); |
3404 java_lang_invoke_MethodType::compute_offsets(); |
3399 java_lang_invoke_MethodType::compute_offsets(); |
3405 java_lang_invoke_CallSite::compute_offsets(); |
3400 java_lang_invoke_CallSite::compute_offsets(); |
|
3401 java_lang_invoke_MethodHandleNatives_CallSiteContext::compute_offsets(); |
3406 java_security_AccessControlContext::compute_offsets(); |
3402 java_security_AccessControlContext::compute_offsets(); |
3407 // Initialize reflection classes. The layouts of these classes |
3403 // Initialize reflection classes. The layouts of these classes |
3408 // changed with the new reflection implementation in JDK 1.4, and |
3404 // changed with the new reflection implementation in JDK 1.4, and |
3409 // since the Universe doesn't know what JDK version it is until this |
3405 // since the Universe doesn't know what JDK version it is until this |
3410 // point we defer computation of these offsets until now. |
3406 // point we defer computation of these offsets until now. |