+ Correct docs/project/roles_responsibilities.pod location.
[parrot.git] / examples / shootout / nsieve-bits.pir
blob0ba3cc889f51a71713f2e5ad8870ca70fbce9eff
1 #!./parrot -j
3 # nsieve-bits N  (N = 9 for shootout)
4 # by Leopold Toetsch
5 # modified by Joshua Isom
6 # modified by Karl Forner to accept shootout default value of N=2
9 # set bits - this might be cheating see nsieve-bits-2 for resetting bits
11 .sub primes_in_range
12     .param int M
13     .param pmc flags
14     .local int i, count
15     i = 2
16     count = 0
17 lp1:
18      $I0 = flags[i]
19      if $I0 goto not_p
20      .local int j
21      j = i + i
22      if j >= M goto done
23 lp2:
24      flags[j] = 1
25      j += i
26      if j < M goto lp2
27 done:
28      inc count
29 not_p:
30      inc i
31      if i < M goto lp1
32     .return (count)
33 .end
34 .sub main :main
35     .param pmc argv
36     .local int argc, i, j, N, M, count
37         .local pmc flags
39         argc = argv
40         N = 2
41         if argc == 1 goto default
42     $S0 = argv[1]
43         N = $S0
44 default:
45     flags = new 'FixedBooleanArray'
46         M = 1 << N
47         M *= 10000
48         flags = M
49         null i
50     null j
51 loop:
52     $I0 = N - j
53     inc j
54     $I1 = 1 << $I0
55     M = $I1 * 10000
56     count = primes_in_range(M, flags)
57     $P0 = new 'FixedIntegerArray'
58     $P0 = 2
59     $P0[0] = M
60     $P0[1] = count
61     $S0 = sprintf "Primes up to %8u %8u\n", $P0
62     print $S0
63     inc i
64     if i < 3 goto loop
65 .end
66     
68 # Local Variables:
69 #   mode: pir
70 #   fill-column: 100
71 # End:
72 # vim: expandtab shiftwidth=4: