(combine64s a7 a6 a5 a4 a3 a2 a1 a0) merges unsigned bytes, producing the 64-bit
unsigned interpretation of
Function:
(defun combine64s$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 (fast-logext 8 (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 (signed-byte 64) (ash (the (signed-byte 8) (fast-logext 8 a7)) 56)))) (the (signed-byte 64) (logior (the (signed-byte 64) a7) (the (unsigned-byte 56) ans))))))
Theorem:
(defthm combine64s-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))) (signed-byte-p 64 (combine64s a7 a6 a5 a4 a3 a2 a1 a0))))