comparison src/cpu/x86/vm/x86_32.ad @ 14416:6a936747b569

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. Reviewed-by: kvn, cjplummer
author goetz
date Thu, 12 Sep 2013 13:51:13 -0700
parents e10e43e58e92
children 2b8e28fdf503
comparison
equal deleted inserted replaced
14415:666e6ce3976c 14416:6a936747b569
3753 // offsets are based on outgoing arguments, i.e. a CALLER setting up 3753 // offsets are based on outgoing arguments, i.e. a CALLER setting up
3754 // arguments for a CALLEE. Incoming stack arguments are 3754 // arguments for a CALLEE. Incoming stack arguments are
3755 // automatically biased by the preserve_stack_slots field above. 3755 // automatically biased by the preserve_stack_slots field above.
3756 c_calling_convention %{ 3756 c_calling_convention %{
3757 // This is obviously always outgoing 3757 // This is obviously always outgoing
3758 (void) SharedRuntime::c_calling_convention(sig_bt, regs, length); 3758 (void) SharedRuntime::c_calling_convention(sig_bt, regs, /*regs2=*/NULL, length);
3759 %} 3759 %}
3760 3760
3761 // Location of C & interpreter return values 3761 // Location of C & interpreter return values
3762 c_return_value %{ 3762 c_return_value %{
3763 assert( ideal_reg >= Op_RegI && ideal_reg <= Op_RegL, "only return normal values" ); 3763 assert( ideal_reg >= Op_RegI && ideal_reg <= Op_RegL, "only return normal values" );