(combine64u a7 a6 a5 a4 a3 a2 a1 a0) merges unsigned bytes, producing the 64-bit
unsigned interpretation of
Function:
(defun combine64u$inline (a7 a6 a5 a4 a3 a2 a1 a0) (declare (type (unsigned-byte 8) a7 a6 a5 a4 a3 a2 a1 a0)) (mbe :logic (logior (ash (nfix a7) 56) (ash (nfix a6) 48) (ash (nfix a5) 40) (ash (nfix a4) 32) (ash (nfix a3) 24) (ash (nfix a2) 16) (ash (nfix a1) 8) (nfix a0)) :exec (b* ((a1 (the (unsigned-byte 16) (ash a1 8))) (ans (the (unsigned-byte 16) (logior (the (unsigned-byte 16) a1) (the (unsigned-byte 16) a0)))) (a2 (the (unsigned-byte 24) (ash a2 16))) (ans (the (unsigned-byte 24) (logior (the (unsigned-byte 24) a2) (the (unsigned-byte 24) ans)))) (a3 (the (unsigned-byte 32) (ash a3 24))) (ans (the (unsigned-byte 32) (logior (the (unsigned-byte 32) a3) (the (unsigned-byte 32) ans)))) (a4 (the (unsigned-byte 40) (ash a4 32))) (ans (the (unsigned-byte 40) (logior (the (unsigned-byte 40) a4) (the (unsigned-byte 40) ans)))) (a5 (the (unsigned-byte 48) (ash a5 40))) (ans (the (unsigned-byte 48) (logior (the (unsigned-byte 48) a5) (the (unsigned-byte 48) ans)))) (a6 (the (unsigned-byte 56) (ash a6 48))) (ans (the (unsigned-byte 56) (logior (the (unsigned-byte 56) a6) (the (unsigned-byte 56) ans)))) (a7 (the (unsigned-byte 64) (ash a7 56)))) (the (unsigned-byte 64) (logior (the (unsigned-byte 64) a7) (the (unsigned-byte 56) ans))))))
Theorem:
(defthm combine64u-unsigned-byte (implies (and (force (unsigned-byte-p 8 a7)) (force (unsigned-byte-p 8 a6)) (force (unsigned-byte-p 8 a5)) (force (unsigned-byte-p 8 a4)) (force (unsigned-byte-p 8 a3)) (force (unsigned-byte-p 8 a2)) (force (unsigned-byte-p 8 a1)) (force (unsigned-byte-p 8 a0))) (unsigned-byte-p 64 (combine64u a7 a6 a5 a4 a3 a2 a1 a0))))