mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8024344: PPC64 (part 112): C argument in register AND stack slot
On PPC, the first 13 floating point arguments to C calls are passed in floating point registers. Also, all but the first 8 arguments are passed on the stack. So there can be floating point arguments that are passed on the stack and in a register. We duplicate the regs datastructure in c_calling_convention() to represent this. Reviewed-by: kvn, cjplummer
This commit is contained in:
parent
2af861eed1
commit
081d2454fb
11 changed files with 28 additions and 13 deletions
|
@ -1118,7 +1118,9 @@ static VMReg int_stk_helper( int i ) {
|
|||
|
||||
int SharedRuntime::c_calling_convention(const BasicType *sig_bt,
|
||||
VMRegPair *regs,
|
||||
VMRegPair *regs2,
|
||||
int total_args_passed) {
|
||||
assert(regs2 == NULL, "not needed on sparc");
|
||||
|
||||
// Return the number of VMReg stack_slots needed for the args.
|
||||
// This value does not include an abi space (like register window
|
||||
|
@ -2096,7 +2098,7 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm,
|
|||
// the 1st six register arguments). It's weird see int_stk_helper.
|
||||
//
|
||||
int out_arg_slots;
|
||||
out_arg_slots = c_calling_convention(out_sig_bt, out_regs, total_c_args);
|
||||
out_arg_slots = c_calling_convention(out_sig_bt, out_regs, NULL, total_c_args);
|
||||
|
||||
if (is_critical_native) {
|
||||
// Critical natives may have to call out so they need a save area
|
||||
|
@ -2843,7 +2845,7 @@ nmethod *SharedRuntime::generate_dtrace_nmethod(
|
|||
// the 1st six register arguments). It's weird see int_stk_helper.
|
||||
//
|
||||
int out_arg_slots;
|
||||
out_arg_slots = c_calling_convention(out_sig_bt, out_regs, total_c_args);
|
||||
out_arg_slots = c_calling_convention(out_sig_bt, out_regs, NULL, total_c_args);
|
||||
|
||||
// Calculate the total number of stack slots we will need.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue