diff src/cpu/ppc/vm/sharedRuntime_ppc.cpp @ 22717:ba7846fcb814

Fix ppc and x86_32 after fetch_unroll_info_helper changes Changes in 3c1edc9c60d8 only included x86_64 and sparc. This change also reuses the existing unpack_kind instead of a new field in UnrollBlock.
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Mon, 02 Nov 2015 15:33:53 +0100
parents a433eb716ce1
children 48fde4d03767
line wrap: on
line diff
--- a/src/cpu/ppc/vm/sharedRuntime_ppc.cpp	Fri Oct 30 12:28:17 2015 +0100
+++ b/src/cpu/ppc/vm/sharedRuntime_ppc.cpp	Mon Nov 02 15:33:53 2015 +0100
@@ -2841,7 +2841,7 @@
   __ set_last_Java_frame(R1_SP, noreg);
 
   // With EscapeAnalysis turned on, this call may safepoint!
-  __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info), R16_thread);
+  __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::fetch_unroll_info), R16_thread, exec_mode_reg);
   address calls_return_pc = __ last_calls_return_pc();
   // Set an oopmap for the call site that describes all our saved registers.
   oop_maps->add_gc_map(calls_return_pc - start, map);
@@ -2854,6 +2854,8 @@
   // by save_volatile_registers(...).
   RegisterSaver::restore_result_registers(masm, first_frame_size_in_bytes);
 
+  // reload the exec mode from the UnrollBlock (it might have changed)
+  __ lwz(exec_mode_reg, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes(), unroll_block_reg);
   // In excp_deopt_mode, restore and clear exception oop which we
   // stored in the thread during exception entry above. The exception
   // oop will be the return value of this stub.
@@ -2989,8 +2991,9 @@
   __ set_last_Java_frame(/*sp*/R1_SP, /*pc*/R11_scratch1);
 
   __ mr(klass_index_reg, R3);
+  __ li(R5, Deoptimization::Unpack_exception);
   __ call_VM_leaf(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap),
-                  R16_thread, klass_index_reg);
+                  R16_thread, klass_index_reg, R5);
 
   // Set an oopmap for the call site.
   oop_maps->add_gc_map(gc_map_pc - start, map);