anchor.diff:           (ftype (function ((unsigned-byte 32) (integer -31 31)) (unsigned-byte 32)) mod32ash))
   
   (defun mod32ash (num count)
  -  (declare (type (unsigned-byte 32) num))
  -  (declare (type (integer -31 31) count))
  +  (declare (type (unsigned-byte 32) num)
  +           (type (integer -31 31) count))
  +  #+ecl
  +  (ffi:c-inline (num count)
  +                (:uint32-t :int8-t)
  +                :uint32-t
  +                "(#1 > 0) ? (#0 << #1) : (#0 >> -#1)"
  +                :one-liner t
  +                :side-effects nil)
  +  #-ecl
     (ldb (byte 32 0) (ash num count)))
   
   #+sbcl
  
positive.code: 
  (defun rol64 (a s)
    (declare (type (unsigned-byte 64) a) (type (integer 0 64) s))
    #+(and sbcl ironclad-fast-mod64-arithmetic)
    (sb-rotate-byte:rotate-byte s (byte 64 0) a)
    #-(and sbcl ironclad-fast-mod64-arithmetic)
    (logior (ldb (byte 64 0) (ash a s)) (ash a (- s 64))))
  
  (defun ror64 (a s)
    (declare (type (unsigned-byte 64) a) (type (integer 0 64) s))
    #+(and sbcl ironclad-fast-mod64-arithmetic)
    (sb-rotate-byte:rotate-byte (- s) (byte 64 0) a)
    #-(and sbcl ironclad-fast-mod64-arithmetic)
    (rol64 a (- 64 s)))
  
  
negative.code: 
  (defun mod64* (a b)
    (declare (type (unsigned-byte 64) a b))
    #+ecl
    (ffi:c-inline (a b)
                  (:uint64-t :uint64-t)
                  :uint64-t
                  "#0 * #1"
                  :one-liner t
                  :side-effects nil)
    #-ecl
    (ldb (byte 64 0) (* a b)))
  
  #+sbcl
  