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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [i386/] [xop-rotate1-int.c] - Blame information for rev 691

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 691 jeremybenn
/* PR target/49411 */
2
/* { dg-do run } */
3
/* { dg-require-effective-target xop } */
4
/* { dg-options "-O2 -mxop" } */
5
 
6
#include "xop-check.h"
7
 
8
#include <x86intrin.h>
9
 
10
extern void abort (void);
11
 
12
union
13
{
14
  __m128i v;
15
  unsigned char c[16];
16
  unsigned short s[8];
17
  unsigned int i[4];
18
  unsigned long long l[2];
19
} a, b, c, d;
20
 
21
#define TEST1(F, N, S, SS) \
22
do {                                                    \
23
  for (i = 0; i < sizeof (a.F) / sizeof (a.F[0]); i++)    \
24
    a.F[i] = i * 17;                                    \
25
  s = _mm_set1_epi##SS (N);                             \
26
  b.v = _mm_roti_epi##S (a.v, N);                       \
27
  c.v = _mm_rot_epi##S (a.v, s);                        \
28
  for (i = 0; i < sizeof (a.F) / sizeof (a.F[0]); i++)    \
29
    {                                                   \
30
      int mask = __CHAR_BIT__ * sizeof (a.F[i]) - 1;    \
31
      d.F[i] = a.F[i] << (N & mask);                    \
32
      if (N & mask)                                     \
33
        d.F[i] |= a.F[i] >> (mask + 1 - (N & mask));    \
34
      if (b.F[i] != c.F[i] || b.F[i] != d.F[i])         \
35
        abort ();                                       \
36
    }                                                   \
37
} while (0)
38
#define TEST(N) \
39
  TEST1 (c, N, 8, 8);                                   \
40
  TEST1 (s, N, 16, 16);                                 \
41
  TEST1 (i, N, 32, 32);                                 \
42
  TEST1 (l, N, 64, 64x)
43
 
44
volatile int n;
45
 
46
static void
47
xop_test (void)
48
{
49
  unsigned int i;
50
  __m128i s;
51
 
52
#ifndef NON_CONST
53
  TEST (5);
54
  TEST (-5);
55
  TEST (0);
56
  TEST (31);
57
#else
58
  n = 5; TEST (n);
59
  n = -5; TEST (n);
60
  n = 0; TEST (n);
61
  n = 31; TEST (n);
62
#endif
63
}

powered by: WebSVN 2.1.0

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