i386.c (ix86_expand_prologue): If the function uses a frame pointer, restore eax with an ebp-relative address.

* config/i386/i386.c (ix86_expand_prologue): If the function uses a
	frame pointer, restore eax with an ebp-relative address.

From-SVN: r85595
This commit is contained in:
Richard Sandiford 2004-08-05 07:13:56 +00:00 committed by Richard Sandiford
parent fce731b52f
commit ea5f7a1992
4 changed files with 48 additions and 1 deletions

View file

@ -1,3 +1,8 @@
2004-08-05 Richard Sandiford <rsandifo@redhat.com>
* config/i386/i386.c (ix86_expand_prologue): If the function uses a
frame pointer, restore eax with an ebp-relative address.
2004-08-04 Geoffrey Keating <geoffk@apple.com>
PR 14516

View file

@ -5399,7 +5399,14 @@ ix86_expand_prologue (void)
if (eax_live)
{
rtx t = plus_constant (stack_pointer_rtx, allocate);
rtx t;
if (frame_pointer_needed)
t = plus_constant (hard_frame_pointer_rtx,
allocate
- frame.to_allocate
- frame.nregs * UNITS_PER_WORD);
else
t = plus_constant (stack_pointer_rtx, allocate);
emit_move_insn (eax, gen_rtx_MEM (SImode, t));
}
}

View file

@ -1,3 +1,7 @@
2004-08-05 Richard Sandiford <rsandifo@redhat.com>
* gcc.c-torture/execute/20040805-1.c: New test.
2004-08-04 Andrew Pinski <pinskia@physics.uc.edu>
* gcc.dg/20020118-1.c: Declare abort.

View file

@ -0,0 +1,31 @@
#if __INT_MAX__ < 32768 || (defined(STACK_SIZE) && STACK_SIZE < 0x12000)
int main () { exit (0); }
#else
int a[2] = { 2, 3 };
static int __attribute__((noinline))
bar (int x, void *b)
{
a[0]++;
return x;
}
static int __attribute__((noinline))
foo (int x)
{
char buf[0x10000];
int y = a[0];
a[1] = y;
x = bar (x, buf);
y = bar (y, buf);
return x + y;
}
int
main ()
{
if (foo (100) != 102)
abort ();
exit (0);
}
#endif