URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 318 |
Rev 338 |
/* PR optimization/11304 */
|
/* PR optimization/11304 */
|
/* Originator: <manuel.serrano@sophia.inria.fr> */
|
/* Originator: <manuel.serrano@sophia.inria.fr> */
|
/* { dg-do run } */
|
/* { dg-do run } */
|
/* { dg-options "-O -fomit-frame-pointer" } */
|
/* { dg-options "-O -fomit-frame-pointer" } */
|
|
|
/* Verify that %eax is always restored after a call. */
|
/* Verify that %eax is always restored after a call. */
|
|
|
extern void abort(void);
|
extern void abort(void);
|
|
|
volatile int r;
|
volatile int r;
|
|
|
void set_eax(int val)
|
void set_eax(int val)
|
{
|
{
|
__asm__ __volatile__ ("mov %0, %%eax" : : "m" (val));
|
__asm__ __volatile__ ("mov %0, %%eax" : : "m" (val));
|
}
|
}
|
|
|
void foo(int val)
|
void foo(int val)
|
{
|
{
|
r = val;
|
r = val;
|
}
|
}
|
|
|
int bar(int x)
|
int bar(int x)
|
{
|
{
|
if (x)
|
if (x)
|
{
|
{
|
set_eax(0);
|
set_eax(0);
|
return x;
|
return x;
|
}
|
}
|
|
|
foo(x);
|
foo(x);
|
}
|
}
|
|
|
int main(void)
|
int main(void)
|
{
|
{
|
if (bar(1) != 1)
|
if (bar(1) != 1)
|
abort();
|
abort();
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.