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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [avr/] [torture/] [builtin_insert_bits-2.c] - Blame information for rev 696

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

Line No. Rev Author Line
1 691 jeremybenn
/* { dg-do run } */
2
 
3
#include <stdlib.h>
4
 
5
#define MASK_F(M)                                       \
6
  (0                                                    \
7
   | ((0xf == (0xf & ((M) >> (4*0)))) ? (1 << 0) : 0)   \
8
   | ((0xf == (0xf & ((M) >> (4*1)))) ? (1 << 1) : 0)   \
9
   | ((0xf == (0xf & ((M) >> (4*2)))) ? (1 << 2) : 0)   \
10
   | ((0xf == (0xf & ((M) >> (4*3)))) ? (1 << 3) : 0)   \
11
   | ((0xf == (0xf & ((M) >> (4*4)))) ? (1 << 4) : 0)   \
12
   | ((0xf == (0xf & ((M) >> (4*5)))) ? (1 << 5) : 0)   \
13
   | ((0xf == (0xf & ((M) >> (4*6)))) ? (1 << 6) : 0)   \
14
   | ((0xf == (0xf & ((M) >> (4*7)))) ? (1 << 7) : 0)   \
15
   | 0)
16
 
17
#define MASK_0_7(M)                                     \
18
  (0                                                    \
19
   | ((8 > (0xf & ((M) >> (4*0)))) ? (1 << 0) : 0)      \
20
   | ((8 > (0xf & ((M) >> (4*1)))) ? (1 << 1) : 0)      \
21
   | ((8 > (0xf & ((M) >> (4*2)))) ? (1 << 2) : 0)      \
22
   | ((8 > (0xf & ((M) >> (4*3)))) ? (1 << 3) : 0)      \
23
   | ((8 > (0xf & ((M) >> (4*4)))) ? (1 << 4) : 0)      \
24
   | ((8 > (0xf & ((M) >> (4*5)))) ? (1 << 5) : 0)      \
25
   | ((8 > (0xf & ((M) >> (4*6)))) ? (1 << 6) : 0)      \
26
   | ((8 > (0xf & ((M) >> (4*7)))) ? (1 << 7) : 0)      \
27
   | 0)
28
 
29
#define INSERT_BITS(M,B,V)                                              \
30
  (__extension__({                                                      \
31
      unsigned char _n, _r = 0;                                         \
32
      _n = 0xf & (M >> (4*0)); if (_n<8) _r |= (!!(B & (1 << _n))) << 0; \
33
      _n = 0xf & (M >> (4*1)); if (_n<8) _r |= (!!(B & (1 << _n))) << 1; \
34
      _n = 0xf & (M >> (4*2)); if (_n<8) _r |= (!!(B & (1 << _n))) << 2; \
35
      _n = 0xf & (M >> (4*3)); if (_n<8) _r |= (!!(B & (1 << _n))) << 3; \
36
      _n = 0xf & (M >> (4*4)); if (_n<8) _r |= (!!(B & (1 << _n))) << 4; \
37
      _n = 0xf & (M >> (4*5)); if (_n<8) _r |= (!!(B & (1 << _n))) << 5; \
38
      _n = 0xf & (M >> (4*6)); if (_n<8) _r |= (!!(B & (1 << _n))) << 6; \
39
      _n = 0xf & (M >> (4*7)); if (_n<8) _r |= (!!(B & (1 << _n))) << 7; \
40
      (unsigned char) ((V) & MASK_F(M)) | _r;                           \
41
    }))
42
 
43
#define MASK_USED(M) (MASK_F(M) | MASK_0_7(M))
44
 
45
#define TEST2(M,B,V)                                    \
46
  do {                                                  \
47
    __asm volatile (";" #M);                            \
48
    r1 = MASK_USED (M)                                  \
49
      & __builtin_avr_insert_bits (M,B,V);              \
50
    r2 = INSERT_BITS (M,B,V);                           \
51
    if (r1 != r2)                                       \
52
      abort ();                                         \
53
  } while(0)
54
 
55
void test8 (void)
56
{
57
  unsigned char r1, r2;
58
  unsigned char ib, iv;
59
 
60
  static const unsigned char V[] =
61
    {
62
      0, 0xaa, 0xcc, 0xf0, 0xff, 0x5b, 0x4d
63
    };
64
 
65
  for (ib = 0; ib < sizeof (V) / sizeof (*V); ib++)
66
    {
67
      unsigned char b = V[ib];
68
 
69
      for (iv = 0; iv < sizeof (V) / sizeof (*V); iv++)
70
        {
71
          unsigned char v = V[iv];
72
 
73
          TEST2 (0x76543210, b, v);
74
          TEST2 (0xffffffff, b, v);
75
          TEST2 (0x3210ffff, b, v);
76
          TEST2 (0x67452301, b, v);
77
          TEST2 (0xf0f1f2f3, b, v);
78
          TEST2 (0xff10ff54, b, v);
79
          TEST2 (0x0765f321, b, v);
80
          TEST2 (0x11223344, b, v);
81
          TEST2 (0x01234567, b, v);
82
          TEST2 (0xff7765f3, b, v);
83
        }
84
    }
85
}
86
 
87
/****************************************************************/
88
 
89
int main()
90
{
91
  test8();
92
 
93
  exit(0);
94
}

powered by: WebSVN 2.1.0

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