src/cpu/x86/vm/sharedRuntime_x86_32.cpp

Print this page
rev 5188 : 8024344: PPC64 (part 112): C argument in register AND stack slot.
Summary: 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.

*** 975,985 **** --- 975,987 ---- return AdapterHandlerLibrary::new_entry(fingerprint, i2c_entry, c2i_entry, c2i_unverified_entry); } int SharedRuntime::c_calling_convention(const BasicType *sig_bt, VMRegPair *regs, + VMRegPair *regs2, int total_args_passed) { + assert(regs2 == NULL, "not needed on x86"); // We return the amount of VMRegImpl stack slots we need to reserve for all // the arguments NOT counting out_preserve_stack_slots. uint stack = 0; // All arguments on stack
*** 1622,1632 **** } // Now figure out where the args must be stored and how much stack space // they require. int out_arg_slots; ! out_arg_slots = c_calling_convention(out_sig_bt, out_regs, total_c_args); // Compute framesize for the wrapper. We need to handlize all oops in // registers a max of 2 on x86. // Calculate the total number of stack slots we will need. --- 1624,1634 ---- } // Now figure out where the args must be stored and how much stack space // they require. int out_arg_slots; ! out_arg_slots = c_calling_convention(out_sig_bt, out_regs, NULL, total_c_args); // Compute framesize for the wrapper. We need to handlize all oops in // registers a max of 2 on x86. // Calculate the total number of stack slots we will need.
*** 2493,2503 **** // Now figure out where the args must be stored and how much stack space // they require (neglecting out_preserve_stack_slots). int out_arg_slots; ! out_arg_slots = c_calling_convention(out_sig_bt, out_regs, total_c_args); // Calculate the total number of stack slots we will need. // First count the abi requirement plus all of the outgoing args int stack_slots = SharedRuntime::out_preserve_stack_slots() + out_arg_slots; --- 2495,2505 ---- // Now figure out where the args must be stored and how much stack space // they require (neglecting out_preserve_stack_slots). int out_arg_slots; ! 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. // First count the abi requirement plus all of the outgoing args int stack_slots = SharedRuntime::out_preserve_stack_slots() + out_arg_slots;