1.1 --- a/src/cpu/sparc/vm/methodHandles_sparc.cpp Fri Aug 31 16:39:35 2012 -0700 1.2 +++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp Sat Sep 01 13:25:18 2012 -0400 1.3 @@ -46,9 +46,9 @@ 1.4 1.5 void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg, Register temp_reg, Register temp2_reg) { 1.6 if (VerifyMethodHandles) 1.7 - verify_klass(_masm, klass_reg, SystemDictionaryHandles::Class_klass(), temp_reg, temp2_reg, 1.8 + verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class), temp_reg, temp2_reg, 1.9 "MH argument is a Class"); 1.10 - __ load_heap_oop(Address(klass_reg, java_lang_Class::klass_offset_in_bytes()), klass_reg); 1.11 + __ ld_ptr(Address(klass_reg, java_lang_Class::klass_offset_in_bytes()), klass_reg); 1.12 } 1.13 1.14 #ifdef ASSERT 1.15 @@ -63,13 +63,11 @@ 1.16 1.17 #ifdef ASSERT 1.18 void MethodHandles::verify_klass(MacroAssembler* _masm, 1.19 - Register obj_reg, KlassHandle klass, 1.20 + Register obj_reg, SystemDictionary::WKID klass_id, 1.21 Register temp_reg, Register temp2_reg, 1.22 const char* error_message) { 1.23 - oop* klass_addr = klass.raw_value(); 1.24 - assert(klass_addr >= SystemDictionaryHandles::Object_klass().raw_value() && 1.25 - klass_addr <= SystemDictionaryHandles::Long_klass().raw_value(), 1.26 - "must be one of the SystemDictionaryHandles"); 1.27 + Klass** klass_addr = SystemDictionary::well_known_klass_addr(klass_id); 1.28 + KlassHandle klass = SystemDictionary::well_known_klass(klass_id); 1.29 bool did_save = false; 1.30 if (temp_reg == noreg || temp2_reg == noreg) { 1.31 temp_reg = L1; 1.32 @@ -83,12 +81,12 @@ 1.33 __ verify_oop(obj_reg); 1.34 __ br_null_short(obj_reg, Assembler::pn, L_bad); 1.35 __ load_klass(obj_reg, temp_reg); 1.36 - __ set(ExternalAddress(klass_addr), temp2_reg); 1.37 + __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg); 1.38 __ ld_ptr(Address(temp2_reg, 0), temp2_reg); 1.39 __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok); 1.40 intptr_t super_check_offset = klass->super_check_offset(); 1.41 __ ld_ptr(Address(temp_reg, super_check_offset), temp_reg); 1.42 - __ set(ExternalAddress(klass_addr), temp2_reg); 1.43 + __ set(ExternalAddress((Metadata**)klass_addr), temp2_reg); 1.44 __ ld_ptr(Address(temp2_reg, 0), temp2_reg); 1.45 __ cmp_and_brx_short(temp_reg, temp2_reg, Assembler::equal, Assembler::pt, L_ok); 1.46 __ BIND(L_bad); 1.47 @@ -123,7 +121,6 @@ 1.48 void MethodHandles::jump_from_method_handle(MacroAssembler* _masm, Register method, Register target, Register temp, 1.49 bool for_compiler_entry) { 1.50 assert(method == G5_method, "interpreter calling convention"); 1.51 - __ verify_oop(method); 1.52 1.53 if (!for_compiler_entry && JvmtiExport::can_post_interpreter_events()) { 1.54 Label run_compiled_code; 1.55 @@ -134,7 +131,7 @@ 1.56 const Address interp_only(G2_thread, JavaThread::interp_only_mode_offset()); 1.57 __ ld(interp_only, temp); 1.58 __ cmp_and_br_short(temp, 0, Assembler::zero, Assembler::pt, run_compiled_code); 1.59 - __ ld_ptr(G5_method, in_bytes(methodOopDesc::interpreter_entry_offset()), target); 1.60 + __ ld_ptr(G5_method, in_bytes(Method::interpreter_entry_offset()), target); 1.61 __ jmp(target, 0); 1.62 __ delayed()->nop(); 1.63 __ BIND(run_compiled_code); 1.64 @@ -142,8 +139,8 @@ 1.65 // it doesn't matter, since this is interpreter code. 1.66 } 1.67 1.68 - const ByteSize entry_offset = for_compiler_entry ? methodOopDesc::from_compiled_offset() : 1.69 - methodOopDesc::from_interpreted_offset(); 1.70 + const ByteSize entry_offset = for_compiler_entry ? Method::from_compiled_offset() : 1.71 + Method::from_interpreted_offset(); 1.72 __ ld_ptr(G5_method, in_bytes(entry_offset), target); 1.73 __ jmp(target, 0); 1.74 __ delayed()->nop(); 1.75 @@ -167,16 +164,15 @@ 1.76 __ verify_oop(method_temp); 1.77 __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_LambdaForm::vmentry_offset_in_bytes())), method_temp); 1.78 __ verify_oop(method_temp); 1.79 - // the following assumes that a methodOop is normally compressed in the vmtarget field: 1.80 - __ load_heap_oop(Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp); 1.81 - __ verify_oop(method_temp); 1.82 + // the following assumes that a Method* is normally compressed in the vmtarget field: 1.83 + __ ld_ptr(Address(method_temp, NONZERO(java_lang_invoke_MemberName::vmtarget_offset_in_bytes())), method_temp); 1.84 1.85 if (VerifyMethodHandles && !for_compiler_entry) { 1.86 // make sure recv is already on stack 1.87 - __ load_sized_value(Address(method_temp, methodOopDesc::size_of_parameters_offset()), 1.88 + __ load_sized_value(Address(method_temp, Method::size_of_parameters_offset()), 1.89 temp2, 1.90 sizeof(u2), /*is_signed*/ false); 1.91 - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); 1.92 + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); 1.93 Label L; 1.94 __ ld_ptr(__ argument_address(temp2, temp2, -1), temp2); 1.95 __ cmp_and_br_short(temp2, recv, Assembler::equal, Assembler::pt, L); 1.96 @@ -204,7 +200,7 @@ 1.97 } 1.98 1.99 // I5_savedSP/O5_savedSP: sender SP (must preserve; see prepare_to_jump_from_interpreted) 1.100 - // G5_method: methodOop 1.101 + // G5_method: Method* 1.102 // G4 (Gargs): incoming argument list (must preserve) 1.103 // O0: used as temp to hold mh or receiver 1.104 // O1, O4: garbage temps, blown away 1.105 @@ -220,14 +216,14 @@ 1.106 if (VerifyMethodHandles) { 1.107 Label L; 1.108 BLOCK_COMMENT("verify_intrinsic_id {"); 1.109 - __ ldub(Address(G5_method, methodOopDesc::intrinsic_id_offset_in_bytes()), O1_scratch); 1.110 + __ ldub(Address(G5_method, Method::intrinsic_id_offset_in_bytes()), O1_scratch); 1.111 __ cmp_and_br_short(O1_scratch, (int) iid, Assembler::equal, Assembler::pt, L); 1.112 if (iid == vmIntrinsics::_linkToVirtual || 1.113 iid == vmIntrinsics::_linkToSpecial) { 1.114 // could do this for all kinds, but would explode assembly code size 1.115 - trace_method_handle(_masm, "bad methodOop::intrinsic_id"); 1.116 + trace_method_handle(_masm, "bad Method*::intrinsic_id"); 1.117 } 1.118 - __ STOP("bad methodOop::intrinsic_id"); 1.119 + __ STOP("bad Method*::intrinsic_id"); 1.120 __ bind(L); 1.121 BLOCK_COMMENT("} verify_intrinsic_id"); 1.122 } 1.123 @@ -237,10 +233,10 @@ 1.124 int ref_kind = signature_polymorphic_intrinsic_ref_kind(iid); 1.125 assert(ref_kind != 0 || iid == vmIntrinsics::_invokeBasic, "must be _invokeBasic or a linkTo intrinsic"); 1.126 if (ref_kind == 0 || MethodHandles::ref_kind_has_receiver(ref_kind)) { 1.127 - __ load_sized_value(Address(G5_method, methodOopDesc::size_of_parameters_offset()), 1.128 + __ load_sized_value(Address(G5_method, Method::size_of_parameters_offset()), 1.129 O4_param_size, 1.130 sizeof(u2), /*is_signed*/ false); 1.131 - // assert(sizeof(u2) == sizeof(methodOopDesc::_size_of_parameters), ""); 1.132 + // assert(sizeof(u2) == sizeof(Method::_size_of_parameters), ""); 1.133 O4_first_arg_addr = __ argument_address(O4_param_size, O4_param_size, -1); 1.134 } else { 1.135 DEBUG_ONLY(O4_param_size = noreg); 1.136 @@ -331,7 +327,7 @@ 1.137 // The method is a member invoker used by direct method handles. 1.138 if (VerifyMethodHandles) { 1.139 // make sure the trailing argument really is a MemberName (caller responsibility) 1.140 - verify_klass(_masm, member_reg, SystemDictionaryHandles::MemberName_klass(), 1.141 + verify_klass(_masm, member_reg, SystemDictionary::WK_KLASS_ENUM_NAME(MemberName_klass), 1.142 temp1, temp2, 1.143 "MemberName required for invokeVirtual etc."); 1.144 } 1.145 @@ -390,7 +386,7 @@ 1.146 if (VerifyMethodHandles) { 1.147 verify_ref_kind(_masm, JVM_REF_invokeSpecial, member_reg, temp3); 1.148 } 1.149 - __ load_heap_oop(member_vmtarget, G5_method); 1.150 + __ ld_ptr(member_vmtarget, G5_method); 1.151 method_is_live = true; 1.152 break; 1.153 1.154 @@ -398,7 +394,7 @@ 1.155 if (VerifyMethodHandles) { 1.156 verify_ref_kind(_masm, JVM_REF_invokeStatic, member_reg, temp3); 1.157 } 1.158 - __ load_heap_oop(member_vmtarget, G5_method); 1.159 + __ ld_ptr(member_vmtarget, G5_method); 1.160 method_is_live = true; 1.161 break; 1.162 1.163 @@ -425,7 +421,7 @@ 1.164 // Note: The verifier invariants allow us to ignore MemberName.clazz and vmtarget 1.165 // at this point. And VerifyMethodHandles has already checked clazz, if needed. 1.166 1.167 - // get target methodOop & entry point 1.168 + // get target Method* & entry point 1.169 __ lookup_virtual_method(temp1_recv_klass, temp2_index, G5_method); 1.170 method_is_live = true; 1.171 break;