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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.dg/] [asmreg-1.c] - Diff between revs 149 and 154

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

Rev 149 Rev 154
/* { dg-do compile { target cris-*-* } } */
/* { dg-do compile { target cris-*-* } } */
/* { dg-options "-O2" } */
/* { dg-options "-O2" } */
/* { dg-final { scan-assembler "\\\.ifnc \\\$r9-\\\$r10-\\\$r11-\\\$r12" } } */
/* { dg-final { scan-assembler "\\\.ifnc \\\$r9-\\\$r10-\\\$r11-\\\$r12" } } */
 
 
/* Sanity check for asm register operands in syscall failed for
/* Sanity check for asm register operands in syscall failed for
   cris-axis-linux-gnu due to regmove bug.
   cris-axis-linux-gnu due to regmove bug.
   Hans-Peter Nilsson <hp@axis.com>.  */
   Hans-Peter Nilsson <hp@axis.com>.  */
 
 
extern void lseek64 (int, long long, int);
extern void lseek64 (int, long long, int);
extern int *__errno_location (void);
extern int *__errno_location (void);
struct dirent64
struct dirent64
{
{
  long long d_off;
  long long d_off;
  unsigned short int d_reclen;
  unsigned short int d_reclen;
  char d_name[256];
  char d_name[256];
};
};
struct kernel_dirent64
struct kernel_dirent64
{
{
  long long d_off;
  long long d_off;
  unsigned short d_reclen;
  unsigned short d_reclen;
  char d_name[256];
  char d_name[256];
};
};
 
 
static inline int __attribute__ ((__always_inline__))
static inline int __attribute__ ((__always_inline__))
__syscall_getdents64 (int fd, char * dirp, unsigned count)
__syscall_getdents64 (int fd, char * dirp, unsigned count)
{
{
  register unsigned long __sys_res asm ("r10");
  register unsigned long __sys_res asm ("r10");
  register unsigned long __r10 __asm__ ("r10") = (unsigned long) fd;
  register unsigned long __r10 __asm__ ("r10") = (unsigned long) fd;
  register unsigned long __r11 __asm__ ("r11") = (unsigned long) dirp;
  register unsigned long __r11 __asm__ ("r11") = (unsigned long) dirp;
  register unsigned long __r12 __asm__ ("r12") = (unsigned long) count;
  register unsigned long __r12 __asm__ ("r12") = (unsigned long) count;
  register unsigned long __callno asm ("r9") = (220);
  register unsigned long __callno asm ("r9") = (220);
  asm volatile (".ifnc %1-%0-%3-%4,$r9-$r10-$r11-$r12\n\t"
  asm volatile (".ifnc %1-%0-%3-%4,$r9-$r10-$r11-$r12\n\t"
                ".err\n\t"
                ".err\n\t"
                ".endif\n\t"
                ".endif\n\t"
                "break 13"
                "break 13"
                : "=r" (__sys_res)
                : "=r" (__sys_res)
                : "r" (__callno), "0" (__r10), "r" (__r11), "r" (__r12)
                : "r" (__callno), "0" (__r10), "r" (__r11), "r" (__r12)
                : "memory");
                : "memory");
  if (__sys_res >= (unsigned long) -4096)
  if (__sys_res >= (unsigned long) -4096)
    {
    {
      (*__errno_location ()) = - __sys_res;
      (*__errno_location ()) = - __sys_res;
      __sys_res = -1;
      __sys_res = -1;
    }
    }
  return __sys_res;
  return __sys_res;
}
}
 
 
int
int
__getdents64 (int fd, char *buf, unsigned nbytes)
__getdents64 (int fd, char *buf, unsigned nbytes)
{
{
  struct dirent64 *dp;
  struct dirent64 *dp;
  long long last_offset = -1;
  long long last_offset = -1;
  int retval;
  int retval;
  struct kernel_dirent64 *skdp, *kdp;
  struct kernel_dirent64 *skdp, *kdp;
  dp = (struct dirent64 *) buf;
  dp = (struct dirent64 *) buf;
  skdp = kdp = __builtin_alloca (nbytes);
  skdp = kdp = __builtin_alloca (nbytes);
  retval = __syscall_getdents64(fd, (char *)kdp, nbytes);
  retval = __syscall_getdents64(fd, (char *)kdp, nbytes);
  if (retval == -1)
  if (retval == -1)
    return -1;
    return -1;
  while ((char *) kdp < (char *) skdp + retval)
  while ((char *) kdp < (char *) skdp + retval)
    {
    {
      if ((char *) dp > buf + nbytes)
      if ((char *) dp > buf + nbytes)
        {
        {
          lseek64(fd, last_offset, 0);
          lseek64(fd, last_offset, 0);
          break;
          break;
        }
        }
      last_offset = kdp->d_off;
      last_offset = kdp->d_off;
      __builtin_memcpy (dp->d_name, kdp->d_name, kdp->d_reclen - 10);
      __builtin_memcpy (dp->d_name, kdp->d_name, kdp->d_reclen - 10);
      dp = (struct dirent64 *) ((char *) dp + sizeof (*dp));
      dp = (struct dirent64 *) ((char *) dp + sizeof (*dp));
      kdp = (struct kernel_dirent64 *) (((char *) kdp) + kdp->d_reclen);
      kdp = (struct kernel_dirent64 *) (((char *) kdp) + kdp->d_reclen);
    }
    }
 
 
  return (char *) dp - buf;
  return (char *) dp - buf;
}
}
 
 

powered by: WebSVN 2.1.0

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