(x86-cbw/cwd/cdqe proc-mode start-rip temp-rip prefixes rex-byte opcode modr/m sib x86) → x86
Function:
(defun x86-cbw/cwd/cdqe (proc-mode start-rip temp-rip prefixes rex-byte opcode modr/m sib x86) (declare (xargs :stobjs (x86))) (declare (type (integer 0 4) proc-mode) (type (signed-byte 48) start-rip) (type (signed-byte 48) temp-rip) (type (unsigned-byte 52) prefixes) (type (unsigned-byte 8) rex-byte) (type (unsigned-byte 8) opcode) (type (unsigned-byte 8) modr/m) (type (unsigned-byte 8) sib)) (declare (ignorable proc-mode start-rip temp-rip prefixes rex-byte opcode modr/m sib)) (declare (xargs :guard (and (prefixes-p prefixes) (modr/m-p modr/m) (sib-p sib) (rip-guard-okp proc-mode temp-rip)))) (let ((__function__ 'x86-cbw/cwd/cdqe)) (declare (ignorable __function__)) (b* ((?ctx 'x86-cbw/cwd/cdqe)) (b* (((the (integer 1 8) register-size) (select-operand-size proc-mode nil rex-byte nil prefixes nil nil nil x86)) ((the (integer 1 4) src-size) (ash register-size -1)) ((the (unsigned-byte 32) src) (mbe :logic (rgfi-size src-size *rax* rex-byte x86) :exec (case src-size (1 (rr08 *rax* rex-byte x86)) (2 (rr16 *rax* x86)) (4 (rr32 *rax* x86)) (otherwise 0)))) (dst (if (logbitp (the (integer 0 32) (1- (the (integer 0 32) (ash src-size 3)))) src) (trunc register-size (case src-size (1 (n08-to-i08 src)) (2 (n16-to-i16 src)) (t (n32-to-i32 src)))) src)) (x86 (!rgfi-size register-size *rax* dst rex-byte x86)) (x86 (write-*ip proc-mode temp-rip x86))) x86))))
Theorem:
(defthm x86p-of-x86-cbw/cwd/cdqe (implies (x86p x86) (b* ((x86 (x86-cbw/cwd/cdqe proc-mode start-rip temp-rip prefixes rex-byte opcode modr/m sib x86))) (x86p x86))) :rule-classes :rewrite)