hotspot/src/share/vm/classfile/javaClasses.cpp
changeset 31037 01a5c5fa5681
parent 30310 522ea430079f
child 31038 2fd2fdc6a70a
equal deleted inserted replaced
31036:e3040e4dde63 31037:01a5c5fa5681
  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.