+Wed Dec 15 16:11:55 MET 1999 Jan Hubicka <hubicka@freesoft.cz>
+
+ * function.c (PREFERRED_STACK_BOUDNARY): Provide default value.
+ (assign_stack_local_1): Limit alignment to PREFERRED_STACK_BOUNDARY,
+ update stack_alignment_needed.
+ (prepare_function_start): Initialize stack_alignment_needed
+ * function.h (struct function): Add field stack_alignment_needed.
+
Wed Dec 15 14:55:24 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* caller-save.c (insert_one_insn): Returns struct insn_chain *.
#define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
#endif
+#if !defined (PREFERRED_STACK_BOUNDARY) && defined (STACK_BOUNDARY)
+#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
+#endif
+
/* Some systems use __main in a way incompatible with its use in gcc, in these
cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
give the same symbol without quotes for an alternative entry point. You
function->x_frame_offset -= size;
#endif
+ /* Ignore alignment we can't do with expected alignment of the boundary. */
+ if (alignment * BITS_PER_UNIT > PREFERRED_STACK_BOUNDARY)
+ alignment = PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT;
+
+ if (function->stack_alignment_needed < alignment * BITS_PER_UNIT)
+ function->stack_alignment_needed = alignment * BITS_PER_UNIT;
+
/* Round frame offset to that alignment.
We must be careful here, since FRAME_OFFSET might be negative and
division with a negative dividend isn't as well defined as we might
current_function->original_decl_initial = 0;
current_function->original_arg_vector = 0;
+ current_function->stack_alignment_needed = 0;
+
/* Set if a call to setjmp is seen. */
current_function_calls_setjmp = 0;
int uses_pic_offset_table;
/* tm.h can use this to store whatever it likes. */
struct machine_function *machine;
+ /* The largest alignment of slot allocated on the stack. */
+ int stack_alignment_needed;
/* Language-specific code can use this to store whatever it likes. */
struct language_function *language;