xref: /kvm-unit-tests/x86/sieve.c (revision 71a6a145226927f50d938b0f2befc24363a496bc)
1 #include "alloc.h"
2 #include "libcflat.h"
3 
4 int sieve(char* data, int size)
5 {
6     int i, j, r = 0;
7 
8     for (i = 0; i < size; ++i)
9 	data[i] = 1;
10 
11     data[0] = data[1] = 0;
12 
13     for (i = 2; i < size; ++i)
14 	if (data[i]) {
15 	    ++r;
16 	    for (j = i*2; j < size; j += i)
17 		data[j] = 0;
18 	}
19     return r;
20 }
21 
22 void test_sieve(const char *msg, char *data, int size)
23 {
24     int r;
25 
26     printf("%s:", msg);
27     r = sieve(data, size);
28     printf("%d out of %d\n", r, size);
29 }
30 
31 #define STATIC_SIZE 1000000
32 #define VSIZE 100000000
33 char static_data[STATIC_SIZE];
34 
35 int main()
36 {
37     void *v;
38     int i;
39 
40     printf("starting sieve\n");
41     test_sieve("static", static_data, STATIC_SIZE);
42     setup_vm();
43     test_sieve("mapped", static_data, STATIC_SIZE);
44     for (i = 0; i < 3; ++i) {
45 	v = malloc(VSIZE);
46 	test_sieve("virtual", v, VSIZE);
47 	free(v);
48     }
49 
50     return 0;
51 }
52