mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-16 13:00:09 +08:00
Account for FP registers saved to stack during prologue
From-SVN: r45325
This commit is contained in:
parent
7566ca495a
commit
ef7112de26
@ -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 () \
|
||||
{ \
|
||||
|
Loading…
Reference in New Issue
Block a user