1.1 --- a/src/cpu/x86/vm/methodHandles_x86.cpp Fri Aug 31 16:39:35 2012 -0700 1.2 +++ b/src/cpu/x86/vm/methodHandles_x86.cpp Sat Sep 01 13:25:18 2012 -0400 1.3 @@ -47,9 +47,9 @@ 1.4 1.5 void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg) { 1.6 if (VerifyMethodHandles) 1.7 - verify_klass(_masm, klass_reg, SystemDictionaryHandles::Class_klass(), 1.8 + verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class), 1.9 "MH argument is a Class"); 1.10 - __ load_heap_oop(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes())); 1.11 + __ movptr(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes())); 1.12 } 1.13 1.14 #ifdef ASSERT 1.15 @@ -64,12 +64,10 @@ 1.16 1.17 #ifdef ASSERT 1.18 void MethodHandles::verify_klass(MacroAssembler* _masm, 1.19 - Register obj, KlassHandle klass, 1.20 + Register obj, SystemDictionary::WKID klass_id, 1.21 const char* error_message) { 1.22 - oop* klass_addr = klass.raw_value(); 1.23 - assert(klass_addr >= SystemDictionaryHandles::Object_klass().raw_value() && 1.24 - klass_addr <= SystemDictionaryHandles::Long_klass().raw_value(), 1.25 - "must be one of the SystemDictionaryHandles"); 1.26 + Klass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id); 1.27 + KlassHandle klass = SystemDictionary::well_known_klass(klass_id); 1.28 Register temp = rdi; 1.29 Register temp2 = noreg; 1.30 LP64_ONLY(temp2 = rscratch1); // used by MacroAssembler::cmpptr 1.31 @@ -137,12 +135,12 @@ 1.32 // Is a cmpl faster? 1.33 __ cmpb(Address(rthread, JavaThread::interp_only_mode_offset()), 0); 1.34 __ jccb(Assembler::zero, run_compiled_code); 1.35 - __ jmp(Address(method, methodOopDesc::interpreter_entry_offset())); 1.36 + __ jmp(Address(method, Method::interpreter_entry_offset())); 1.37 __ BIND(run_compiled_code); 1.38 } 1.39 1.40 - const ByteSize entry_offset = for_compiler_entry ? methodOopDesc::from_compiled_offset() : 1.41 - methodOopDesc::from_interpreted_offset(); 1.42 + const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() : 1.43 + Method::from_interpreted_offset(); 1.44 __ jmp(Address(method, entry_offset)); 1.45 } 1.46 1.47 @@ -165,16 +163,15 @@ 1.48 __ verify_oop(method_temp); 1.49 __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes()))); 1.50 __ verify_oop(method_temp); 1.51 - // the following assumes that a methodOop is normally compressed in the vmtarget field: 1.52 - __ load_heap_oop(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); 1.53 - __ verify_oop(method_temp); 1.54 + // the following assumes that a Method* is normally compressed in the vmtarget field: 1.55 + __ movptr(method_temp, Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes()))); 1.56 1.57 if (VerifyMethodHandles && !for_compiler_entry) { 1.58 // make sure recv is already on stack 1.59 __ load_sized_value(temp2, 1.60 - Address(method_temp, methodOopDesc::size_of_parameters_offset()), 1.61 + Address(method_temp, Method::size_of_parameters_offset()), 1.62 sizeof(u2), /*is_signed*/ false); 1.63 - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); 1.64 + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); 1.65 Label L; 1.66 __ cmpptr(recv, __ argument_address(temp2, -1)); 1.67 __ jcc(Assembler::equal, L); 1.68 @@ -203,7 +200,7 @@ 1.69 } 1.70 1.71 // rsi/r13: sender SP (must preserve; see prepare_to_jump_from_interpreted) 1.72 - // rbx: methodOop 1.73 + // rbx: Method* 1.74 // rdx: argument locator (parameter slot count, added to rsp) 1.75 // rcx: used as temp to hold mh or receiver 1.76 // rax, rdi: garbage temps, blown away 1.77 @@ -221,14 +218,14 @@ 1.78 if (VerifyMethodHandles) { 1.79 Label L; 1.80 BLOCK_COMMENT("verify_intrinsic_id {"); 1.81 - __ cmpb(Address(rbx_method, methodOopDesc::intrinsic_id_offset_in_bytes()), (int) iid); 1.82 + __ cmpb(Address(rbx_method, Method::intrinsic_id_offset_in_bytes()), (int) iid); 1.83 __ jcc(Assembler::equal, L); 1.84 if (iid == vmIntrinsics::_linkToVirtual || 1.85 iid == vmIntrinsics::_linkToSpecial) { 1.86 // could do this for all kinds, but would explode assembly code size 1.87 - trace_method_handle(_masm, "bad methodOop::intrinsic_id"); 1.88 + trace_method_handle(_masm, "bad Method*::intrinsic_id"); 1.89 } 1.90 - __ STOP("bad methodOop::intrinsic_id"); 1.91 + __ STOP("bad Method*::intrinsic_id"); 1.92 __ bind(L); 1.93 BLOCK_COMMENT("} verify_intrinsic_id"); 1.94 } 1.95 @@ -239,9 +236,9 @@ 1.96 assert(ref_kind != 0 || iid == vmIntrinsics::_invokeBasic, "must be _invokeBasic or a linkTo intrinsic"); 1.97 if (ref_kind == 0 || MethodHandles::ref_kind_has_receiver(ref_kind)) { 1.98 __ load_sized_value(rdx_argp, 1.99 - Address(rbx_method, methodOopDesc::size_of_parameters_offset()), 1.100 + Address(rbx_method, Method::size_of_parameters_offset()), 1.101 sizeof(u2), /*is_signed*/ false); 1.102 - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); 1.103 + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); 1.104 rdx_first_arg_addr = __ argument_address(rdx_argp, -1); 1.105 } else { 1.106 DEBUG_ONLY(rdx_argp = noreg); 1.107 @@ -343,7 +340,7 @@ 1.108 // The method is a member invoker used by direct method handles. 1.109 if (VerifyMethodHandles) { 1.110 // make sure the trailing argument really is a MemberName (caller responsibility) 1.111 - verify_klass(_masm, member_reg, SystemDictionaryHandles::MemberName_klass(), 1.112 + verify_klass(_masm, member_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_invoke_MemberName), 1.113 "MemberName required for invokeVirtual etc."); 1.114 } 1.115 1.116 @@ -401,7 +398,7 @@ 1.117 if (VerifyMethodHandles) { 1.118 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); 1.119 } 1.120 - __ load_heap_oop(rbx_method, member_vmtarget); 1.121 + __ movptr(rbx_method, member_vmtarget); 1.122 method_is_live = true; 1.123 break; 1.124 1.125 @@ -409,7 +406,7 @@ 1.126 if (VerifyMethodHandles) { 1.127 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); 1.128 } 1.129 - __ load_heap_oop(rbx_method, member_vmtarget); 1.130 + __ movptr(rbx_method, member_vmtarget); 1.131 method_is_live = true; 1.132 break; 1.133 1.134 @@ -437,7 +434,7 @@ 1.135 // Note: The verifier invariants allow us to ignore MemberName.clazz and vmtarget 1.136 // at this point. And VerifyMethodHandles has already checked clazz, if needed. 1.137 1.138 - // get target methodOop & entry point 1.139 + // get target Method* & entry point 1.140 __ lookup_virtual_method(temp1_recv_klass, temp2_index, rbx_method); 1.141 method_is_live = true; 1.142 break; 1.143 @@ -653,4 +650,3 @@ 1.144 BLOCK_COMMENT("} trace_method_handle"); 1.145 } 1.146 #endif //PRODUCT 1.147 -