diff --git a/extra/benchmark/nsieve-bytes/nsieve-bytes.factor b/extra/benchmark/nsieve-bytes/nsieve-bytes.factor new file mode 100644 index 0000000000..11745e4463 --- /dev/null +++ b/extra/benchmark/nsieve-bytes/nsieve-bytes.factor @@ -0,0 +1,35 @@ +IN: benchmark.nsieve-bytes +USING: math math.parser sequences sequences.private kernel +byte-arrays make io ; + +: clear-flags ( step i seq -- ) + 2dup length >= [ + 3drop + ] [ + 0 2over set-nth-unsafe >r over + r> clear-flags + ] if ; inline recursive + +: (nsieve) ( count i seq -- count ) + 2dup length < [ + 2dup nth-unsafe 0 > [ + over dup 2 * pick clear-flags + rot 1+ -rot ! increment count + ] when >r 1+ r> (nsieve) + ] [ + 2drop + ] if ; inline recursive + +: nsieve ( m -- count ) + 0 2 rot 1+ dup [ drop 1 ] change-each (nsieve) ; + +: nsieve. ( m -- ) + [ "Primes up to " % dup # " " % nsieve # ] "" make print ; + +: nsieve-main ( n -- ) + dup 2^ 10000 * nsieve. + dup 1 - 2^ 10000 * nsieve. + 2 - 2^ 10000 * nsieve. ; + +: nsieve-main* ( -- ) 9 nsieve-main ; + +MAIN: nsieve-main*