1/*
2 * Copyright 2014, NICTA
3 *
4 * This software may be distributed and modified according to the terms of
5 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
6 * See "LICENSE_BSD2.txt" for details.
7 *
8 * @TAG(NICTA_BSD)
9 */
10
11/*
12 * More test cases for word abstraction.
13 */
14
15int callee_flat_s(int bla) {
16  return bla + 1;
17}
18int caller_flat_s(int bla) {
19  return callee_flat_s(bla);
20}
21
22unsigned callee_flat_u_abs(unsigned bla) {
23  return bla + 1;
24}
25unsigned callee_flat_u_noabs(unsigned bla) {
26  return bla + 1;
27}
28
29unsigned caller_flat_u_aa(unsigned bla) {
30  return callee_flat_u_abs(bla);
31}
32unsigned caller_flat_u_an(unsigned bla) {
33  return callee_flat_u_noabs(bla);
34}
35unsigned caller_flat_u_na(unsigned bla) {
36  return callee_flat_u_abs(bla);
37}
38unsigned caller_flat_u_nn(unsigned bla) {
39  return callee_flat_u_noabs(bla);
40}
41
42int callee_deep_s(int bla) {
43  return callee_deep_s(bla + 1);
44}
45int caller_deep_s(int bla) {
46  return callee_deep_s(bla);
47}
48
49unsigned callee_deep_u(unsigned bla) {
50  return callee_deep_u(bla + 1);
51}
52unsigned caller_deep_u(unsigned bla) {
53  return callee_deep_u(bla);
54}
55
56int mutual_s2(int);
57int mutual_s1(int bla) {
58  return mutual_s2(bla + 1);
59}
60int mutual_s2(int bla) {
61  return mutual_s1(bla - 1);
62}
63
64int cross(int a, int b, int c, int d) {
65  return a * c - b * d;
66}
67int gcd_s_rec(int a, int b) {
68  if (a < 0) return gcd_s_rec(-a, b);
69  if (b < 0) return gcd_s_rec(a, -b);
70  if (a > b) return gcd_s_rec(b, a);
71  if (a == 0) return b;
72  return gcd_s_rec(a, b % a);
73}
74int gcd_s_loop(int a, int b) {
75  int c;
76  if (a < 0) a = -a;
77  if (b < 0) b = -b;
78  while (a != 0) {
79    c = a;
80    a = b % a;
81    b = c;
82  }
83  return b;
84}
85
86int sum(int *a, unsigned n) {
87  int s = 0;
88  unsigned i;
89  for (i = 0; i < n; i++) {
90    s += a[i];
91  }
92  return s;
93}
94