74 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
| // RUN: clang -emit-llvm %s
 | |
| 
 | |
| /* Sparc is not C99-compliant */
 | |
| #if defined(sparc) || defined(__sparc__) || defined(__sparcv9)
 | |
| 
 | |
| int main() { return 0; }
 | |
| 
 | |
| #else /* sparc */
 | |
| 
 | |
| #define ESCAPE 2
 | |
| #define IMAGE_WIDTH 150
 | |
| #define IMAGE_HEIGHT 50
 | |
| #if 1
 | |
| #define IMAGE_SIZE 60
 | |
| #else
 | |
| #define IMAGE_SIZE 5000
 | |
| #endif
 | |
| #define START_X -2.1
 | |
| #define END_X 1.0
 | |
| #define START_Y -1.25
 | |
| #define MAX_ITER 100
 | |
| 
 | |
| #define step_X ((END_X - START_X)/IMAGE_WIDTH)
 | |
| #define step_Y ((-START_Y - START_Y)/IMAGE_HEIGHT)
 | |
| 
 | |
| #define I 1.0iF
 | |
| 
 | |
| #if defined(__FreeBSD__) || defined(__OpenBSD__)
 | |
| #include <complex.h>
 | |
| #elif defined(__APPLE__)
 | |
| #include <math.h>
 | |
| #else
 | |
| #include <tgmath.h>
 | |
| #endif
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| volatile double __complex__ accum;
 | |
| 
 | |
| void mandel() {
 | |
|   int x, y, n;
 | |
|   for (y = 0; y < IMAGE_HEIGHT; ++y) {
 | |
|     for (x = 0; x < IMAGE_WIDTH; ++x) {
 | |
|       double __complex__ c = (START_X+x*step_X) + (START_Y+y*step_Y) * I;
 | |
|       double __complex__ z = 0.0;
 | |
| 
 | |
|       for (n = 0; n < MAX_ITER; ++n) {
 | |
|         z = z * z + c;
 | |
|         if (hypot(__real__ z, __imag__ z) >= ESCAPE)
 | |
|           break;
 | |
|       }
 | |
| 
 | |
|       if (n == MAX_ITER)
 | |
|         putchar(' ');
 | |
|       else if (n > 6)
 | |
|         putchar('.');
 | |
|       else if (n > 3)
 | |
|         putchar('+');
 | |
|       else if (n > 2)
 | |
|         putchar('x');
 | |
|       else
 | |
|         putchar('*');
 | |
|     }
 | |
|     putchar('\n');
 | |
|   }
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|   mandel();
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| #endif /* sparc */
 |