2306
2307 int java_lang_invoke_MethodHandle::_type_offset;
2308 int java_lang_invoke_MethodHandle::_vmtarget_offset;
2309 int java_lang_invoke_MethodHandle::_vmentry_offset;
2310 int java_lang_invoke_MethodHandle::_vmslots_offset;
2311
2312 int java_lang_invoke_MemberName::_clazz_offset;
2313 int java_lang_invoke_MemberName::_name_offset;
2314 int java_lang_invoke_MemberName::_type_offset;
2315 int java_lang_invoke_MemberName::_flags_offset;
2316 int java_lang_invoke_MemberName::_vmtarget_offset;
2317 int java_lang_invoke_MemberName::_vmindex_offset;
2318
2319 int java_lang_invoke_DirectMethodHandle::_vmindex_offset;
2320
2321 int java_lang_invoke_BoundMethodHandle::_argument_offset;
2322 int java_lang_invoke_BoundMethodHandle::_vmargslot_offset;
2323
2324 int java_lang_invoke_AdapterMethodHandle::_conversion_offset;
2325
2326 void java_lang_invoke_MethodHandle::compute_offsets() {
2327 klassOop k = SystemDictionary::MethodHandle_klass();
2328 if (k != NULL && EnableInvokeDynamic) {
2329 bool allow_super = false;
2330 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
2331 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super);
2332 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super);
2333
2334 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots.
2335 // It is optional pending experiments to keep or toss.
2336 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), allow_super);
2337 }
2338 }
2339
2340 void java_lang_invoke_MemberName::compute_offsets() {
2341 klassOop k = SystemDictionary::MemberName_klass();
2342 if (k != NULL && EnableInvokeDynamic) {
2343 compute_offset(_clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
2344 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
2345 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::object_signature());
2354 if (k != NULL && EnableInvokeDynamic) {
2355 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature(), true);
2356 }
2357 }
2358
2359 void java_lang_invoke_BoundMethodHandle::compute_offsets() {
2360 klassOop k = SystemDictionary::BoundMethodHandle_klass();
2361 if (k != NULL && EnableInvokeDynamic) {
2362 compute_offset(_vmargslot_offset, k, vmSymbols::vmargslot_name(), vmSymbols::int_signature(), true);
2363 compute_offset(_argument_offset, k, vmSymbols::argument_name(), vmSymbols::object_signature(), true);
2364 }
2365 }
2366
2367 void java_lang_invoke_AdapterMethodHandle::compute_offsets() {
2368 klassOop k = SystemDictionary::AdapterMethodHandle_klass();
2369 if (k != NULL && EnableInvokeDynamic) {
2370 compute_offset(_conversion_offset, k, vmSymbols::conversion_name(), vmSymbols::int_signature(), true);
2371 }
2372 }
2373
2374 oop java_lang_invoke_MethodHandle::type(oop mh) {
2375 return mh->obj_field(_type_offset);
2376 }
2377
2378 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2379 mh->obj_field_put(_type_offset, mtype);
2380 }
2381
2382 int java_lang_invoke_MethodHandle::vmslots(oop mh) {
2383 int vmslots_offset = _vmslots_offset;
2384 if (vmslots_offset != 0) {
2385 #ifdef ASSERT
2386 int x = mh->int_field(vmslots_offset);
2387 int y = compute_vmslots(mh);
2388 assert(x == y, "correct hoisted value");
2389 #endif
2390 return mh->int_field(vmslots_offset);
2391 } else {
2392 return compute_vmslots(mh);
2393 }
3014 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3015
3016 }
3017
3018
3019 // Compute non-hard-coded field offsets of all the classes in this file
3020 void JavaClasses::compute_offsets() {
3021
3022 java_lang_Class::compute_offsets();
3023 java_lang_Thread::compute_offsets();
3024 java_lang_ThreadGroup::compute_offsets();
3025 if (EnableInvokeDynamic) {
3026 java_lang_invoke_MethodHandle::compute_offsets();
3027 java_lang_invoke_MemberName::compute_offsets();
3028 java_lang_invoke_DirectMethodHandle::compute_offsets();
3029 java_lang_invoke_BoundMethodHandle::compute_offsets();
3030 java_lang_invoke_AdapterMethodHandle::compute_offsets();
3031 java_lang_invoke_MethodType::compute_offsets();
3032 java_lang_invoke_MethodTypeForm::compute_offsets();
3033 java_lang_invoke_CallSite::compute_offsets();
3034 }
3035 java_security_AccessControlContext::compute_offsets();
3036 // Initialize reflection classes. The layouts of these classes
3037 // changed with the new reflection implementation in JDK 1.4, and
3038 // since the Universe doesn't know what JDK version it is until this
3039 // point we defer computation of these offsets until now.
3040 java_lang_reflect_AccessibleObject::compute_offsets();
3041 java_lang_reflect_Method::compute_offsets();
3042 java_lang_reflect_Constructor::compute_offsets();
3043 java_lang_reflect_Field::compute_offsets();
3044 if (JDK_Version::is_gte_jdk14x_version()) {
3045 java_nio_Buffer::compute_offsets();
3046 }
3047 if (JDK_Version::is_gte_jdk15x_version()) {
3048 sun_reflect_ConstantPool::compute_offsets();
3049 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3050 }
3051 sun_misc_AtomicLongCSImpl::compute_offsets();
3052
3053 // generated interpreter code wants to know about the offsets we just computed:
|
2306
2307 int java_lang_invoke_MethodHandle::_type_offset;
2308 int java_lang_invoke_MethodHandle::_vmtarget_offset;
2309 int java_lang_invoke_MethodHandle::_vmentry_offset;
2310 int java_lang_invoke_MethodHandle::_vmslots_offset;
2311
2312 int java_lang_invoke_MemberName::_clazz_offset;
2313 int java_lang_invoke_MemberName::_name_offset;
2314 int java_lang_invoke_MemberName::_type_offset;
2315 int java_lang_invoke_MemberName::_flags_offset;
2316 int java_lang_invoke_MemberName::_vmtarget_offset;
2317 int java_lang_invoke_MemberName::_vmindex_offset;
2318
2319 int java_lang_invoke_DirectMethodHandle::_vmindex_offset;
2320
2321 int java_lang_invoke_BoundMethodHandle::_argument_offset;
2322 int java_lang_invoke_BoundMethodHandle::_vmargslot_offset;
2323
2324 int java_lang_invoke_AdapterMethodHandle::_conversion_offset;
2325
2326 int java_lang_invoke_CountingMethodHandle::_vmcount_offset;
2327
2328 void java_lang_invoke_MethodHandle::compute_offsets() {
2329 klassOop k = SystemDictionary::MethodHandle_klass();
2330 if (k != NULL && EnableInvokeDynamic) {
2331 bool allow_super = false;
2332 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::java_lang_invoke_MethodType_signature(), allow_super);
2333 compute_offset(_vmtarget_offset, k, vmSymbols::vmtarget_name(), vmSymbols::object_signature(), allow_super);
2334 compute_offset(_vmentry_offset, k, vmSymbols::vmentry_name(), vmSymbols::machine_word_signature(), allow_super);
2335
2336 // Note: MH.vmslots (if it is present) is a hoisted copy of MH.type.form.vmslots.
2337 // It is optional pending experiments to keep or toss.
2338 compute_optional_offset(_vmslots_offset, k, vmSymbols::vmslots_name(), vmSymbols::int_signature(), allow_super);
2339 }
2340 }
2341
2342 void java_lang_invoke_MemberName::compute_offsets() {
2343 klassOop k = SystemDictionary::MemberName_klass();
2344 if (k != NULL && EnableInvokeDynamic) {
2345 compute_offset(_clazz_offset, k, vmSymbols::clazz_name(), vmSymbols::class_signature());
2346 compute_offset(_name_offset, k, vmSymbols::name_name(), vmSymbols::string_signature());
2347 compute_offset(_type_offset, k, vmSymbols::type_name(), vmSymbols::object_signature());
2356 if (k != NULL && EnableInvokeDynamic) {
2357 compute_offset(_vmindex_offset, k, vmSymbols::vmindex_name(), vmSymbols::int_signature(), true);
2358 }
2359 }
2360
2361 void java_lang_invoke_BoundMethodHandle::compute_offsets() {
2362 klassOop k = SystemDictionary::BoundMethodHandle_klass();
2363 if (k != NULL && EnableInvokeDynamic) {
2364 compute_offset(_vmargslot_offset, k, vmSymbols::vmargslot_name(), vmSymbols::int_signature(), true);
2365 compute_offset(_argument_offset, k, vmSymbols::argument_name(), vmSymbols::object_signature(), true);
2366 }
2367 }
2368
2369 void java_lang_invoke_AdapterMethodHandle::compute_offsets() {
2370 klassOop k = SystemDictionary::AdapterMethodHandle_klass();
2371 if (k != NULL && EnableInvokeDynamic) {
2372 compute_offset(_conversion_offset, k, vmSymbols::conversion_name(), vmSymbols::int_signature(), true);
2373 }
2374 }
2375
2376 void java_lang_invoke_CountingMethodHandle::compute_offsets() {
2377 klassOop k = SystemDictionary::CountingMethodHandle_klass();
2378 if (k != NULL && EnableInvokeDynamic) {
2379 compute_offset(_vmcount_offset, k, vmSymbols::vmcount_name(), vmSymbols::int_signature(), true);
2380 }
2381 }
2382
2383 int java_lang_invoke_CountingMethodHandle::vmcount(oop mh) {
2384 assert(is_instance(mh), "CMH only");
2385 return mh->int_field(_vmcount_offset);
2386 }
2387
2388 void java_lang_invoke_CountingMethodHandle::set_vmcount(oop mh, int count) {
2389 assert(is_instance(mh), "CMH only");
2390 mh->int_field_put(_vmcount_offset, count);
2391 }
2392
2393 oop java_lang_invoke_MethodHandle::type(oop mh) {
2394 return mh->obj_field(_type_offset);
2395 }
2396
2397 void java_lang_invoke_MethodHandle::set_type(oop mh, oop mtype) {
2398 mh->obj_field_put(_type_offset, mtype);
2399 }
2400
2401 int java_lang_invoke_MethodHandle::vmslots(oop mh) {
2402 int vmslots_offset = _vmslots_offset;
2403 if (vmslots_offset != 0) {
2404 #ifdef ASSERT
2405 int x = mh->int_field(vmslots_offset);
2406 int y = compute_vmslots(mh);
2407 assert(x == y, "correct hoisted value");
2408 #endif
2409 return mh->int_field(vmslots_offset);
2410 } else {
2411 return compute_vmslots(mh);
2412 }
3033 java_lang_AssertionStatusDirectives::deflt_offset = java_lang_AssertionStatusDirectives::hc_deflt_offset * x + header;
3034
3035 }
3036
3037
3038 // Compute non-hard-coded field offsets of all the classes in this file
3039 void JavaClasses::compute_offsets() {
3040
3041 java_lang_Class::compute_offsets();
3042 java_lang_Thread::compute_offsets();
3043 java_lang_ThreadGroup::compute_offsets();
3044 if (EnableInvokeDynamic) {
3045 java_lang_invoke_MethodHandle::compute_offsets();
3046 java_lang_invoke_MemberName::compute_offsets();
3047 java_lang_invoke_DirectMethodHandle::compute_offsets();
3048 java_lang_invoke_BoundMethodHandle::compute_offsets();
3049 java_lang_invoke_AdapterMethodHandle::compute_offsets();
3050 java_lang_invoke_MethodType::compute_offsets();
3051 java_lang_invoke_MethodTypeForm::compute_offsets();
3052 java_lang_invoke_CallSite::compute_offsets();
3053 java_lang_invoke_CountingMethodHandle::compute_offsets();
3054 }
3055 java_security_AccessControlContext::compute_offsets();
3056 // Initialize reflection classes. The layouts of these classes
3057 // changed with the new reflection implementation in JDK 1.4, and
3058 // since the Universe doesn't know what JDK version it is until this
3059 // point we defer computation of these offsets until now.
3060 java_lang_reflect_AccessibleObject::compute_offsets();
3061 java_lang_reflect_Method::compute_offsets();
3062 java_lang_reflect_Constructor::compute_offsets();
3063 java_lang_reflect_Field::compute_offsets();
3064 if (JDK_Version::is_gte_jdk14x_version()) {
3065 java_nio_Buffer::compute_offsets();
3066 }
3067 if (JDK_Version::is_gte_jdk15x_version()) {
3068 sun_reflect_ConstantPool::compute_offsets();
3069 sun_reflect_UnsafeStaticFieldAccessorImpl::compute_offsets();
3070 }
3071 sun_misc_AtomicLongCSImpl::compute_offsets();
3072
3073 // generated interpreter code wants to know about the offsets we just computed:
|