fixed precedence constraint
[libfirm] / ir / be / test / sieve.c
1 /* Hey Emacs, this is a -*- C -*- file */
2 /*
3  * Project:     STAC
4  * File name:   test/stantard/sieve.c
5  * Purpose:     test case:  Eratostenes sieve
6  * Author:      Eratostenes
7  * Modified by: Boris Boesler
8  * Created:     17.7.2006
9  * Copyright:   (c) 2006 Dresden Silicon GmbH
10  * Licence:
11  * CVS-ID:      $Id$
12  */
13
14 /* switch to STA code generation */
15 #pragma codegenerator STA
16
17 /* Eratostenes Sieve Prime Number Program in C */
18 #define TRUE 1
19 #define FALSE 0
20 //#define SIZE  8190
21 #define SIZE    100
22 #define ITERATIONS      1
23
24 /* result as local variable to check */
25 /*
26  * sieve(10) = 0x08
27  * sieve(20) = 0x0d
28  * sieve(100) = 0x2d
29  */
30 short res;
31
32 /* the sieve */
33 short flags[SIZE + 1];
34
35 void task_start()
36 {
37   register short i, prime, k, count, iter;
38   count = 0;
39
40   for (iter = 1; iter <= ITERATIONS; iter++) {
41     count = 0;
42
43     /* init solid sieve */
44     for(i = 0; i <= SIZE; i++) {
45       flags[i] = TRUE;
46     }
47
48     /* make holes in sieve */
49     for(i = 0; i <= SIZE; i++) {
50       if(flags[i]) {
51         prime = i + i + 3;
52         for (k = i + prime; k <= SIZE; k += prime) {
53           flags[k] = FALSE;
54         }
55         count++;
56       }
57     }
58   }
59   res = count ;
60 }
61
62 /* switch back to Control Flow Processor code generation */
63 #pragma codegenerator CFP
64
65
66 #ifdef REFERENCE_TESTS
67 int main(int argc, char **argv)
68 {
69   task_start();
70   printf("sieve(%d) = 0x%x\n", SIZE, res);
71 }
72 #endif