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.c-torture/] [execute/] [simd-1.c] - Diff between revs 297 and 338

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

Rev 297 Rev 338
/* Origin: Aldy Hernandez <aldyh@redhat.com>
/* Origin: Aldy Hernandez <aldyh@redhat.com>
 
 
   Purpose: Test generic SIMD support.  This test should work
   Purpose: Test generic SIMD support.  This test should work
   regardless of if the target has SIMD instructions.
   regardless of if the target has SIMD instructions.
*/
*/
 
 
typedef int __attribute__((mode(SI))) __attribute__((vector_size (16))) vecint;
typedef int __attribute__((mode(SI))) __attribute__((vector_size (16))) vecint;
typedef int __attribute__((mode(SI))) siint;
typedef int __attribute__((mode(SI))) siint;
 
 
vecint i = { 150, 100, 150, 200 };
vecint i = { 150, 100, 150, 200 };
vecint j = { 10, 13, 20, 30 };
vecint j = { 10, 13, 20, 30 };
vecint k;
vecint k;
 
 
union {
union {
  vecint v;
  vecint v;
  siint i[4];
  siint i[4];
} res;
} res;
 
 
/* This should go away once we can use == and != on vector types.  */
/* This should go away once we can use == and != on vector types.  */
void
void
verify (siint a1, siint a2, siint a3, siint a4,
verify (siint a1, siint a2, siint a3, siint a4,
        siint b1, siint b2, siint b3, siint b4)
        siint b1, siint b2, siint b3, siint b4)
{
{
  if (a1 != b1
  if (a1 != b1
      || a2 != b2
      || a2 != b2
      || a3 != b3
      || a3 != b3
      || a4 != b4)
      || a4 != b4)
    abort ();
    abort ();
}
}
 
 
int
int
main ()
main ()
{
{
  k = i + j;
  k = i + j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 160, 113, 170, 230);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 160, 113, 170, 230);
 
 
  k = i * j;
  k = i * j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 1500, 1300, 3000, 6000);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 1500, 1300, 3000, 6000);
 
 
  k = i / j;
  k = i / j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 15, 7, 7, 6);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 15, 7, 7, 6);
 
 
  k = i & j;
  k = i & j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 2, 4, 20, 8);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 2, 4, 20, 8);
 
 
  k = i | j;
  k = i | j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 158, 109, 150, 222);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 158, 109, 150, 222);
 
 
  k = i ^ j;
  k = i ^ j;
  res.v = k;
  res.v = k;
 
 
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 156, 105, 130, 214);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], 156, 105, 130, 214);
 
 
  k = -i;
  k = -i;
  res.v = k;
  res.v = k;
  verify (res.i[0], res.i[1], res.i[2], res.i[3],
  verify (res.i[0], res.i[1], res.i[2], res.i[3],
          -150, -100, -150, -200);
          -150, -100, -150, -200);
 
 
  k = ~i;
  k = ~i;
  res.v = k;
  res.v = k;
  verify (res.i[0], res.i[1], res.i[2], res.i[3], -151, -101, -151, -201);
  verify (res.i[0], res.i[1], res.i[2], res.i[3], -151, -101, -151, -201);
 
 
  exit (0);
  exit (0);
}
}
 
 

powered by: WebSVN 2.1.0

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