summaryrefslogtreecommitdiffstats
path: root/gcc/testsuite/gcc.target/avr/torture/builtins-5-countlsfx.c
blob: b0ff5e3d48a43719493a06edd3e7e223390d66b7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* { dg-options "-std=gnu99" } */
/* { dg-do run } */

#include <stdfix.h>

extern void abort (void);

#define DEFTEST1(T,FX)                              \
  int test1_##FX (T x)                              \
  {                                                 \
    return countls##FX (x);                         \
  }                                                 \
                                                    \
  int test1_u##FX (unsigned T x)                    \
  {                                                 \
    return countlsu##FX (x);                        \
  }

DEFTEST1 (short fract, hr)
DEFTEST1 (fract, r)
DEFTEST1 (long fract, lr)
DEFTEST1 (long long fract, llr)

DEFTEST1 (short accum, hk)
DEFTEST1 (accum, k)
DEFTEST1 (long accum, lk)
DEFTEST1 (long long accum, llk)


#define TEST2P(FX, VAL, DD)                                             \
  {                                                                     \
    if (countls##FX (FX##bits (VAL)) != 8 * sizeof (0##FX) - DD)        \
      abort();                                                          \
                                                                        \
    if (countlsu##FX (u##FX##bits (VAL)) != 8 * sizeof (0u##FX) + 1 - DD) \
      abort();                                                          \
  }


#define TEST2M(FX, VAL, DD)                                             \
  {                                                                     \
    if (countls##FX (FX##bits (VAL)) != 8 * sizeof (0##FX) - (DD))      \
      abort();                                                          \
                                                                        \
    if (countlsu##FX (u##FX##bits (VAL)) != 0)                          \
      abort();                                                          \
  }


#define TEST2PX(VAL, DD)                        \
  TEST2P (hr, VAL, DD);                         \
  TEST2P (r,  VAL, DD);                         \
  TEST2P (lr, VAL, DD);                         \
                                                \
  TEST2P (hk, VAL, DD);                         \
  TEST2P (k,  VAL, DD);                         \
  TEST2P (lk, VAL, DD);                         \
  TEST2P (llk, VAL, DD)

#define TEST2MX(VAL, DD)                        \
  TEST2M (hr, VAL,  DD);                        \
  TEST2M (r,  VAL,  DD);                        \
  TEST2M (lr, VAL,  DD);                        \
                                                \
  TEST2M (hk,  VAL, DD);                        \
  TEST2M (k,   VAL, DD);                        \
  TEST2M (lk,  VAL, DD);                        \
  TEST2M (llk, VAL, DD)


int main (void)
{
  TEST2PX (1, 2);
  TEST2PX (2, 3);
  TEST2PX (3, 3);
  
  TEST2MX (-1, 1);
  TEST2MX (-2, 2);
  TEST2MX (-3, 3);
  
  return 0;
}
OpenPOWER on IntegriCloud