diff options
author | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:54:28 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-04-04 06:54:28 -0700 |
commit | 5665caa28f40f923c088dd2672b293d348abca8a (patch) | |
tree | 16d4e8b16e096a56699e1e72dfc14ce4382ac277 /gcc | |
parent | d6df9efb6d4a855e65f48967469cf2d29b2ebd7f (diff) | |
download | gcc-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.c | 47 |
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); |