From: Jeff Law Date: Sat, 4 Apr 1998 13:54:28 +0000 (-0700) Subject: * Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5665caa28f40f923c088dd2672b293d348abca8a;p=gcc.git * Check in merge from gcc2. See ChangeLog.11 and ChangeLog.12 for details. * haifa-sched.c: Mirror recent changes from gcc2. From-SVN: r18989 --- diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 43aeab37161..b9265869995 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);