aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/alpha
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-03-25 14:50:09 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-03-25 14:50:09 -0500
commit0273f32645e1c69ccc7a61a5364683dcf4546c62 (patch)
treee9e6a21148e3d82cbfec445f4514d4f88d45aab7 /gcc/config/alpha
parente4e873f1a2a081fd1c1627ac165a560c1ce40365 (diff)
downloadgcc-0273f32645e1c69ccc7a61a5364683dcf4546c62.zip
gcc-0273f32645e1c69ccc7a61a5364683dcf4546c62.tar.gz
gcc-0273f32645e1c69ccc7a61a5364683dcf4546c62.tar.bz2
(output_prolog): Correctly compute floating-reg save area offset.
From-SVN: r6899
Diffstat (limited to 'gcc/config/alpha')
-rw-r--r--gcc/config/alpha/alpha.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 3a1977e..855e5e5 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1214,6 +1214,7 @@ output_prolog (file, size)
HOST_WIDE_INT reg_offset = vars_size + current_function_outgoing_args_size;
HOST_WIDE_INT start_reg_offset = reg_offset;
HOST_WIDE_INT actual_start_reg_offset = start_reg_offset;
+ int int_reg_save_area_size = 0;
rtx insn;
int reg_offset_base_reg = 30;
unsigned reg_mask = 0;
@@ -1358,6 +1359,7 @@ output_prolog (file, size)
reg_mask |= 1 << 26;
fprintf (file, "\tstq $26,%d($%d)\n", reg_offset, reg_offset_base_reg);
reg_offset += 8;
+ int_reg_save_area_size += 8;
}
/* Now save any other used integer registers required to be saved. */
@@ -1368,6 +1370,7 @@ output_prolog (file, size)
fprintf (file, "\tstq $%d,%d($%d)\n",
i, reg_offset, reg_offset_base_reg);
reg_offset += 8;
+ int_reg_save_area_size += 8;
}
/* Print the register mask and do floating-point saves. */
@@ -1390,7 +1393,8 @@ output_prolog (file, size)
/* Print the floating-point mask, if we've saved any fp register. */
if (reg_mask)
- fprintf (file, "\t.fmask 0x%x,%d\n", reg_mask, actual_start_reg_offset);
+ fprintf (file, "\t.fmask 0x%x,%d\n", reg_mask,
+ actual_start_reg_offset - frame_size + int_reg_save_area_size);
/* If we need a frame pointer, set it from the stack pointer. Note that
this must always be the last instruction in the prologue. */