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