--- a/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp Thu Mar 06 02:37:44 2014 -0800
+++ b/hotspot/src/cpu/ppc/vm/sharedRuntime_ppc.cpp Thu Mar 06 10:55:28 2014 -0800
@@ -67,7 +67,7 @@
return_pc_is_thread_saved_exception_pc
};
- static OopMap* push_frame_abi112_and_save_live_registers(MacroAssembler* masm,
+ static OopMap* push_frame_reg_args_and_save_live_registers(MacroAssembler* masm,
int* out_frame_size_in_bytes,
bool generate_oop_map,
int return_pc_adjustment,
@@ -200,12 +200,12 @@
RegisterSaver_LiveIntReg( R30 ), // r30 must be the last register
};
-OopMap* RegisterSaver::push_frame_abi112_and_save_live_registers(MacroAssembler* masm,
+OopMap* RegisterSaver::push_frame_reg_args_and_save_live_registers(MacroAssembler* masm,
int* out_frame_size_in_bytes,
bool generate_oop_map,
int return_pc_adjustment,
ReturnPCLocation return_pc_location) {
- // Push an abi112-frame and store all registers which may be live.
+ // Push an abi_reg_args-frame and store all registers which may be live.
// If requested, create an OopMap: Record volatile registers as
// callee-save values in an OopMap so their save locations will be
// propagated to the RegisterMap of the caller frame during
@@ -221,7 +221,7 @@
sizeof(RegisterSaver::LiveRegType);
const int register_save_size = regstosave_num * reg_size;
const int frame_size_in_bytes = round_to(register_save_size, frame::alignment_in_bytes)
- + frame::abi_112_size;
+ + frame::abi_reg_args_size;
*out_frame_size_in_bytes = frame_size_in_bytes;
const int frame_size_in_slots = frame_size_in_bytes / sizeof(jint);
const int register_save_offset = frame_size_in_bytes - register_save_size;
@@ -229,7 +229,7 @@
// OopMap frame size is in c2 stack slots (sizeof(jint)) not bytes or words.
OopMap* map = generate_oop_map ? new OopMap(frame_size_in_slots, 0) : NULL;
- BLOCK_COMMENT("push_frame_abi112_and_save_live_registers {");
+ BLOCK_COMMENT("push_frame_reg_args_and_save_live_registers {");
// Save r30 in the last slot of the not yet pushed frame so that we
// can use it as scratch reg.
@@ -294,7 +294,7 @@
offset += reg_size;
}
- BLOCK_COMMENT("} push_frame_abi112_and_save_live_registers");
+ BLOCK_COMMENT("} push_frame_reg_args_and_save_live_registers");
// And we're done.
return map;
@@ -699,15 +699,19 @@
int i;
VMReg reg;
- // Leave room for C-compatible ABI_112.
- int stk = (frame::abi_112_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size;
+ // Leave room for C-compatible ABI_REG_ARGS.
+ int stk = (frame::abi_reg_args_size - frame::jit_out_preserve_size) / VMRegImpl::stack_slot_size;
int arg = 0;
int freg = 0;
// Avoid passing C arguments in the wrong stack slots.
+#if defined(ABI_ELFv2)
+ assert((SharedRuntime::out_preserve_stack_slots() + stk) * VMRegImpl::stack_slot_size == 96,
+ "passing C arguments in wrong stack slots");
+#else
assert((SharedRuntime::out_preserve_stack_slots() + stk) * VMRegImpl::stack_slot_size == 112,
"passing C arguments in wrong stack slots");
-
+#endif
// We fill-out regs AND regs2 if an argument must be passed in a
// register AND in a stack slot. If regs2 is NULL in such a
// situation, we bail-out with a fatal error.
@@ -1504,7 +1508,11 @@
__ block_comment("block_for_jni_critical");
address entry_point = CAST_FROM_FN_PTR(address, SharedRuntime::block_for_jni_critical);
+#if defined(ABI_ELFv2)
+ __ call_c(entry_point, relocInfo::runtime_call_type);
+#else
__ call_c(CAST_FROM_FN_PTR(FunctionDescriptor*, entry_point), relocInfo::runtime_call_type);
+#endif
address start = __ pc() - __ offset(),
calls_return_pc = __ last_calls_return_pc();
oop_maps->add_gc_map(calls_return_pc - start, map);
@@ -1877,7 +1885,7 @@
// Layout of the native wrapper frame:
// (stack grows upwards, memory grows downwards)
//
- // NW [ABI_112] <-- 1) R1_SP
+ // NW [ABI_REG_ARGS] <-- 1) R1_SP
// [outgoing arguments] <-- 2) R1_SP + out_arg_slot_offset
// [oopHandle area] <-- 3) R1_SP + oop_handle_offset (save area for critical natives)
// klass <-- 4) R1_SP + klass_offset
@@ -2211,8 +2219,8 @@
// slow case of monitor enter. Inline a special case of call_VM that
// disallows any pending_exception.
- // Save argument registers and leave room for C-compatible ABI_112.
- int frame_size = frame::abi_112_size +
+ // Save argument registers and leave room for C-compatible ABI_REG_ARGS.
+ int frame_size = frame::abi_reg_args_size +
round_to(total_c_args * wordSize, frame::alignment_in_bytes);
__ mr(R11_scratch1, R1_SP);
RegisterSaver::push_frame_and_save_argument_registers(masm, R12_scratch2, frame_size, total_c_args, out_regs, out_regs2);
@@ -2250,9 +2258,12 @@
// The JNI call
// --------------------------------------------------------------------------
-
+#if defined(ABI_ELFv2)
+ __ call_c(native_func, relocInfo::runtime_call_type);
+#else
FunctionDescriptor* fd_native_method = (FunctionDescriptor*) native_func;
__ call_c(fd_native_method, relocInfo::runtime_call_type);
+#endif
// Now, we are back from the native code.
@@ -2724,7 +2735,7 @@
OopMapSet *oop_maps = new OopMapSet();
// size of ABI112 plus spill slots for R3_RET and F1_RET.
- const int frame_size_in_bytes = frame::abi_112_spill_size;
+ const int frame_size_in_bytes = frame::abi_reg_args_spill_size;
const int frame_size_in_slots = frame_size_in_bytes / sizeof(jint);
int first_frame_size_in_bytes = 0; // frame size of "unpack frame" for call to fetch_unroll_info.
@@ -2757,11 +2768,11 @@
// Push the "unpack frame"
// Save everything in sight.
- map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm,
- &first_frame_size_in_bytes,
- /*generate_oop_map=*/ true,
- return_pc_adjustment_no_exception,
- RegisterSaver::return_pc_is_lr);
+ map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm,
+ &first_frame_size_in_bytes,
+ /*generate_oop_map=*/ true,
+ return_pc_adjustment_no_exception,
+ RegisterSaver::return_pc_is_lr);
assert(map != NULL, "OopMap must have been created");
__ li(exec_mode_reg, Deoptimization::Unpack_deopt);
@@ -2787,11 +2798,11 @@
// Push the "unpack frame".
// Save everything in sight.
assert(R4 == R4_ARG2, "exception pc must be in r4");
- RegisterSaver::push_frame_abi112_and_save_live_registers(masm,
- &first_frame_size_in_bytes,
- /*generate_oop_map=*/ false,
- return_pc_adjustment_exception,
- RegisterSaver::return_pc_is_r4);
+ RegisterSaver::push_frame_reg_args_and_save_live_registers(masm,
+ &first_frame_size_in_bytes,
+ /*generate_oop_map=*/ false,
+ return_pc_adjustment_exception,
+ RegisterSaver::return_pc_is_r4);
// Deopt during an exception. Save exec mode for unpack_frames.
__ li(exec_mode_reg, Deoptimization::Unpack_exception);
@@ -2876,8 +2887,8 @@
// ...).
// Spill live volatile registers since we'll do a call.
- __ std( R3_RET, _abi_112_spill(spill_ret), R1_SP);
- __ stfd(F1_RET, _abi_112_spill(spill_fret), R1_SP);
+ __ std( R3_RET, _abi_reg_args_spill(spill_ret), R1_SP);
+ __ stfd(F1_RET, _abi_reg_args_spill(spill_fret), R1_SP);
// Let the unpacker layout information in the skeletal frames just
// allocated.
@@ -2889,8 +2900,8 @@
__ reset_last_Java_frame();
// Restore the volatiles saved above.
- __ ld( R3_RET, _abi_112_spill(spill_ret), R1_SP);
- __ lfd(F1_RET, _abi_112_spill(spill_fret), R1_SP);
+ __ ld( R3_RET, _abi_reg_args_spill(spill_ret), R1_SP);
+ __ lfd(F1_RET, _abi_reg_args_spill(spill_fret), R1_SP);
// Pop the unpack frame.
__ pop_frame();
@@ -2930,7 +2941,7 @@
Register unc_trap_reg = R23_tmp3;
OopMapSet* oop_maps = new OopMapSet();
- int frame_size_in_bytes = frame::abi_112_size;
+ int frame_size_in_bytes = frame::abi_reg_args_size;
OopMap* map = new OopMap(frame_size_in_bytes / sizeof(jint), 0);
// stack: (deoptee, optional i2c, caller_of_deoptee, ...).
@@ -2943,7 +2954,7 @@
__ save_LR_CR(R11_scratch1);
// Push an "uncommon_trap" frame.
- __ push_frame_abi112(0, R11_scratch1);
+ __ push_frame_reg_args(0, R11_scratch1);
// stack: (unpack frame, deoptee, optional i2c, caller_of_deoptee, ...).
@@ -2996,7 +3007,7 @@
// interpreter frames just created.
// Push a simple "unpack frame" here.
- __ push_frame_abi112(0, R11_scratch1);
+ __ push_frame_reg_args(0, R11_scratch1);
// stack: (unpack frame, skeletal interpreter frame, ..., optional
// skeletal interpreter frame, optional c2i, caller of deoptee,
@@ -3064,11 +3075,11 @@
}
// Save registers, fpu state, and flags.
- map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm,
- &frame_size_in_bytes,
- /*generate_oop_map=*/ true,
- /*return_pc_adjustment=*/0,
- return_pc_location);
+ map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm,
+ &frame_size_in_bytes,
+ /*generate_oop_map=*/ true,
+ /*return_pc_adjustment=*/0,
+ return_pc_location);
// The following is basically a call_VM. However, we need the precise
// address of the call in order to generate an oopmap. Hence, we do all the
@@ -3151,11 +3162,11 @@
address start = __ pc();
- map = RegisterSaver::push_frame_abi112_and_save_live_registers(masm,
- &frame_size_in_bytes,
- /*generate_oop_map*/ true,
- /*return_pc_adjustment*/ 0,
- RegisterSaver::return_pc_is_lr);
+ map = RegisterSaver::push_frame_reg_args_and_save_live_registers(masm,
+ &frame_size_in_bytes,
+ /*generate_oop_map*/ true,
+ /*return_pc_adjustment*/ 0,
+ RegisterSaver::return_pc_is_lr);
// Use noreg as last_Java_pc, the return pc will be reconstructed
// from the physical frame.