OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [gcc.target/] [i386/] [20011119-1.c] - Diff between revs 318 and 338

Only display areas with differences | Details | Blame | View Log

Rev 318 Rev 338
/* Test for reload failing to eliminate from argp to sp.  */
/* Test for reload failing to eliminate from argp to sp.  */
/* { dg-do run } */
/* { dg-do run } */
/* { dg-require-effective-target ilp32 } */
/* { dg-require-effective-target ilp32 } */
/* { dg-require-effective-target nonpic } */
/* { dg-require-effective-target nonpic } */
/* { dg-options "-O2 -fomit-frame-pointer" } */
/* { dg-options "-O2 -fomit-frame-pointer" } */
 
 
static int ustrsize (const char *s);
static int ustrsize (const char *s);
static int (*ucwidth) (int c);
static int (*ucwidth) (int c);
static int (*ugetxc) (const char **s);
static int (*ugetxc) (const char **s);
static int (*usetc) (char *s, int c);
static int (*usetc) (char *s, int c);
 
 
char *ustrzcat(char *dest, int size, const char *src)
char *ustrzcat(char *dest, int size, const char *src)
{
{
   int pos = ustrsize(dest);
   int pos = ustrsize(dest);
   int c;
   int c;
 
 
   size -= pos + ucwidth(0);
   size -= pos + ucwidth(0);
 
 
   while ((c = ugetxc(&src)) != 0) {
   while ((c = ugetxc(&src)) != 0) {
      size -= ucwidth(c);
      size -= ucwidth(c);
      if (size < 0)
      if (size < 0)
         break;
         break;
 
 
      pos += usetc(dest+pos, c);
      pos += usetc(dest+pos, c);
   }
   }
 
 
   usetc(dest+pos, 0);
   usetc(dest+pos, 0);
 
 
   return dest;
   return dest;
}
}
 
 
static int __attribute__((noinline))
static int __attribute__((noinline))
ustrsize (const char *s)
ustrsize (const char *s)
{
{
  return 0;
  return 0;
}
}
 
 
static int
static int
ucwidth_ (int c)
ucwidth_ (int c)
{
{
  return 1;
  return 1;
}
}
 
 
static int
static int
ugetxc_ (const char **s)
ugetxc_ (const char **s)
{
{
  return '\0';
  return '\0';
}
}
 
 
static int
static int
usetc_ (char *s, int c)
usetc_ (char *s, int c)
{
{
  return 1;
  return 1;
}
}
 
 
int
int
main()
main()
{
{
  ucwidth = ucwidth_;
  ucwidth = ucwidth_;
  ugetxc = ugetxc_;
  ugetxc = ugetxc_;
  usetc = usetc_;
  usetc = usetc_;
 
 
  /* ??? It is impossible to explicitly modify the hard frame pointer.
  /* ??? It is impossible to explicitly modify the hard frame pointer.
     This will run afoul of code in flow.c that declines to mark regs
     This will run afoul of code in flow.c that declines to mark regs
     in eliminate_regs in regs_ever_used.  Apparently, we have to wait
     in eliminate_regs in regs_ever_used.  Apparently, we have to wait
     for reload to decide that it won't need a frame pointer before a
     for reload to decide that it won't need a frame pointer before a
     variable can be allocated to %ebp.
     variable can be allocated to %ebp.
 
 
     So save, restore, and clobber %ebp by hand.  */
     So save, restore, and clobber %ebp by hand.  */
 
 
  asm ("pushl %%ebp\n\t"
  asm ("pushl %%ebp\n\t"
       "movl $-1, %%ebp\n\t"
       "movl $-1, %%ebp\n\t"
       "pushl $0\n\t"
       "pushl $0\n\t"
       "pushl $0\n\t"
       "pushl $0\n\t"
       "pushl $0\n\t"
       "pushl $0\n\t"
       "call %P0\n\t"
       "call %P0\n\t"
       "addl $12, %%esp\n\t"
       "addl $12, %%esp\n\t"
       "popl %%ebp"
       "popl %%ebp"
       : : "i"(ustrzcat) : "memory" );
       : : "i"(ustrzcat) : "memory" );
 
 
  return 0;
  return 0;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.