Commit ef7112de by Nick Clifton Committed by Nick Clifton

Account for FP registers saved to stack during prologue

From-SVN: r45325
parent 7566ca49
......@@ -122,6 +122,18 @@ Thu Aug 30 10:21:43 2001 J"orn Rennecke <amylaar@redhat.com>
* c-typeck.c (pointer_diff): Try to eliminate common term before
doing conversions.
2001-08-30 Nick Clifton <nickc@cambridge.redhat.com>
* config/arm/arm.c (arm_compute_initial_elimination_offset):
Account for the saves of the FP registers.
* config/arm/unknown-elf.h (TEXT_SECTION): Delete.
(TEXT_SECTION_ASM_OP): Define.
(INIT_SECTION_ASM_OP): Define.
(FINI_SECTION_ASM_OP): Define.
(SUBTARGET_EXTRA_SECTIONS): Remove trailing comma.
(RDATA_SECTION_FUNCITON): Provide prototype.
2001-08-29 Geoffrey Keating <geoffk@redhat.com>
* reload1.c (move2add_note_store): Correct typo checking for
......
......@@ -7943,16 +7943,23 @@ arm_compute_initial_elimination_offset (from, to)
{
unsigned int reg;
/* In theory we should check all of the hard registers to
see if they will be saved onto the stack. In practice
registers 11 upwards have special meanings and need to
be check individually. */
for (reg = 0; reg <= 10; reg ++)
if (regs_ever_live[reg] && ! call_used_regs[reg])
call_saved_registers += 4;
/* Determine if register 11 will be clobbered. */
if (! TARGET_APCS_FRAME
&& ! frame_pointer_needed
&& regs_ever_live[HARD_FRAME_POINTER_REGNUM]
&& ! call_used_regs[HARD_FRAME_POINTER_REGNUM])
call_saved_registers += 4;
/* The PIC register is fixed, so if the function will
corrupt it, it has to be saved onto the stack. */
if (flag_pic && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
call_saved_registers += 4;
......@@ -7962,6 +7969,13 @@ arm_compute_initial_elimination_offset (from, to)
for it here. */
&& ! frame_pointer_needed)
call_saved_registers += 4;
/* If the hard floating point registers are going to be
used then they must be saved on the stack as well.
Each register occupies 12 bytes of stack space. */
for (reg = FIRST_ARM_FP_REGNUM; reg <= LAST_ARM_FP_REGNUM; reg ++)
if (regs_ever_live[reg] && ! call_used_regs[reg])
call_saved_registers += 12;
}
/* The stack frame contains 4 registers - the old frame pointer,
......@@ -7969,8 +7983,6 @@ arm_compute_initial_elimination_offset (from, to)
of the function. */
stack_frame = frame_pointer_needed ? 16 : 0;
/* FIXME: we should allow for saved floating point registers. */
/* OK, now we have enough information to compute the distances.
There must be an entry in these switch tables for each pair
of registers in ELIMINABLE_REGS, even if some of the entries
......
......@@ -37,7 +37,9 @@ Boston, MA 02111-1307, USA. */
#define USER_LABEL_PREFIX ""
#define LOCAL_LABEL_PREFIX "."
#define TEXT_SECTION " .text"
#define TEXT_SECTION_ASM_OP "\t.text"
#define INIT_SECTION_ASM_OP "\t.section\t.init"
#define FINI_SECTION_ASM_OP "\t.section\t.fini"
#define INVOKE__main
......@@ -51,7 +53,7 @@ Boston, MA 02111-1307, USA. */
/* A list of other sections which the compiler might be "in" at any
given time. */
#define SUBTARGET_EXTRA_SECTIONS in_rdata,
#define SUBTARGET_EXTRA_SECTIONS in_rdata
/* A list of extra section function definitions. */
#define SUBTARGET_EXTRA_SECTION_FUNCTIONS RDATA_SECTION_FUNCTION
......@@ -59,6 +61,8 @@ Boston, MA 02111-1307, USA. */
#define RDATA_SECTION_ASM_OP "\t.section .rodata"
#define RDATA_SECTION_FUNCTION \
void rdata_section PARAMS ((void)); \
\
void \
rdata_section () \
{ \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment