OpenCoverage

make-prime-list.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/make-prime-list.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3typedef unsigned __int128 wide_uint;-
4-
5-
6-
7-
8-
9struct prime-
10{-
11 unsigned p;-
12 wide_uint pinv;-
13 wide_uint lim;-
14};-
15-
16static wide_uint __attribute__ ((__const__))-
17binvert (wide_uint a)-
18{-
19 wide_uint x = 0xf5397db1 >> (4*((a/2) & 0x7));-
20 for (;;)-
21 {-
22 wide_uint y = 2*x - x*x*a;-
23 if (y == x
y == xDescription
TRUEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 3293 times by 1 test
Evaluated by:
  • make-prime-list
)
668-3293
24 return
executed 668 times by 1 test: return x;
Executed by:
  • make-prime-list
x;
executed 668 times by 1 test: return x;
Executed by:
  • make-prime-list
668
25 x = y;-
26 }
executed 3293 times by 1 test: end of block
Executed by:
  • make-prime-list
3293
27}
never executed: end of block
0
28-
29static void-
30process_prime (struct prime *info, unsigned p)-
31{-
32 wide_uint max = -1;-
33 info->p = p;-
34 info->pinv = binvert (p);-
35 info->lim = max / p;-
36}
executed 668 times by 1 test: end of block
Executed by:
  • make-prime-list
668
37-
38static void-
39print_wide_uint (wide_uint n, int nesting, unsigned wide_uint_bits)-
40{-
41-
42-
43-
44 int hex_digits_per_literal = 7;-
45 int bits_per_literal = hex_digits_per_literal * 4;-
46-
47 unsigned remainder = n & ((1 << bits_per_literal) - 1);-
48-
49 if (n != remainder
n != remainderDescription
TRUEevaluated 2672 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
)
668-2672
50 {-
51 int needs_parentheses = n >> bits_per_literal >> bits_per_literal != 0;-
52 if (needs_parentheses
needs_parenthesesDescription
TRUEevaluated 2004 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
)
668-2004
53 printf ("(");
executed 2004 times by 1 test: printf ("(");
Executed by:
  • make-prime-list
2004
54 print_wide_uint (n >> bits_per_literal, nesting + 1, wide_uint_bits);-
55 if (needs_parentheses
needs_parenthesesDescription
TRUEevaluated 2004 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
)
668-2004
56 printf (")\n%*s", nesting + 3, "");
executed 2004 times by 1 test: printf (")\n%*s", nesting + 3, "");
Executed by:
  • make-prime-list
2004
57 printf (" << %d | ", bits_per_literal);-
58 }
executed 2672 times by 1 test: end of block
Executed by:
  • make-prime-list
2672
59 else if (nesting
nestingDescription
TRUEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
FALSEnever evaluated
)
0-668
60 {-
61 printf ("(uintmax_t) ");-
62 hex_digits_per_literal-
63 = ((wide_uint_bits - 1) % bits_per_literal) % 4 + 1;-
64 }
executed 668 times by 1 test: end of block
Executed by:
  • make-prime-list
668
65-
66 printf ("0x%0*xU", hex_digits_per_literal, remainder);-
67}
executed 3340 times by 1 test: end of block
Executed by:
  • make-prime-list
3340
68-
69static void-
70output_primes (const struct prime *primes, unsigned nprimes)-
71{-
72 unsigned i;-
73 unsigned p;-
74 int is_prime;-
75-
76-
77-
78-
79 unsigned wide_uint_bits = 0;-
80 wide_uint mask = -1;-
81 for (wide_uint_bits = 0; mask
maskDescription
TRUEevaluated 128 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
; wide_uint_bits++)
1-128
82 mask >>= 1;
executed 128 times by 1 test: mask >>= 1;
Executed by:
  • make-prime-list
128
83-
84 puts ("/* Generated file -- DO NOT EDIT */\n");-
85 printf ("#define WIDE_UINT_BITS %u\n", wide_uint_bits);-
86-
87 for (i = 0, p = 2; i < nprimes
i < nprimesDescription
TRUEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
; i++)
1-668
88 {-
89 unsigned int d8 = i + 8 < nprimes
i + 8 < nprimesDescription
TRUEevaluated 660 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 8 times by 1 test
Evaluated by:
  • make-prime-list
? primes[i + 8].p - primes[i].p : 0xff;
8-660
90 if (255 < d8
255 < d8Description
TRUEnever evaluated
FALSEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
)
0-668
91 abort ();
never executed: abort ();
0
92 printf ("P (%u, %u,\n (", primes[i].p - p, d8);-
93 print_wide_uint (primes[i].pinv, 0, wide_uint_bits);-
94 printf ("),\n UINTMAX_MAX / %u)\n", primes[i].p);-
95 p = primes[i].p;-
96 }
executed 668 times by 1 test: end of block
Executed by:
  • make-prime-list
668
97-
98 printf ("\n#undef FIRST_OMITTED_PRIME\n");-
99-
100-
101 do-
102 {-
103 p += 2;-
104 for (i = 0, is_prime = 1; is_prime
is_primeDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • make-prime-list
FALSEnever evaluated
; i++)
0-20
105 {-
106 if (primes[i].p * primes[i].p > p
primes[i].p * primes[i].p > pDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 19 times by 1 test
Evaluated by:
  • make-prime-list
)
1-19
107 break;
executed 1 time by 1 test: break;
Executed by:
  • make-prime-list
1
108 if (p * primes[i].pinv <= primes[i].lim
p * primes[i].... primes[i].limDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 18 times by 1 test
Evaluated by:
  • make-prime-list
)
1-18
109 {-
110 is_prime = 0;-
111 break;
executed 1 time by 1 test: break;
Executed by:
  • make-prime-list
1
112 }-
113 }
executed 18 times by 1 test: end of block
Executed by:
  • make-prime-list
18
114 }
executed 2 times by 1 test: end of block
Executed by:
  • make-prime-list
2
115 while (!is_prime
!is_primeDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
);
1
116-
117 printf ("#define FIRST_OMITTED_PRIME %u\n", p);-
118}
executed 1 time by 1 test: end of block
Executed by:
  • make-prime-list
