* 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
{
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;
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,
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
#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
/* 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
#define RDATA_SECTION_ASM_OP "\t.section .rodata"
#define RDATA_SECTION_FUNCTION \
+void rdata_section PARAMS ((void)); \
+ \
void \
rdata_section () \
{ \