2950 objArrayOop pts = ptypes(mt);
2951 int count = pts->length();
2952 int slots = 0;
2953 for (int i = 0; i < count; i++) {
2954 BasicType bt = java_lang_Class::as_BasicType(pts->obj_at(i));
2955 slots += type2size[bt];
2956 }
2957 return slots;
2958 }
2959
2960 int java_lang_invoke_MethodType::rtype_slot_count(oop mt) {
2961 BasicType bt = java_lang_Class::as_BasicType(rtype(mt));
2962 return type2size[bt];
2963 }
2964
2965
2966 // Support for java_lang_invoke_CallSite
2967
2968 int java_lang_invoke_CallSite::_target_offset;
2969 int java_lang_invoke_CallSite::_context_offset;
2970 int java_lang_invoke_CallSite::_default_context_offset;
2971
2972 void java_lang_invoke_CallSite::compute_offsets() {
2973 Klass* k = SystemDictionary::CallSite_klass();
2974 if (k != NULL) {
2975 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());
2977 compute_offset(_default_context_offset, k,
2978 vmSymbols::DEFAULT_CONTEXT_name(), vmSymbols::sun_misc_Cleaner_signature(),
2979 /*is_static=*/true, /*allow_super=*/false);
2980 }
2981 }
2982
2983 oop java_lang_invoke_CallSite::context_volatile(oop call_site) {
2984 assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2985
2986 oop dep_oop = call_site->obj_field_volatile(_context_offset);
2987 return dep_oop;
2988 }
2989
2990 void java_lang_invoke_CallSite::set_context_volatile(oop call_site, oop context) {
2991 assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2992 call_site->obj_field_put_volatile(_context_offset, context);
2993 }
2994
2995 bool java_lang_invoke_CallSite::set_context_cas(oop call_site, oop context, oop expected) {
2996 assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2997 HeapWord* context_addr = call_site->obj_field_addr<HeapWord>(_context_offset);
2998 oop res = oopDesc::atomic_compare_exchange_oop(context, context_addr, expected, true);
2999 bool success = (res == expected);
3000 if (success) {
3001 update_barrier_set((void*)context_addr, context);
3002 }
3003 return success;
3004 }
3005
3006 oop java_lang_invoke_CallSite::default_context() {
3007 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::CallSite_klass());
3008 oop def_context_oop = ik->java_mirror()->obj_field(_default_context_offset);
3009 assert(!oopDesc::is_null(def_context_oop), "");
3010 return def_context_oop;
3011 }
3012
3013 // Support for java_security_AccessControlContext
3014
3015 int java_security_AccessControlContext::_context_offset = 0;
3016 int java_security_AccessControlContext::_privilegedContext_offset = 0;
3017 int java_security_AccessControlContext::_isPrivileged_offset = 0;
3018 int java_security_AccessControlContext::_isAuthorized_offset = -1;
3019
3020 void java_security_AccessControlContext::compute_offsets() {
3021 assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
3022 fieldDescriptor fd;
3023 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass());
3024
3025 if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
3026 fatal("Invalid layout of java.security.AccessControlContext");
3027 }
3028 _context_offset = fd.offset();
3029
3030 if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {
3386 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3387 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3388 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3389 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3390
3391 }
3392
3393
3394 // Compute non-hard-coded field offsets of all the classes in this file
3395 void JavaClasses::compute_offsets() {
3396 // java_lang_Class::compute_offsets was called earlier in bootstrap
3397 java_lang_ClassLoader::compute_offsets();
3398 java_lang_Thread::compute_offsets();
3399 java_lang_ThreadGroup::compute_offsets();
3400 java_lang_invoke_MethodHandle::compute_offsets();
3401 java_lang_invoke_DirectMethodHandle::compute_offsets();
3402 java_lang_invoke_MemberName::compute_offsets();
3403 java_lang_invoke_LambdaForm::compute_offsets();
3404 java_lang_invoke_MethodType::compute_offsets();
3405 java_lang_invoke_CallSite::compute_offsets();
3406 java_security_AccessControlContext::compute_offsets();
3407 // Initialize reflection classes. The layouts of these classes
3408 // 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
3410 // point we defer computation of these offsets until now.
3411 java_lang_reflect_AccessibleObject::compute_offsets();
3412 java_lang_reflect_Method::compute_offsets();
3413 java_lang_reflect_Constructor::compute_offsets();
3414 java_lang_reflect_Field::compute_offsets();
3415 java_nio_Buffer::compute_offsets();
3416 sun_reflect_ConstantPool::compute_offsets();
3417 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3418 java_lang_reflect_Parameter::compute_offsets();
3419
3420 // generated interpreter code wants to know about the offsets we just computed:
3421 AbstractAssembler::update_delayed_values();
3422 }
3423
3424 #ifndef PRODUCT
3425
|
2950 objArrayOop pts = ptypes(mt);
2951 int count = pts->length();
2952 int slots = 0;
2953 for (int i = 0; i < count; i++) {
2954 BasicType bt = java_lang_Class::as_BasicType(pts->obj_at(i));
2955 slots += type2size[bt];
2956 }
2957 return slots;
2958 }
2959
2960 int java_lang_invoke_MethodType::rtype_slot_count(oop mt) {
2961 BasicType bt = java_lang_Class::as_BasicType(rtype(mt));
2962 return type2size[bt];
2963 }
2964
2965
2966 // Support for java_lang_invoke_CallSite
2967
2968 int java_lang_invoke_CallSite::_target_offset;
2969 int java_lang_invoke_CallSite::_context_offset;
2970
2971 void java_lang_invoke_CallSite::compute_offsets() {
2972 Klass* k = SystemDictionary::CallSite_klass();
2973 if (k != NULL) {
2974 compute_offset(_target_offset, k, vmSymbols::target_name(), vmSymbols::java_lang_invoke_MethodHandle_signature());
2975 compute_offset(_context_offset, k, vmSymbols::context_name(), vmSymbols::java_lang_invoke_CallSite_Context_signature());
2976 }
2977 }
2978
2979 oop java_lang_invoke_CallSite::context(oop call_site) {
2980 assert(java_lang_invoke_CallSite::is_instance(call_site), "");
2981
2982 oop dep_oop = call_site->obj_field(_context_offset);
2983 return dep_oop;
2984 }
2985
2986 // Support for java_lang_invoke_CallSite_Context
2987
2988 int java_lang_invoke_CallSite_Context::_dependencies_offset;
2989
2990 void java_lang_invoke_CallSite_Context::compute_offsets() {
2991 Klass* k = SystemDictionary::Context_klass();
2992 if (k != NULL) {
2993 compute_offset(_dependencies_offset, k, vmSymbols::dependencies_name(), vmSymbols::long_signature());
2994 }
2995 }
2996
2997 nmethodBucket* java_lang_invoke_CallSite_Context::dependencies(oop call_site) {
2998 assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
2999 return (nmethodBucket*) (address) call_site->long_field(_dependencies_offset);
3000 }
3001
3002 void java_lang_invoke_CallSite_Context::set_dependencies(oop call_site, nmethodBucket* context) {
3003 assert(java_lang_invoke_CallSite_Context::is_instance(call_site), "");
3004 call_site->long_field_put(_dependencies_offset, (jlong) (address) context);
3005 }
3006
3007 // Support for java_security_AccessControlContext
3008
3009 int java_security_AccessControlContext::_context_offset = 0;
3010 int java_security_AccessControlContext::_privilegedContext_offset = 0;
3011 int java_security_AccessControlContext::_isPrivileged_offset = 0;
3012 int java_security_AccessControlContext::_isAuthorized_offset = -1;
3013
3014 void java_security_AccessControlContext::compute_offsets() {
3015 assert(_isPrivileged_offset == 0, "offsets should be initialized only once");
3016 fieldDescriptor fd;
3017 InstanceKlass* ik = InstanceKlass::cast(SystemDictionary::AccessControlContext_klass());
3018
3019 if (!ik->find_local_field(vmSymbols::context_name(), vmSymbols::protectiondomain_signature(), &fd)) {
3020 fatal("Invalid layout of java.security.AccessControlContext");
3021 }
3022 _context_offset = fd.offset();
3023
3024 if (!ik->find_local_field(vmSymbols::privilegedContext_name(), vmSymbols::accesscontrolcontext_signature(), &fd)) {
3380 java_lang_AssertionStatusDirectives::classEnabled_offset = java_lang_AssertionStatusDirectives::hc_classEnabled_offset * x + header;
3381 java_lang_AssertionStatusDirectives::packages_offset = java_lang_AssertionStatusDirectives::hc_packages_offset * x + header;
3382 java_lang_AssertionStatusDirectives::packageEnabled_offset = java_lang_AssertionStatusDirectives::hc_packageEnabled_offset * x + header;
3383 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3384
3385 }
3386
3387
3388 // Compute non-hard-coded field offsets of all the classes in this file
3389 void JavaClasses::compute_offsets() {
3390 // java_lang_Class::compute_offsets was called earlier in bootstrap
3391 java_lang_ClassLoader::compute_offsets();
3392 java_lang_Thread::compute_offsets();
3393 java_lang_ThreadGroup::compute_offsets();
3394 java_lang_invoke_MethodHandle::compute_offsets();
3395 java_lang_invoke_DirectMethodHandle::compute_offsets();
3396 java_lang_invoke_MemberName::compute_offsets();
3397 java_lang_invoke_LambdaForm::compute_offsets();
3398 java_lang_invoke_MethodType::compute_offsets();
3399 java_lang_invoke_CallSite::compute_offsets();
3400 java_lang_invoke_CallSite_Context::compute_offsets();
3401 java_security_AccessControlContext::compute_offsets();
3402 // Initialize reflection classes. The layouts of these classes
3403 // changed with the new reflection implementation in JDK 1.4, and
3404 // since the Universe doesn't know what JDK version it is until this
3405 // point we defer computation of these offsets until now.
3406 java_lang_reflect_AccessibleObject::compute_offsets();
3407 java_lang_reflect_Method::compute_offsets();
3408 java_lang_reflect_Constructor::compute_offsets();
3409 java_lang_reflect_Field::compute_offsets();
3410 java_nio_Buffer::compute_offsets();
3411 sun_reflect_ConstantPool::compute_offsets();
3412 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3413 java_lang_reflect_Parameter::compute_offsets();
3414
3415 // generated interpreter code wants to know about the offsets we just computed:
3416 AbstractAssembler::update_delayed_values();
3417 }
3418
3419 #ifndef PRODUCT
3420
|