[0975e0]: contrib / sb-rotate-byte / rotate-byte.lisp Maximize Restore History

Download this file

rotate-byte.lisp    22 lines (19 with data), 708 Bytes

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
(in-package "SB-ROTATE-BYTE")
(defun rotate-byte (count byte integer)
#+sb-doc "FIXME: Write a docstring"
(rotate-byte count byte integer))
(defun %rotate-byte (count size pos integer)
(let ((count (nth-value 1 (round count size)))
(mask (1- (ash 1 size))))
(logior (logand integer (lognot (ash mask pos)))
(let ((field (logand (ash mask pos) integer)))
(logand (ash mask pos)
(if (> count 0)
(logior (ash field count)
(ash field (- count size)))
(logior (ash field count)
(ash field (+ count size)))))))))
(defun %unsigned-32-rotate-byte (count integer)
;; inhibit transforms
(declare (notinline %rotate-byte))
(%rotate-byte count 32 0 integer))