+Tue Apr 27 15:33:42 1999 David Edelsohn <edelsohn@gnu.org>
+
+ * rs6000.h (read_only_data_section, private_data_section,
+ read_only_private_data_section, toc_section): Align CSECT on
+ doubleword boundary for 64-bit target.
+ (DATA_SECTION_ASM_OP): Likewise.
+ * rs6000.c (rs6000_stack_info): Leaf procedure stack limit is 288.
+
Tue Apr 27 20:19:47 1999 J"orn Rennecke <amylaar@cygnus.co.uk>
* sh.md (insv): Use copy_addr_to_reg.
little endian mode, and causes an alignment trap. The 750 does not cause
an alignment trap (except when the target is unaligned). */
- if (!BYTES_BIG_ENDIAN && rs6000_cpu != PROCESSOR_PPC750)
+ if (! BYTES_BIG_ENDIAN && rs6000_cpu != PROCESSOR_PPC750)
{
if (TARGET_MULTIPLE)
{
/* Set debug flags */
if (rs6000_debug_name)
{
- if (!strcmp (rs6000_debug_name, "all"))
+ if (! strcmp (rs6000_debug_name, "all"))
rs6000_debug_stack = rs6000_debug_arg = 1;
- else if (!strcmp (rs6000_debug_name, "stack"))
+ else if (! strcmp (rs6000_debug_name, "stack"))
rs6000_debug_stack = 1;
- else if (!strcmp (rs6000_debug_name, "arg"))
+ else if (! strcmp (rs6000_debug_name, "arg"))
rs6000_debug_arg = 1;
else
error ("Unknown -mdebug-%s switch", rs6000_debug_name);
/* If the user desires alternate register names, copy in the alternate names
now. */
if (TARGET_REGNAMES)
- bcopy ((char *)alt_reg_names, (char *)rs6000_reg_names, sizeof (rs6000_reg_names));
+ bcopy ((char *)alt_reg_names, (char *)rs6000_reg_names,
+ sizeof (rs6000_reg_names));
#endif
#ifdef SUBTARGET_OVERRIDE_OPTIONS
the stack might be dynamically adjusted), if we are debugging, if we
make calls, or if the sum of fp_save, gp_save, fpmem, and local variables
are more than the space needed to save all non-volatile registers:
- 32-bit: 18*8 + 19*4 = 220 or 64-bit: 18*8 + 19*8 = 296
+ 32-bit: 18*8 + 19*4 = 220 or 64-bit: 18*8 + 18*8 = 288 (GPR13 reserved).
For V.4 we don't have the stack cushion that AIX uses, but assume that
the debugger can handle stackless frames. */
info_ptr->push_p = (frame_pointer_needed
|| write_symbols != NO_DEBUG
|| ((total_raw_size - info_ptr->fixed_size)
- > (TARGET_32BIT ? 220 : 296)));
+ > (TARGET_32BIT ? 220 : 288)));
if (info_ptr->fpmem_p)
{
{ \
if (in_section != read_only_data) \
{ \
- fprintf (asm_out_file, ".csect %s[RO]\n", \
- xcoff_read_only_section_name); \
+ fprintf (asm_out_file, ".csect %s[RO]%s\n", \
+ xcoff_read_only_section_name, \
+ (TARGET_32BIT ? "" : ",3")); \
in_section = read_only_data; \
} \
} \
{ \
if (in_section != private_data) \
{ \
- fprintf (asm_out_file, ".csect %s[RW]\n", \
- xcoff_private_data_section_name); \
- \
+ fprintf (asm_out_file, ".csect %s[RW]%s\n", \
+ xcoff_private_data_section_name, \
+ (TARGET_32BIT ? "" : ",3")); \
in_section = private_data; \
} \
} \
{ \
if (in_section != read_only_private_data) \
{ \
- fprintf (asm_out_file, ".csect %s[RO]\n", \
- xcoff_private_data_section_name); \
+ fprintf (asm_out_file, ".csect %s[RO]%s\n", \
+ xcoff_private_data_section_name, \
+ (TARGET_32BIT ? "" : ",3")); \
in_section = read_only_private_data; \
} \
} \
} \
\
if (in_section != toc) \
- fputs (".csect toc_table[RW]\n", asm_out_file); \
+ fprintf (asm_out_file, ".csect toc_table[RW]%s\n", \
+ (TARGET_32BIT ? "" : ",3")); \
} \
else \
{ \
/* Output before writable data. */
-#define DATA_SECTION_ASM_OP ".csect .data[RW]"
+#define DATA_SECTION_ASM_OP (TARGET_32BIT \
+ ? ".csect .data[RW]" : ".csect .data[RW],3")
/* How to refer to registers in assembler output.
This sequence is indexed by compiler's hard-register-number (see above). */