Paste: code in imaginary language Mogun :-)
Author: | Maxim Savchenko |
Mode: | factor |
Date: | Sat, 23 May 2009 18:03:36 |
Plain Text |
: drop (| >x |) ;
: dup (| x <x |) ;
: swap (| >x y <x |) ;
GENERIC: downcast
GENERIC: cast-unsafe
SET: fixed { bitcount unsigned } ;
SET: ufixed = fixed ;
SET: sfixed = fixed ;
GENERIC: high-bits
: high-bits
(| x n |) [ ufixed? bitcount>> ] [ unsigned? [a,inf] ] bi*
(| bc n+ |) subset? C! x n bc - shift ;
SET: cell = fixed { bitcount 32 } ;
SET: pointer = fixed { bitcount 32 } { offsize unsigned } ;
SET: fixnum < cell ;
SET: tagged-small < cell ;
SET: tagged-large < cell ;
: cell-tags { fixnum tagged-small tagged-large fixnum } ;
: downcast cell? C! dup >ufixed 2 high-bits cell-tags nth cast-unsafe ;
SET: pointer-small = pointer { offsize 12 } ;
SET: pointer-large = pointer { offsize 21 } ;
GENERIC: untag
GENERIC: page-mask
GENERIC: page
: (untag) C! >ufixed 2 shift ;
: untag tagged-small? C! (untag) >pointer-small ;
: untag tagged-large? C! (untag) >pointer-large ;
: page-mask C! HEX: FFFFFFFF bt integer>ufixed off shift ;
: page pointer? C! dup offsize>> page-mask bitand ;
New Annotation