\ neal@quartus.net 2006
: 2nip ( a b c d -- c d ) 2swap 2drop ;
: ud2/ ( ud1. -- ud2. )
\ Shift an unsigned double-cell value one bit to the right.
d2/ $7fffffff and ;
: ud8/ ( ud1. -- ud2. )
\ Shift an unsigned double-cell value three bits to the right.
ud2/ ud2/ ud2/ ;
: um+ ( ud1. u -- ud2. )
\ Add an unsigned single-cell value to an unsigned double-cell value.
0 d+ ;
: udm* ( ud. u -- ut.. )
\ Multiply an unsigned double-cell value by an unsigned single-cell value
\ to form a triple-cell product.
tuck um* 2swap um* 2swap rot um+ ;
: ud* ( ud1. ud2. -- uq... )
\ Multiply two unsigned double-cell values to form a quadruple-cell product.
2over rot udm* 2>r >r udm* r> um+ 2r> rot um+ ;
: ud10/ ( ud1. -- ud2. )
\ Divide an unsigned double-cell value by 10 by multiplying by a reciprocal.
$cccccccccccccccd. ud* 2nip ud8/ ;