IN: scratchpad [ { byte-array } declare [ 0 alien-unsigned-4 32 shift ] [ 4 alien-unsigned-4 ] bi bitor 64 >signed ] optimized. ! working [ dup >R 0 alien-unsigned-4 32 fixnum-shift R> 4 alien-unsigned-4 over tag 0 eq? [ fixnum-bitor ] [ fixnum>bignum bignum-bitor ] if 18446744073709551615 >R >bignum R> bignum-bitand dup 63 bignum-bit? [ 18446744073709551616 bignum- ] [ ] if ] ! broken [ dup >R 0 alien-unsigned-4 32 fixnum-shift R> 4 alien-unsigned-4 over tag 0 eq? [ fixnum-bitor ] [ fixnum>bignum bignum-bitor ] if dup 63 bignum-bit? [ 18446744073709551616 bignum- ] [ ] if ] The second case correctly eliminates the bitand but incorrectly assumes that the item on the stack (which is an integer -- either a fixnum or a bignum), was converted to a bignum. |
||
---|---|---|
.. | ||
authors.txt | ||
intervals-docs.factor | ||
intervals-tests.factor | ||
intervals.factor | ||
summary.txt |