aboutsummaryrefslogtreecommitdiffstats
path: root/test/mppa/instr/i64.c
blob: dc5fa6ee184590dc6894d30d218dae4c59dab50c (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "framework.h"

long long sum(long long a, long long b){
  return a+b;
}

long long diff(long long a, long long b){
  return a-b;
}

long long mul(long long a, long long b){
  return a*b;
}

long long make(long long a){
  return a;
}

long long random_op(long long a, long long b){
  long long d = 3;
  long long (*op)(long long, long long);

  if (a % d == 0)
    op = sum;
  else if (a % d == 1)
    op = diff;
  else
    op = mul;

  return op(a, b);
}

long fact(long a){
  long r = 1;
  long i;
  for (i = 1; i < a; i++)
    r *= i;
  return r;
}

double long2double(long v){
  return v;
}

BEGIN_TEST(long long)
    c = a&b;
    c += a*b;
    c += -a;
    c += a | b;
    c += a-b;
    c += a >> (b & 0x8LL);
    c += a >> (b & 0x8ULL);
    c += a % b;
    c += (a << 4); // addx16d
    c += (a << 3); // addx8d
    c += (a << 2); // addx4d
    c += (a << 1); // addx2d

    c += ~a & b; // andnd

  long long d = 3;
  long long (*op)(long long, long long);

  if (a % d == 0)
    op = sum;
  else if (a % d == 1)
    op = diff;
  else
    op = mul;

  c += op(make(a), make(b));
  c += random_op(a, b);
    c += a/b;
    c += a^b;
    c += (unsigned int) a;

    if (0 != (a & 0x1LL))
        c += fact(1);
    else
        c += fact(2);

    if (0 > (a & 0x1LL))
        c += fact(4);
    else
        c += fact(8);

    if (0 >= (a & 0x1LL) - 1)
        c += fact(16);
    else
        c += fact(32);

    if (a-41414141 > 0)
        c += fact(13);
    else
        c += fact(31);

    if (a & 0x1LL > 0)
        c += fact(64);
    else
        c += fact(128);

    if ((a & 0x1LL) - 1 >= 0)
        c += fact(256);
    else
        c += fact(512);

    if (0 == (a & 0x1LL))
        c += fact(1024);
    else
        c += fact(2048);

    c += ((a & 0x1LL) == (b & 0x1LL));
    c += (a >= b);
    c += (a > b);
    c += (a <= b);
    c += (a < b);
    c += (long) long2double(a) + (long) long2double(b) + (long) long2double(42.3);

    int j;

    for (j = 0 ; j < (b & 0x8LL) ; j++)
        c += a;

    c += ((a & 0x1LL) == (b & 0x1LL));

END_TEST64()