(wml256 lin-addr val x86) → (mv * x86)
Theorem:
(defthm wb-and-wvm256 (implies (and (app-view x86) (canonical-address-p lin-addr) (canonical-address-p (+ 31 lin-addr))) (equal (wvm256 lin-addr val x86) (wb 32 lin-addr :w val x86))))
Function:
(defun wml256 (lin-addr val x86) (declare (xargs :stobjs (x86))) (declare (type (signed-byte 48) lin-addr) (type (unsigned-byte 256) val)) (declare (xargs :guard (canonical-address-p lin-addr))) (let ((__function__ 'wml256)) (declare (ignorable __function__)) (if (mbt (canonical-address-p lin-addr)) (let* ((31+lin-addr (the (signed-byte 49) (+ 31 (the (signed-byte 48) lin-addr))))) (if (mbe :logic (canonical-address-p 31+lin-addr) :exec (< (the (signed-byte 49) 31+lin-addr) 140737488355328)) (if (app-view x86) (mbe :logic (wb 32 lin-addr :w val x86) :exec (wvm256 lin-addr val x86)) (b* (((mv flag (the (unsigned-byte 52) p-addr0) x86) (la-to-pa lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 49) 1+lin-addr) (+ 1 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr1) x86) (la-to-pa 1+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 50) 2+lin-addr) (+ 2 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr2) x86) (la-to-pa 2+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 51) 3+lin-addr) (+ 3 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr3) x86) (la-to-pa 3+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 52) 4+lin-addr) (+ 4 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr4) x86) (la-to-pa 4+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 53) 5+lin-addr) (+ 5 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr5) x86) (la-to-pa 5+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 54) 6+lin-addr) (+ 6 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr6) x86) (la-to-pa 6+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 55) 7+lin-addr) (+ 7 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr7) x86) (la-to-pa 7+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 56) 8+lin-addr) (+ 8 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr8) x86) (la-to-pa 8+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 57) 9+lin-addr) (+ 9 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr9) x86) (la-to-pa 9+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 58) 10+lin-addr) (+ 10 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr10) x86) (la-to-pa 10+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 59) 11+lin-addr) (+ 11 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr11) x86) (la-to-pa 11+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 60) 12+lin-addr) (+ 12 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr12) x86) (la-to-pa 12+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 61) 13+lin-addr) (+ 13 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr13) x86) (la-to-pa 13+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 62) 14+lin-addr) (+ 14 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr14) x86) (la-to-pa 14+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 63) 15+lin-addr) (+ 15 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr15) x86) (la-to-pa 15+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 64) 16+lin-addr) (+ 16 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr16) x86) (la-to-pa 16+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 65) 17+lin-addr) (+ 17 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr17) x86) (la-to-pa 17+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 66) 18+lin-addr) (+ 18 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr18) x86) (la-to-pa 18+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 67) 19+lin-addr) (+ 19 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr19) x86) (la-to-pa 19+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 68) 20+lin-addr) (+ 20 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr20) x86) (la-to-pa 20+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 69) 21+lin-addr) (+ 21 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr21) x86) (la-to-pa 21+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 70) 22+lin-addr) (+ 22 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr22) x86) (la-to-pa 22+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 71) 23+lin-addr) (+ 23 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr23) x86) (la-to-pa 23+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 72) 24+lin-addr) (+ 24 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr24) x86) (la-to-pa 24+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 73) 25+lin-addr) (+ 25 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr25) x86) (la-to-pa 25+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 74) 26+lin-addr) (+ 26 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr26) x86) (la-to-pa 26+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 75) 27+lin-addr) (+ 27 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr27) x86) (la-to-pa 27+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 76) 28+lin-addr) (+ 28 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr28) x86) (la-to-pa 28+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 77) 29+lin-addr) (+ 29 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr29) x86) (la-to-pa 29+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 78) 30+lin-addr) (+ 30 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr30) x86) (la-to-pa 30+lin-addr :w x86)) ((when flag) (mv flag x86)) ((the (signed-byte 79) 31+lin-addr) (+ 31 lin-addr)) ((mv flag (the (unsigned-byte 52) p-addr31) x86) (la-to-pa 31+lin-addr :w x86)) ((when flag) (mv flag x86)) (byte0 (mbe :logic (part-select val :low 0 :width 8) :exec (the (unsigned-byte 8) (logand 255 val)))) (byte1 (mbe :logic (part-select val :low 8 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -8))))) (byte2 (mbe :logic (part-select val :low 16 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -16))))) (byte3 (mbe :logic (part-select val :low 24 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -24))))) (byte4 (mbe :logic (part-select val :low 32 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -32))))) (byte5 (mbe :logic (part-select val :low 40 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -40))))) (byte6 (mbe :logic (part-select val :low 48 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -48))))) (byte7 (mbe :logic (part-select val :low 56 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -56))))) (byte8 (mbe :logic (part-select val :low 64 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -64))))) (byte9 (mbe :logic (part-select val :low 72 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -72))))) (byte10 (mbe :logic (part-select val :low 80 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -80))))) (byte11 (mbe :logic (part-select val :low 88 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -88))))) (byte12 (mbe :logic (part-select val :low 96 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -96))))) (byte13 (mbe :logic (part-select val :low 104 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -104))))) (byte14 (mbe :logic (part-select val :low 112 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -112))))) (byte15 (mbe :logic (part-select val :low 120 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -120))))) (byte16 (mbe :logic (part-select val :low 128 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -128))))) (byte17 (mbe :logic (part-select val :low 136 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -136))))) (byte18 (mbe :logic (part-select val :low 144 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -144))))) (byte19 (mbe :logic (part-select val :low 152 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -152))))) (byte20 (mbe :logic (part-select val :low 160 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -160))))) (byte21 (mbe :logic (part-select val :low 168 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -168))))) (byte22 (mbe :logic (part-select val :low 176 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -176))))) (byte23 (mbe :logic (part-select val :low 184 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -184))))) (byte24 (mbe :logic (part-select val :low 192 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -192))))) (byte25 (mbe :logic (part-select val :low 200 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -200))))) (byte26 (mbe :logic (part-select val :low 208 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -208))))) (byte27 (mbe :logic (part-select val :low 216 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -216))))) (byte28 (mbe :logic (part-select val :low 224 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -224))))) (byte29 (mbe :logic (part-select val :low 232 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -232))))) (byte30 (mbe :logic (part-select val :low 240 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -240))))) (byte31 (mbe :logic (part-select val :low 248 :width 8) :exec (the (unsigned-byte 8) (logand 255 (ash val -248))))) (x86 (!memi p-addr0 byte0 x86)) (x86 (!memi p-addr1 byte1 x86)) (x86 (!memi p-addr2 byte2 x86)) (x86 (!memi p-addr3 byte3 x86)) (x86 (!memi p-addr4 byte4 x86)) (x86 (!memi p-addr5 byte5 x86)) (x86 (!memi p-addr6 byte6 x86)) (x86 (!memi p-addr7 byte7 x86)) (x86 (!memi p-addr8 byte8 x86)) (x86 (!memi p-addr9 byte9 x86)) (x86 (!memi p-addr10 byte10 x86)) (x86 (!memi p-addr11 byte11 x86)) (x86 (!memi p-addr12 byte12 x86)) (x86 (!memi p-addr13 byte13 x86)) (x86 (!memi p-addr14 byte14 x86)) (x86 (!memi p-addr15 byte15 x86)) (x86 (!memi p-addr16 byte16 x86)) (x86 (!memi p-addr17 byte17 x86)) (x86 (!memi p-addr18 byte18 x86)) (x86 (!memi p-addr19 byte19 x86)) (x86 (!memi p-addr20 byte20 x86)) (x86 (!memi p-addr21 byte21 x86)) (x86 (!memi p-addr22 byte22 x86)) (x86 (!memi p-addr23 byte23 x86)) (x86 (!memi p-addr24 byte24 x86)) (x86 (!memi p-addr25 byte25 x86)) (x86 (!memi p-addr26 byte26 x86)) (x86 (!memi p-addr27 byte27 x86)) (x86 (!memi p-addr28 byte28 x86)) (x86 (!memi p-addr29 byte29 x86)) (x86 (!memi p-addr30 byte30 x86)) (x86 (!memi p-addr31 byte31 x86))) (mv nil x86))) (mv 'wml256 x86))) (mv 'wml256 x86))))
Theorem:
(defthm x86p-wml256 (implies (force (x86p x86)) (x86p (mv-nth 1 (wml256 lin-addr val x86)))) :rule-classes (:rewrite :type-prescription))