1// RUN: %clang_cc1 -emit-llvm %s -o %t
2
3/* Sparc is not C99-compliant */
4#if defined(sparc) || defined(__sparc__) || defined(__sparcv9)
5
6int main() { return 0; }
7
8#else /* sparc */
9
10#define ESCAPE 2
11#define IMAGE_WIDTH 150
12#define IMAGE_HEIGHT 50
13#if 1
14#define IMAGE_SIZE 60
15#else
16#define IMAGE_SIZE 5000
17#endif
18#define START_X -2.1
19#define END_X 1.0
20#define START_Y -1.25
21#define MAX_ITER 100
22
23#define step_X ((END_X - START_X)/IMAGE_WIDTH)
24#define step_Y ((-START_Y - START_Y)/IMAGE_HEIGHT)
25
26#define I 1.0iF
27
28int putchar(char c);
29
30volatile double __complex__ accum;
31
32void mandel() {
33  int x, y, n;
34  for (y = 0; y < IMAGE_HEIGHT; ++y) {
35    for (x = 0; x < IMAGE_WIDTH; ++x) {
36      double __complex__ c = (START_X+x*step_X) + (START_Y+y*step_Y) * I;
37      double __complex__ z = 0.0;
38
39      for (n = 0; n < MAX_ITER; ++n) {
40        z = z * z + c;
41        if (hypot(__real__ z, __imag__ z) >= ESCAPE)
42          break;
43      }
44
45      if (n == MAX_ITER)
46        putchar(' ');
47      else if (n > 6)
48        putchar('.');
49      else if (n > 3)
50        putchar('+');
51      else if (n > 2)
52        putchar('x');
53      else
54        putchar('*');
55    }
56    putchar('\n');
57  }
58}
59
60int main() {
61  mandel();
62  return 0;
63}
64
65#endif /* sparc */
66