Annotation of gforth/arch/misc/optcmove.fs, revision 1.1

1.1     ! jwilke      1: \ optimized cmove to use cell wide @ and !
        !             2: \ (C) Jens Wilke, PUBLIC DOMAIN
        !             3: 
        !             4: : (cmove)  ( c_from c_to u -- )
        !             5:  bounds ?DO  dup c@ I c! 1+  LOOP  drop ;
        !             6: 
        !             7: : cmove ( c_from c_to u -- )
        !             8:   \ check whether optimization makes sense
        !             9:   dup 20 u< IF (cmove) EXIT THEN
        !            10:   over [ 1 cells 1- ] Literal and >r
        !            11:   rot dup [ 1 cells 1- ] Literal and
        !            12:   dup r> <> 
        !            13:   \ relative cell offset is not identical fallback to (cmove)
        !            14:   IF drop -rot (cmove) EXIT THEN
        !            15:   ?dup 
        !            16:   IF    ( c_to u c_from u2 )
        !            17:         [ 1 cells ] Literal swap -
        !            18:         >r -rot r> tuck - >r >r 2dup r> (cmove) r>
        !            19:   ELSE  -rot
        !            20:   THEN
        !            21:   >r aligned swap aligned swap r>
        !            22:   2dup dup [ 1 cells 1- ] Literal and dup >r - + >r
        !            23:   [ 1 cells 2 = [IF] ]
        !            24:     1
        !            25:   [ [THEN] ]
        !            26:   [ 1 cells 4 = [IF] ]
        !            27:     2
        !            28:   [ [THEN] ]
        !            29:   [ 1 cells 8 = [IF] ]
        !            30:     3
        !            31:   [ [THEN] ]
        !            32:   tuck rshift -rot rshift swap bounds
        !            33:   DO dup @ I cells ! cell+ LOOP
        !            34:   r> r> (cmove) ;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>