+ Correct docs/project/roles_responsibilities.pod location.
[parrot.git] / examples / shootout / nsieve-bits-2.pir
blob166cadab0db96e2a15545bbbe9bc6073313ca152
1 #!./parrot -j
3 # nsieve-bits-2 N  (N = 9 for shootout)
4 # by Leopold Toetsch
5 # reset bits
6 # modified by Karl Forner to accept shootout default value of N=2
9 .sub primes_in_range
10     .param int M
11     .local pmc flags
12     .local int i, count
13     flags = new 'FixedBooleanArray'
14     flags = M
15     i = 2
16 lp0:
17     flags[i] = 1
18     inc i
19     if i < M goto lp0
20     i = 2
21     count = 0
22 lp1:
23      $I0 = flags[i]
24      unless $I0 goto not_p
25      .local int j
26      j = i + i
27      if j >= M goto done
28 lp2:
29      flags[j] = 0
30      j += i
31      if j < M goto lp2
32 done:
33      inc count
34 not_p:
35      inc i
36      if i < M goto lp1
37     .return (count)
38 .end
39 .sub main :main
40         .param pmc argv
41         .local int argc, i, j, N, M, count
43         N = 2
44         argc = argv
45         if argc == 1 goto default
46     $S0 = argv[1]
47         N = $S0
48 default:
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)
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: