(rvm512 addr x86) → (mv * * x86)
Function:
(defun rvm512$inline (addr x86) (declare (xargs :stobjs (x86))) (declare (type (signed-byte 48) addr)) (if (mbt (canonical-address-p addr)) (let* ((32+addr (the (signed-byte 49) (+ 32 (the (signed-byte 48) addr)))) (63+addr (the (signed-byte 49) (+ 63 (the (signed-byte 48) addr))))) (if (mbe :logic (canonical-address-p 63+addr) :exec (< (the (signed-byte 49) 63+addr) 140737488355328)) (b* (((mv flg0 (the (unsigned-byte 256) xword0) x86) (rvm256 addr x86)) ((mv flg1 (the (unsigned-byte 256) xword1) x86) (rvm256 32+addr x86)) ((the (unsigned-byte 512) xxword) (the (unsigned-byte 512) (logior (the (unsigned-byte 512) (ash xword1 256)) xword0)))) (mbe :logic (if (or flg0 flg1) (mv 'rvm512 0 x86) (mv nil xxword x86)) :exec (mv nil xxword x86))) (mv 'rvm512 0 x86))) (mv 'rvm512 0 x86)))
Theorem:
(defthm rvm512-no-error (implies (and (canonical-address-p addr) (canonical-address-p (+ 63 addr))) (equal (mv-nth 0 (rvm512 addr x86)) nil)))
Theorem:
(defthm n512p-mv-nth-1-rvm512 (unsigned-byte-p 512 (mv-nth 1 (rvm512 addr x86))) :rule-classes (:rewrite (:type-prescription :corollary (natp (mv-nth 1 (rvm512 addr x86))) :hints (("Goal" :in-theory '(unsigned-byte-p integer-range-p natp)))) (:linear :corollary (and (<= 0 (mv-nth 1 (rvm512 addr x86))) (< (mv-nth 1 (rvm512 addr x86)) 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096)) :hints (("Goal" :in-theory '(unsigned-byte-p integer-range-p (:e expt)))))))
Theorem:
(defthm x86p-mv-nth-2-rvm512-unchanged (equal (mv-nth 2 (rvm512 addr x86)) x86))
Theorem:
(defthm xr-rvm512 (equal (xr fld index (mv-nth 2 (rvm512 addr x86))) (xr fld index x86)))
Theorem:
(defthm rvm512-xw-values (implies (not (equal fld :mem)) (and (equal (mv-nth 0 (rvm512 addr (xw fld index value x86))) (mv-nth 0 (rvm512 addr x86))) (equal (mv-nth 1 (rvm512 addr (xw fld index value x86))) (mv-nth 1 (rvm512 addr x86))))))