summaryrefslogtreecommitdiff
path: root/cgcode.c
diff options
context:
space:
mode:
authorJohn van Groningen2006-01-20 15:08:32 +0000
committerJohn van Groningen2006-01-20 15:08:32 +0000
commitd7a515da8618bf72ebb4b1a3325e66db1a48f640 (patch)
treef6b0edaa4d2a3d4771f53288662adcb2d2d881dd /cgcode.c
parentgenerate code for amd64 (diff)
fix incorrect code generation for return with > 7 floating point parameters
in registers and < 2 integer parameters in registers for IA32
Diffstat (limited to 'cgcode.c')
-rw-r--r--cgcode.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/cgcode.c b/cgcode.c
index a0f8f2a..9bb620e 100644
--- a/cgcode.c
+++ b/cgcode.c
@@ -6599,6 +6599,8 @@ void code_rtn (void)
if (n_data_registers>n_data_parameter_registers)
n_data_registers=n_data_parameter_registers;
+ else if (n_data_registers<n_data_parameter_registers)
+ n_data_parameter_registers=n_data_registers;
if (n_float_registers>n_float_parameter_registers)
n_float_registers=n_float_parameter_registers;
return_address_offset=n_data_registers+(n_float_registers<<1);
@@ -6641,9 +6643,16 @@ void code_rtn (void)
#ifndef I486
if (return_with_rts){
#endif
+
+#ifdef I486
+ b_offset+=
+ end_basic_block_with_registers_and_return_address_and_return_b_stack_offset
+ (a_stack_size,b_stack_size,local_demanded_vector,n_data_parameter_registers);
+#else
b_offset+=
end_basic_block_with_registers_and_return_b_stack_offset
(a_stack_size,b_stack_size,local_demanded_vector,N_ADDRESS_PARAMETER_REGISTERS);
+#endif
#if ! (defined (sparc) || defined (G_POWER))
if (b_offset!=0)