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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.c-torture/] [execute/] [20031201-1.c] - Rev 849

Go to most recent revision | Compare with Previous | Blame | View Log

/* Copyright (C) 2003  Free Software Foundation.
   PR target/13256
   STRICT_LOW_PART was handled incorrectly in delay slots.
   Origin: Hans-Peter Nilsson.  */
 
typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s1;
typedef struct { unsigned int e0 : 16; unsigned int e1 : 16; } s2;
typedef struct { s1 i12; s2 i16; } io;
static int test_length = 2;
static io *i;
static int m = 1;
static int d = 1;
static unsigned long test_t0;
static unsigned long test_t1;
void test(void) __attribute__ ((__noinline__));
extern int f1 (void *port) __attribute__ ((__noinline__));
extern void f0 (void) __attribute__ ((__noinline__));
int
f1 (void *port)
{
  int fail_count = 0;
  unsigned long tlen;
  s1 x0 = {0};
  s2 x1 = {0};
 
  i = port;
  x0.e0 = x1.e0 = 32;
  i->i12 = x0;
  i->i16 = x1;
  do f0(); while (test_t1);
  x0.e0 = x1.e0 = 8;
  i->i12 = x0;
  i->i16 = x1;
  test ();
  if (m)
    {
      unsigned long e = 1000000000 / 460800 * test_length;
      tlen = test_t1 - test_t0;
      if (((tlen-e) & 0x7FFFFFFF) > 1000)
	f0();
    }
  if (d)
    {
      unsigned long e = 1000000000 / 460800 * test_length;
      tlen = test_t1 - test_t0;
      if (((tlen - e) & 0x7FFFFFFF) > 1000)
	f0();
    }
  return fail_count != 0 ? 1 : 0;
}
 
int
main ()
{
  io io0;
  f1 (&io0);
  abort ();
}
 
void
test (void)
{
  io *iop = i;
  if (iop->i12.e0 != 8 || iop->i16.e0 != 8)
    abort ();
  exit (0);
}
 
void
f0 (void)
{
  static int washere = 0;
  io *iop = i;
  if (washere++ || iop->i12.e0 != 32 || iop->i16.e0 != 32)
    abort ();
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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