xref: /llvm-project/polly/lib/External/isl/imath/tests/test.bc (revision 658eb9e14264d48888ade0e3daf0b648f76c3f0e)
1/* e(a, b, m) := a^b (mod m) */
2define e(a, b, m) {
3  auto s, sb;
4
5  sb = obase; obase = 16;
6  s = 1;
7  while(b != 0) {
8    if((b % 2) == 1) {
9      s = (s * a) % m;
10    }
11    b /= 2;
12    a = (a * a) % m;
13  }
14  obase = sb;
15  return (s);
16}
17
18/* g(a, b) := (a, b) */
19define g(a, b) {
20  auto r;
21
22  while(b != 0) {
23    r = a % b;
24    a = b;
25    b = r;
26  }
27  if(a < 0) {
28    return(-a);
29  } else {
30    return(a);
31  }
32}
33
34define a(x) {
35  if(x < 0) {
36    return (-x);
37  } else {
38    return (x);
39  }
40}
41
42xgu = 0; xgv = 0;
43define x(a, b) {
44  auto u, v, x, y, t, r;
45
46  if(a(b) > a(a)) {
47    t = b; b = a; a = t; r = 1;
48  } else {
49    r = 0;
50  }
51
52  u = 1; v = 0;
53  x = 0; y = 1;
54
55  while(b != 0) {
56    t = a / b;
57
58    a = a - (t * b);
59    v = v - (t * y);
60    u = u - (t * x);
61
62    if(a(a) < a(b)) {
63      t = a; a = b; b = t;
64      t = v; v = y; y = t;
65      t = u; u = x; x = t;
66    }
67  }
68
69  if(r) {
70    xgu = v; xgv = u;
71  } else {
72    xgu = u; xgv = v;
73  }
74
75  if(a < 0) {
76    return (-a);
77  } else {
78    return (a);
79  }
80}
81
82define i(a, m) {
83  auto c;
84
85  c = x(a, m);
86  if(c != 1)
87    return(0);
88
89  return ((xgu + m) % m);
90}
91
92scale = 0
93rand_modulus = 2860385147
94rand_base = 129
95rand_seed = 10342799
96
97define srand(s) {
98  rand_seed = s;
99}
100
101define rand(n) {
102  auto r;
103
104  r = (rand_seed * rand_base) % rand_modulus;
105  rand_seed = r;
106  return(r % n);
107}
108
109define rand_digits(k) {
110  auto s;
111
112  s = 0;
113  while(k > 0) {
114    s = (s * 10) + rand(10);
115    k = k - 1;
116  }
117
118  return(s);
119}
120
121define rval(ndigits, probneg) {
122  auto x;
123  x = rand_digits(ndigits);
124  if(probneg > 0 && rand(100) < probneg)
125    x = x * -1;
126  return(x);
127}
128
129for(i = 2; i < 100; i += 4) {
130  value = rand_digits(i);
131  obase = 256;
132  print "readuns:", value;
133  obase = 10;
134  print ":", value, "\n"
135}
136
137/*
138for(i = 2; i < 100; i += 4) {
139  for(j = 0; j < 2; ++j) {
140    ndig = rand(7);
141    base = rval(ndig, 20);
142    expt = rand_digits(i);
143    mod = rand_digits(i);
144
145    result = e(base, expt, mod);
146    if(result < 0) {
147      result = result + mod;
148    }
149    print "emodbv:", base, ",", expt, ",", mod, ",0:", result, "\n";
150    print "emodbv:", base, ",", expt, ",", mod, ",=2:", result, "\n";
151    print "emodbv:", base, ",", expt, ",", mod, ",=3:", result, "\n";
152  }
153}
154*/
155halt
156