Request for review(XS): 7013812: C1: deopt blob too far from patching stub

Tom Rodriguez tom.rodriguez at oracle.com
Thu Jan 20 22:00:05 PST 2011


On Jan 20, 2011, at 9:45 PM, Igor Veresov wrote:

> After a bit of a thought, I decided to leave the 32bit as it was.
> Webrev updated: http://cr.openjdk.java.net/~iveresov/7013812/webrev.00/

Can't G3 have live values in it?  I think you might have to do:

diff -r 5ae3e3b03224 src/cpu/sparc/vm/c1_Runtime1_sparc.cpp
--- a/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp	Thu Jan 13 07:28:47 2011 -0800
+++ b/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp	Thu Jan 20 21:57:50 2011 -0800
@@ -343,9 +343,14 @@
   // returned.
 
   restore_live_registers(sasm);
-  __ restore();
+#ifdef _LP64
+  __ relocate(relocInfo::runtime_call_type);
+  AddressLiteral dest(deopt_blob->unpack_with_reexecution());
+  __ jump_to(dest, O0);
+#else
   __ br(Assembler::always, false, Assembler::pt, deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type);
-  __ delayed()->nop();
+#endif
+  __ delayed()->restore();
 
   __ bind(no_deopt);
   restore_live_registers(sasm);

This is similar to what is done in generate_handle_exception for similar reasons.

tom

> 
> igor
> 
> On 1/20/11 9:28 PM, Igor Veresov wrote:
>> access_filed_patching and load_klass_patching stubs are using
>> effectively a bp instruction to jump to deopt blob. This limits the
>> distance between the deopt blob and these stub to 2^20, which is not
>> enough. Since this situation could become possible also with a 32bit VM
>> (the distance is only 1M), I decided to always use long jumps.
>> 
>> Webrev: http://cr.openjdk.java.net/~iveresov/7013812/webrev.00/
>> 
>> Thanks,
>> igor
>> 
> 
> 



More information about the hotspot-compiler-dev mailing list