aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1998-04-04 06:54:28 -0700
committerJeff Law <law@gcc.gnu.org>1998-04-04 06:54:28 -0700
commit5665caa28f40f923c088dd2672b293d348abca8a (patch)
tree16d4e8b16e096a56699e1e72dfc14ce4382ac277 /gcc
parentd6df9efb6d4a855e65f48967469cf2d29b2ebd7f (diff)
downloadgcc-5665caa28f40f923c088dd2672b293d348abca8a.zip
gcc-5665caa28f40f923c088dd2672b293d348abca8a.tar.gz
gcc-5665caa28f40f923c088dd2672b293d348abca8a.tar.bz2
* Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12
for details. * haifa-sched.c: Mirror recent changes from gcc2. From-SVN: r18989
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/alpha/alpha.c47
1 files changed, 37 insertions, 10 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index 43aeab3..b926586 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -1,5 +1,5 @@
/* Subroutines used for code generation on the DEC Alpha.
- Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc.
+ Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
This file is part of GNU CC.
@@ -3130,8 +3130,18 @@ output_prolog (file, size)
STACK_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM);
/* Describe our frame. */
- fprintf (file, "\t.frame $%d,%d,$26,%d\n",
- unwind_regno, frame_size, rsa_offset);
+ fprintf (file, "\t.frame $%d,", unwind_regno);
+
+ /* If the frame size is larger than an integer, print it as zero to
+ avoid an assembler error. We won't be properly describing such a
+ frame, but that's the best we can do. */
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0:
+#endif
+ frame_size
+ );
+ fprintf (file, ",$26,%d\n", rsa_offset);
/* If we have to allocate space for outgoing args, do it now. */
if (current_function_outgoing_args_size != 0)
@@ -3316,7 +3326,7 @@ alpha_does_function_need_gp ()
void
output_prolog (file, size)
FILE *file;
- int size;
+ HOST_WIDE_INT size;
{
HOST_WIDE_INT out_args_size
= ALPHA_ROUND (current_function_outgoing_args_size);
@@ -3449,10 +3459,20 @@ output_prolog (file, size)
/* Describe our frame. */
if (!flag_inhibit_size_directive)
{
- fprintf (file, "\t.frame $%d,%d,$26,%d\n",
+ fprintf (file, "\t.frame $%d,",
(frame_pointer_needed
- ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM),
- frame_size, current_function_pretend_args_size);
+ ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM));
+
+ /* If the frame size is larger than an integer, print it as zero to
+ avoid an assembler error. We won't be properly describing such a
+ frame, but that's the best we can do. */
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0 :
+#endif
+ frame_size
+ );
+ fprintf (file, ",$26,%d\n", current_function_pretend_args_size);
}
/* Cope with very large offsets to the register save area. */
@@ -3495,8 +3515,15 @@ output_prolog (file, size)
/* Print the register mask and do floating-point saves. */
if (reg_mask && !flag_inhibit_size_directive)
- fprintf (file, "\t.mask 0x%x,%d\n", reg_mask,
- actual_start_reg_offset - frame_size);
+ {
+ fprintf (file, "\t.mask 0x%x,", reg_mask);
+ fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+#if HOST_BITS_PER_WIDE_INT == 64
+ frame_size >= (1l << 31) ? 0 :
+#endif
+ actual_start_reg_offset - frame_size);
+ fprintf (file, "\n");
+ }
start_reg_offset = reg_offset;
reg_mask = 0;
@@ -3711,7 +3738,7 @@ alpha_output_filename (stream, name)
}
else if (name != current_function_file
- && strcmp (name, current_function_file) != 0)
+ && strcmp (name, current_function_file) != 0)
{
if (inside_function && ! TARGET_GAS)
fprintf (stream, "\t#.file\t%d ", num_source_filenames);