Merge git://github.com/littledan/Factor into littledan
commit
5ed0bc72aa
|
@ -8,7 +8,7 @@ layouts compiler.tree.propagation.info compiler.tree.def-use
|
||||||
compiler.tree.debugger compiler.tree.checker slots.private words
|
compiler.tree.debugger compiler.tree.checker slots.private words
|
||||||
hashtables classes assocs locals specialized-arrays system
|
hashtables classes assocs locals specialized-arrays system
|
||||||
sorting math.libm math.floats.private math.integers.private
|
sorting math.libm math.floats.private math.integers.private
|
||||||
math.intervals quotations effects alien alien.data ;
|
math.intervals quotations effects alien alien.data sets ;
|
||||||
FROM: math => float ;
|
FROM: math => float ;
|
||||||
SPECIALIZED-ARRAY: double
|
SPECIALIZED-ARRAY: double
|
||||||
SPECIALIZED-ARRAY: void*
|
SPECIALIZED-ARRAY: void*
|
||||||
|
@ -952,3 +952,13 @@ M: tuple-with-read-only-slot clone
|
||||||
|
|
||||||
! Reduction
|
! Reduction
|
||||||
[ 1 ] [ [ 4 <reversed> [ nth-unsafe ] [ ] unless ] final-info length ] unit-test
|
[ 1 ] [ [ 4 <reversed> [ nth-unsafe ] [ ] unless ] final-info length ] unit-test
|
||||||
|
|
||||||
|
! Optimization on bit?
|
||||||
|
[ t ] [ [ 3 bit? ] { bit? fixnum-bit? } inlined? ] unit-test
|
||||||
|
[ f ] [ [ 500 bit? ] { bit? fixnum-bit? } inlined? ] unit-test
|
||||||
|
|
||||||
|
[ t ] [ [ { 1 } intersect ] { intersect } inlined? ] unit-test
|
||||||
|
[ f ] [ [ { 1 } swap intersect ] { intersect } inlined? ] unit-test ! We could do this
|
||||||
|
|
||||||
|
[ t ] [ [ { 1 } diff ] { diff } inlined? ] unit-test
|
||||||
|
[ f ] [ [ { 1 } swap diff ] { diff } inlined? ] unit-test ! We could do this
|
||||||
|
|
|
@ -284,6 +284,15 @@ CONSTANT: lookup-table-at-max 256
|
||||||
|
|
||||||
\ intersect [ intersect-quot ] 1 define-partial-eval
|
\ intersect [ intersect-quot ] 1 define-partial-eval
|
||||||
|
|
||||||
|
: fixnum-bits ( -- n )
|
||||||
|
cell-bits tag-bits get - ;
|
||||||
|
|
||||||
|
: bit-quot ( #call -- quot/f )
|
||||||
|
in-d>> second value-info interval>> 0 fixnum-bits [a,b] interval-subset?
|
||||||
|
[ [ >fixnum ] dip fixnum-bit? ] f ? ;
|
||||||
|
|
||||||
|
\ bit? [ bit-quot ] "custom-inlining" set-word-prop
|
||||||
|
|
||||||
! Speeds up sum-file, sort and reverse-complement benchmarks by
|
! Speeds up sum-file, sort and reverse-complement benchmarks by
|
||||||
! compiling decoder-readln better
|
! compiling decoder-readln better
|
||||||
\ push [
|
\ push [
|
||||||
|
|
|
@ -58,7 +58,10 @@ M: fixnum shift >fixnum fixnum-shift ; inline
|
||||||
|
|
||||||
M: fixnum bitnot fixnum-bitnot ; inline
|
M: fixnum bitnot fixnum-bitnot ; inline
|
||||||
|
|
||||||
M: fixnum bit? neg shift 1 bitand 0 > ; inline
|
: fixnum-bit? ( n m -- b )
|
||||||
|
neg shift 1 bitand 0 > ; inline
|
||||||
|
|
||||||
|
M: fixnum bit? fixnum-bit? ; inline
|
||||||
|
|
||||||
: fixnum-log2 ( x -- n )
|
: fixnum-log2 ( x -- n )
|
||||||
0 swap [ dup 1 eq? ] [ [ 1 + ] [ 2/ ] bi* ] until drop ;
|
0 swap [ dup 1 eq? ] [ [ 1 + ] [ 2/ ] bi* ] until drop ;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: math math.parser sequences sequences.private kernel
|
USING: math math.parser sequences sequences.private kernel
|
||||||
bit-arrays make io ;
|
bit-arrays make io math.ranges multiline fry locals ;
|
||||||
IN: benchmark.nsieve-bits
|
IN: benchmark.nsieve-bits
|
||||||
|
|
||||||
: clear-flags ( step i seq -- )
|
: clear-flags ( step i seq -- )
|
||||||
|
@ -13,23 +13,24 @@ IN: benchmark.nsieve-bits
|
||||||
2dup length < [
|
2dup length < [
|
||||||
2dup nth-unsafe [
|
2dup nth-unsafe [
|
||||||
over dup 2 * pick clear-flags
|
over dup 2 * pick clear-flags
|
||||||
rot 1 + -rot ! increment count
|
[ 1 + ] 2dip ! increment count
|
||||||
] when [ 1 + ] dip (nsieve-bits)
|
] when [ 1 + ] dip (nsieve-bits)
|
||||||
] [
|
] [
|
||||||
2drop
|
2drop
|
||||||
] if ; inline recursive
|
] if ; inline recursive
|
||||||
|
|
||||||
: nsieve-bits ( m -- count )
|
: nsieve-bits ( m -- count )
|
||||||
0 2 rot 1 + <bit-array> dup set-bits (nsieve-bits) ;
|
[ 0 2 ] dip 1 + <bit-array> dup set-bits (nsieve-bits) ;
|
||||||
|
|
||||||
: nsieve-bits. ( m -- )
|
: nsieve-bits. ( m -- )
|
||||||
[ "Primes up to " % dup # " " % nsieve-bits # ] "" make
|
[ "Primes up to " % dup # " " % nsieve-bits # ] "" make
|
||||||
print ;
|
print ; inline
|
||||||
|
|
||||||
: nsieve-bits-main ( n -- )
|
: nsieve-bits-main ( n -- )
|
||||||
dup 2^ 10000 * nsieve-bits.
|
[ 2^ 10000 * nsieve-bits. ]
|
||||||
dup 1 - 2^ 10000 * nsieve-bits.
|
[ 1 - 2^ 10000 * nsieve-bits. ]
|
||||||
2 - 2^ 10000 * nsieve-bits. ;
|
[ 2 - 2^ 10000 * nsieve-bits. ]
|
||||||
|
tri ;
|
||||||
|
|
||||||
: nsieve-bits-main* ( -- ) 11 nsieve-bits-main ;
|
: nsieve-bits-main* ( -- ) 11 nsieve-bits-main ;
|
||||||
|
|
||||||
|
|
|
@ -13,22 +13,23 @@ IN: benchmark.nsieve
|
||||||
2dup length < [
|
2dup length < [
|
||||||
2dup nth-unsafe [
|
2dup nth-unsafe [
|
||||||
over dup 2 * pick clear-flags
|
over dup 2 * pick clear-flags
|
||||||
rot 1 + -rot ! increment count
|
[ 1 + ] 2dip ! increment count
|
||||||
] when [ 1 + ] dip (nsieve)
|
] when [ 1 + ] dip (nsieve)
|
||||||
] [
|
] [
|
||||||
2drop
|
2drop
|
||||||
] if ; inline recursive
|
] if ; inline recursive
|
||||||
|
|
||||||
: nsieve ( m -- count )
|
: nsieve ( m -- count )
|
||||||
0 2 rot 1 + t <array> (nsieve) ;
|
[ 0 2 ] dip 1 + t <array> (nsieve) ;
|
||||||
|
|
||||||
: nsieve. ( m -- )
|
: nsieve. ( m -- )
|
||||||
[ "Primes up to " % dup # " " % nsieve # ] "" make print ;
|
[ "Primes up to " % dup # " " % nsieve # ] "" make print ;
|
||||||
|
|
||||||
: nsieve-main ( n -- )
|
: nsieve-main ( n -- )
|
||||||
dup 2^ 10000 * nsieve.
|
[ 2^ 10000 * nsieve. ]
|
||||||
dup 1 - 2^ 10000 * nsieve.
|
[ 1 - 2^ 10000 * nsieve. ]
|
||||||
2 - 2^ 10000 * nsieve. ;
|
[ 2 - 2^ 10000 * nsieve. ]
|
||||||
|
tri ;
|
||||||
|
|
||||||
: nsieve-main* ( -- ) 9 nsieve-main ;
|
: nsieve-main* ( -- ) 9 nsieve-main ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue