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