1
119-
120static void *-
121xalloc (size_t s)-
122{-
123 void *p = malloc (s);-
124 if (p
pDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • make-prime-list
FALSEnever evaluated
)
0-2
125 return
executed 2 times by 1 test: return p;
Executed by:
  • make-prime-list
p;
executed 2 times by 1 test: return p;
Executed by:
  • make-prime-list
2
126-
127 fprintf (-
128 stderr-
129 , "Virtual memory exhausted.\n");-
130 exit (
never executed: exit ( 1 );
0
131 1
never executed: exit ( 1 );
0
132 );
never executed: exit ( 1 );
0
133}-
134-
135int-
136main (int argc, char **argv)-
137{-
138 int limit;-
139-
140 char *sieve;-
141 size_t size, i;-
142-
143 struct prime *prime_list;-
144 unsigned nprimes;-
145-
146 if (argc != 2
argc != 2Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
)
0-1
147 {-
148 fprintf (-
149 stderr-
150 , "Usage: %s LIMIT\n"-
151 "Produces a list of odd primes <= LIMIT\n", argv[0]);-
152 return
never executed: return 1 ;
never executed: return 1 ;
0
153 1
never executed: return 1 ;
0
154 ;
never executed: return 1 ;
0
155 }-
156 limit = atoi (argv[1]);-
157 if (limit < 3
limit < 3Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
)
0-1
158 return
never executed: return 0 ;
never executed: return 0 ;
0
159 0
never executed: return 0 ;
0
160 ;
never executed: return 0 ;
0
161-
162-
163 if ( !(limit & 1)
!(limit & 1)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
FALSEnever evaluated
)
0-1
164 limit--;
executed 1 time by 1 test: limit--;
Executed by:
  • make-prime-list
1
165-
166 size = (limit-1)/2;-
167-
168 sieve = xalloc (size);-
169 memset (sieve, 1, size);-
170-
171 prime_list = xalloc (size * sizeof (*prime_list));-
172 nprimes = 0;-
173-
174 for (i = 0; i < size
i < sizeDescription
TRUEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
;)
1-668
175 {-
176 unsigned p = 3+2*i;-
177 unsigned j;-
178-
179 process_prime (&prime_list[nprimes++], p);-
180-
181 for (j = (p*p - 3)/2; j < size
j < sizeDescription
TRUEevaluated 2797 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 668 times by 1 test
Evaluated by:
  • make-prime-list
; j+= p)
668-2797
182 sieve[j] = 0;
executed 2797 times by 1 test: sieve[j] = 0;
Executed by:
  • make-prime-list
2797
183-
184 while (++
++i < sizeDescription
TRUEevaluated 2498 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
i < size
++i < sizeDescription
TRUEevaluated 2498 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
&& sieve[i] == 0
sieve[i] == 0Description
TRUEevaluated 1831 times by 1 test
Evaluated by:
  • make-prime-list
FALSEevaluated 667 times by 1 test
Evaluated by:
  • make-prime-list
)
1-2498
185 ;
executed 1831 times by 1 test: ;
Executed by:
  • make-prime-list
1831
186 }
executed 668 times by 1 test: end of block
Executed by:
  • make-prime-list
668
187-
188 output_primes (prime_list, nprimes);-
189-
190 free (sieve);-
191 free (prime_list);-
192-
193 if (ferror (
ferror ( stdou...ose ( stdout )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
0-1
194 stdout
ferror ( stdou...ose ( stdout )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
0-1
195 ) + fclose (
ferror ( stdou...ose ( stdout )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
0-1
196 stdout
ferror ( stdou...ose ( stdout )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
0-1
197 )
ferror ( stdou...ose ( stdout )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • make-prime-list
)
0-1
198 {-
199 fprintf (-
200 stderr-
201 , "write error: %s\n", strerror (-
202 (*__errno_location ())-
203 ));-
204 return
never executed: return 1 ;
never executed: return 1 ;
0
205 1
never executed: return 1 ;
0
206 ;
never executed: return 1 ;
0
207 }-
208-
209 return
executed 1 time by 1 test: return 0 ;
Executed by:
  • make-prime-list
executed 1 time by 1 test: return 0 ;
Executed by:
  • make-prime-list
1
210 0
executed 1 time by 1 test: return 0 ;
Executed by:
  • make-prime-list
1
211 ;
executed 1 time by 1 test: return 0 ;
Executed by:
  • make-prime-list
1
212}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.1.2