• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
      • Kestrel-books
      • X86isa
        • Program-execution
        • Sdm-instruction-set-summary
        • Tlb
        • Running-linux
        • Introduction
        • Asmtest
        • X86isa-build-instructions
        • Publications
        • Contributors
        • Machine
        • Implemented-opcodes
        • To-do
        • Proof-utilities
        • Peripherals
        • Model-validation
        • Modelcalls
        • Concrete-simulation-examples
        • Utils
          • Structures
            • Rflagsbits
            • Cr4bits
            • Xcr0bits
            • Cr0bits
            • Prefixes
            • Ia32_eferbits
            • Evex-byte1
              • !evex-byte1->r-prime
              • !evex-byte1->mmm
              • !evex-byte1->res
              • !evex-byte1->x
              • !evex-byte1->r
              • !evex-byte1->b
              • Evex-byte1-p
              • Evex-byte1->r-prime
              • Evex-byte1-fix
              • Evex-byte1->x
              • Evex-byte1->res
              • Evex-byte1->r
              • Evex-byte1->mmm
              • Evex-byte1->b
            • Cr3bits
            • Evex-byte3
            • Vex3-byte2
            • Vex3-byte1
            • Vex2-byte1
            • Evex-prefixes
            • Evex-byte2
            • Vex-prefixes
            • Sib
            • Modr/m-structures
            • Vex-prefixes-layout-structures
            • Sib-structures
            • Legacy-prefixes-layout-structure
            • Evex-prefixes-layout-structures
            • Cr8bits
            • Opcode-maps-structures
            • Segmentation-bitstructs
            • 8bits
            • 2bits
            • 4bits
            • 16bits
            • Paging-bitstructs
            • 3bits
            • 11bits
            • 40bits
            • 5bits
            • 32bits
            • 19bits
            • 10bits
            • 7bits
            • 64bits
            • 54bits
            • 45bits
            • 36bits
            • 31bits
            • 24bits
            • 22bits
            • 17bits
            • 13bits
            • 12bits
            • 6bits
            • Vex->x
            • Vex->b
            • Vex-prefixes-map-p
            • Vex-prefixes-byte0-p
            • Vex->w
            • Vex->vvvv
            • Vex->r
            • Fp-bitstructs
            • Cr4bits-debug
            • Vex->pp
            • Vex->l
            • Rflagsbits-debug
            • Evex->v-prime
            • Evex->z
            • Evex->w
            • Evex->vvvv
            • Evex->vl/rc
            • Evex->pp
            • Evex->aaa
            • Xcr0bits-debug
            • Vex3-byte1-equiv-under-mask
            • Vex3-byte2-equiv-under-mask
            • Vex2-byte1-equiv-under-mask
            • Vex-prefixes-equiv-under-mask
            • Rflagsbits-equiv-under-mask
            • Ia32_eferbits-equiv-under-mask
            • Evex-prefixes-equiv-under-mask
            • Evex-byte3-equiv-under-mask
            • Evex-byte2-equiv-under-mask
            • Evex-byte1-equiv-under-mask
            • Cr0bits-debug
            • Xcr0bits-equiv-under-mask
            • Sib-equiv-under-mask
            • Prefixes-equiv-under-mask
            • Cr8bits-equiv-under-mask
            • Cr4bits-equiv-under-mask
            • Cr3bits-equiv-under-mask
            • Cr0bits-equiv-under-mask
            • Vex3-byte1-debug
            • Prefixes-debug
            • Ia32_eferbits-debug
            • Evex-byte1-debug
            • Vex3-byte2-debug
            • Vex2-byte1-debug
            • Vex-prefixes-debug
            • Evex-prefixes-debug
            • Evex-byte3-debug
            • Evex-byte2-debug
            • Cr3bits-debug
            • Sib-debug
            • Cr8bits-debug
          • Utilities
        • Debugging-code-proofs
      • Axe
      • Execloader
    • Math
    • Testing-utilities
  • Structures

Evex-byte1

An 8-bit unsigned bitstruct type.

This is a bitstruct type introduced by defbitstruct, represented as a unsigned 8-bit integer.

Fields
mmm — 3bits
Access to up to 8 decoding maps (currently only 1, 2, 3, 5, 6). Compressed legacy escape -- low two bits identical to VEX.pp.
res — bit
Reserved; must be zero.
r-prime — bit
High-16 register specifier modifier -- combine with EVEX.R and ModR/M.reg.
b — bit
x — bit
Must be set to 1 in 32-bit mode, otherwise instruction is BOUND.
r — bit
Must be set to 1 in 32-bit mode. otherwise instruction is BOUND.

Definitions and Theorems

Function: evex-byte1-p$inline

(defun evex-byte1-p$inline (byte1)
  (declare (xargs :guard t))
  (mbe :logic (unsigned-byte-p 8 byte1)
       :exec (and (natp byte1) (< byte1 256))))

Theorem: evex-byte1-p-when-unsigned-byte-p

(defthm evex-byte1-p-when-unsigned-byte-p
  (implies (unsigned-byte-p 8 byte1)
           (evex-byte1-p byte1)))

Theorem: unsigned-byte-p-when-evex-byte1-p

(defthm unsigned-byte-p-when-evex-byte1-p
  (implies (evex-byte1-p byte1)
           (unsigned-byte-p 8 byte1)))

Theorem: evex-byte1-p-compound-recognizer

(defthm evex-byte1-p-compound-recognizer
  (implies (evex-byte1-p byte1)
           (natp byte1))
  :rule-classes :compound-recognizer)

Function: evex-byte1-fix$inline

(defun evex-byte1-fix$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic (loghead 8 byte1)
       :exec byte1))

Theorem: evex-byte1-p-of-evex-byte1-fix

(defthm evex-byte1-p-of-evex-byte1-fix
  (b* ((fty::fixed (evex-byte1-fix$inline byte1)))
    (evex-byte1-p fty::fixed))
  :rule-classes :rewrite)

Theorem: evex-byte1-fix-when-evex-byte1-p

(defthm evex-byte1-fix-when-evex-byte1-p
  (implies (evex-byte1-p byte1)
           (equal (evex-byte1-fix byte1) byte1)))

Function: evex-byte1-equiv$inline

(defun evex-byte1-equiv$inline (x y)
  (declare (xargs :guard (and (evex-byte1-p x)
                              (evex-byte1-p y))))
  (equal (evex-byte1-fix x)
         (evex-byte1-fix y)))

Theorem: evex-byte1-equiv-is-an-equivalence

(defthm evex-byte1-equiv-is-an-equivalence
  (and (booleanp (evex-byte1-equiv x y))
       (evex-byte1-equiv x x)
       (implies (evex-byte1-equiv x y)
                (evex-byte1-equiv y x))
       (implies (and (evex-byte1-equiv x y)
                     (evex-byte1-equiv y z))
                (evex-byte1-equiv x z)))
  :rule-classes (:equivalence))

Theorem: evex-byte1-equiv-implies-equal-evex-byte1-fix-1

(defthm evex-byte1-equiv-implies-equal-evex-byte1-fix-1
  (implies (evex-byte1-equiv x x-equiv)
           (equal (evex-byte1-fix x)
                  (evex-byte1-fix x-equiv)))
  :rule-classes (:congruence))

Theorem: evex-byte1-fix-under-evex-byte1-equiv

(defthm evex-byte1-fix-under-evex-byte1-equiv
  (evex-byte1-equiv (evex-byte1-fix x) x)
  :rule-classes (:rewrite :rewrite-quoted-constant))

Function: evex-byte1$inline

(defun evex-byte1$inline (mmm res r-prime b x r)
  (declare (xargs :guard (and (3bits-p mmm)
                              (bitp res)
                              (bitp r-prime)
                              (bitp b)
                              (bitp x)
                              (bitp r))))
  (b* ((mmm (mbe :logic (3bits-fix mmm) :exec mmm))
       (res (mbe :logic (bfix res) :exec res))
       (r-prime (mbe :logic (bfix r-prime)
                     :exec r-prime))
       (b (mbe :logic (bfix b) :exec b))
       (x (mbe :logic (bfix x) :exec x))
       (r (mbe :logic (bfix r) :exec r)))
    (logapp 3 mmm
            (logapp 1 res
                    (logapp 1
                            r-prime (logapp 1 b (logapp 1 x r)))))))

Theorem: evex-byte1-p-of-evex-byte1

(defthm evex-byte1-p-of-evex-byte1
  (b* ((evex-byte1 (evex-byte1$inline mmm res r-prime b x r)))
    (evex-byte1-p evex-byte1))
  :rule-classes :rewrite)

Theorem: evex-byte1$inline-of-3bits-fix-mmm

(defthm evex-byte1$inline-of-3bits-fix-mmm
  (equal (evex-byte1$inline (3bits-fix mmm)
                            res r-prime b x r)
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-3bits-equiv-congruence-on-mmm

(defthm evex-byte1$inline-3bits-equiv-congruence-on-mmm
  (implies (3bits-equiv mmm mmm-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm-equiv res r-prime b x r)))
  :rule-classes :congruence)

Theorem: evex-byte1$inline-of-bfix-res

(defthm evex-byte1$inline-of-bfix-res
  (equal (evex-byte1$inline mmm (bfix res)
                            r-prime b x r)
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-bit-equiv-congruence-on-res

(defthm evex-byte1$inline-bit-equiv-congruence-on-res
  (implies (bit-equiv res res-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm res-equiv r-prime b x r)))
  :rule-classes :congruence)

Theorem: evex-byte1$inline-of-bfix-r-prime

(defthm evex-byte1$inline-of-bfix-r-prime
  (equal (evex-byte1$inline mmm res (bfix r-prime)
                            b x r)
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-bit-equiv-congruence-on-r-prime

(defthm evex-byte1$inline-bit-equiv-congruence-on-r-prime
  (implies (bit-equiv r-prime r-prime-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm res r-prime-equiv b x r)))
  :rule-classes :congruence)

Theorem: evex-byte1$inline-of-bfix-b

(defthm evex-byte1$inline-of-bfix-b
  (equal (evex-byte1$inline mmm res r-prime (bfix b)
                            x r)
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-bit-equiv-congruence-on-b

(defthm evex-byte1$inline-bit-equiv-congruence-on-b
  (implies (bit-equiv b b-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm res r-prime b-equiv x r)))
  :rule-classes :congruence)

Theorem: evex-byte1$inline-of-bfix-x

(defthm evex-byte1$inline-of-bfix-x
  (equal (evex-byte1$inline mmm res r-prime b (bfix x)
                            r)
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-bit-equiv-congruence-on-x

(defthm evex-byte1$inline-bit-equiv-congruence-on-x
  (implies (bit-equiv x x-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm res r-prime b x-equiv r)))
  :rule-classes :congruence)

Theorem: evex-byte1$inline-of-bfix-r

(defthm evex-byte1$inline-of-bfix-r
  (equal (evex-byte1$inline mmm res r-prime b x (bfix r))
         (evex-byte1$inline mmm res r-prime b x r)))

Theorem: evex-byte1$inline-bit-equiv-congruence-on-r

(defthm evex-byte1$inline-bit-equiv-congruence-on-r
  (implies (bit-equiv r r-equiv)
           (equal (evex-byte1$inline mmm res r-prime b x r)
                  (evex-byte1$inline mmm res r-prime b x r-equiv)))
  :rule-classes :congruence)

Function: evex-byte1-equiv-under-mask$inline

(defun evex-byte1-equiv-under-mask$inline (byte1 byte11 mask)
  (declare (xargs :guard (and (evex-byte1-p byte1)
                              (evex-byte1-p byte11)
                              (integerp mask))))
  (fty::int-equiv-under-mask (evex-byte1-fix byte1)
                             (evex-byte1-fix byte11)
                             mask))

Function: evex-byte1->mmm$inline

(defun evex-byte1->mmm$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 0 :width 3))
       :exec (the (unsigned-byte 3)
                  (logand (the (unsigned-byte 3) 7)
                          (the (unsigned-byte 8) byte1)))))

Theorem: 3bits-p-of-evex-byte1->mmm

(defthm 3bits-p-of-evex-byte1->mmm
  (b* ((mmm (evex-byte1->mmm$inline byte1)))
    (3bits-p mmm))
  :rule-classes :rewrite)

Theorem: evex-byte1->mmm$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->mmm$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->mmm$inline (evex-byte1-fix byte1))
         (evex-byte1->mmm$inline byte1)))

Theorem: evex-byte1->mmm$inline-evex-byte1-equiv-congruence-on-byte1

(defthm evex-byte1->mmm$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->mmm$inline byte1)
                  (evex-byte1->mmm$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->mmm-of-evex-byte1

(defthm evex-byte1->mmm-of-evex-byte1
  (equal (evex-byte1->mmm (evex-byte1 mmm res r-prime b x r))
         (3bits-fix mmm)))

Theorem: evex-byte1->mmm-of-write-with-mask

(defthm evex-byte1->mmm-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 7) 0))
           (equal (evex-byte1->mmm byte1)
                  (evex-byte1->mmm y))))

Function: evex-byte1->res$inline

(defun evex-byte1->res$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 3 :width 1))
       :exec (the (unsigned-byte 1)
                  (logand (the (unsigned-byte 1) 1)
                          (the (unsigned-byte 5)
                               (ash (the (unsigned-byte 8) byte1)
                                    -3))))))

Theorem: bitp-of-evex-byte1->res

(defthm bitp-of-evex-byte1->res
  (b* ((res (evex-byte1->res$inline byte1)))
    (bitp res))
  :rule-classes :rewrite)

Theorem: evex-byte1->res$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->res$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->res$inline (evex-byte1-fix byte1))
         (evex-byte1->res$inline byte1)))

Theorem: evex-byte1->res$inline-evex-byte1-equiv-congruence-on-byte1

(defthm evex-byte1->res$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->res$inline byte1)
                  (evex-byte1->res$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->res-of-evex-byte1

(defthm evex-byte1->res-of-evex-byte1
  (equal (evex-byte1->res (evex-byte1 mmm res r-prime b x r))
         (bfix res)))

Theorem: evex-byte1->res-of-write-with-mask

(defthm evex-byte1->res-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 8) 0))
           (equal (evex-byte1->res byte1)
                  (evex-byte1->res y))))

Function: evex-byte1->r-prime$inline

(defun evex-byte1->r-prime$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 4 :width 1))
       :exec (the (unsigned-byte 1)
                  (logand (the (unsigned-byte 1) 1)
                          (the (unsigned-byte 4)
                               (ash (the (unsigned-byte 8) byte1)
                                    -4))))))

Theorem: bitp-of-evex-byte1->r-prime

(defthm bitp-of-evex-byte1->r-prime
  (b* ((r-prime (evex-byte1->r-prime$inline byte1)))
    (bitp r-prime))
  :rule-classes :rewrite)

Theorem: evex-byte1->r-prime$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->r-prime$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->r-prime$inline (evex-byte1-fix byte1))
         (evex-byte1->r-prime$inline byte1)))

Theorem: evex-byte1->r-prime$inline-evex-byte1-equiv-congruence-on-byte1

(defthm
    evex-byte1->r-prime$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->r-prime$inline byte1)
                  (evex-byte1->r-prime$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->r-prime-of-evex-byte1

(defthm evex-byte1->r-prime-of-evex-byte1
  (equal (evex-byte1->r-prime (evex-byte1 mmm res r-prime b x r))
         (bfix r-prime)))

Theorem: evex-byte1->r-prime-of-write-with-mask

(defthm evex-byte1->r-prime-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 16)
                       0))
           (equal (evex-byte1->r-prime byte1)
                  (evex-byte1->r-prime y))))

Function: evex-byte1->b$inline

(defun evex-byte1->b$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 5 :width 1))
       :exec (the (unsigned-byte 1)
                  (logand (the (unsigned-byte 1) 1)
                          (the (unsigned-byte 3)
                               (ash (the (unsigned-byte 8) byte1)
                                    -5))))))

Theorem: bitp-of-evex-byte1->b

(defthm bitp-of-evex-byte1->b
  (b* ((b (evex-byte1->b$inline byte1)))
    (bitp b))
  :rule-classes :rewrite)

Theorem: evex-byte1->b$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->b$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->b$inline (evex-byte1-fix byte1))
         (evex-byte1->b$inline byte1)))

Theorem: evex-byte1->b$inline-evex-byte1-equiv-congruence-on-byte1

(defthm evex-byte1->b$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->b$inline byte1)
                  (evex-byte1->b$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->b-of-evex-byte1

(defthm evex-byte1->b-of-evex-byte1
  (equal (evex-byte1->b (evex-byte1 mmm res r-prime b x r))
         (bfix b)))

Theorem: evex-byte1->b-of-write-with-mask

(defthm evex-byte1->b-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 32)
                       0))
           (equal (evex-byte1->b byte1)
                  (evex-byte1->b y))))

Function: evex-byte1->x$inline

(defun evex-byte1->x$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 6 :width 1))
       :exec (the (unsigned-byte 1)
                  (logand (the (unsigned-byte 1) 1)
                          (the (unsigned-byte 2)
                               (ash (the (unsigned-byte 8) byte1)
                                    -6))))))

Theorem: bitp-of-evex-byte1->x

(defthm bitp-of-evex-byte1->x
  (b* ((x (evex-byte1->x$inline byte1)))
    (bitp x))
  :rule-classes :rewrite)

Theorem: evex-byte1->x$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->x$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->x$inline (evex-byte1-fix byte1))
         (evex-byte1->x$inline byte1)))

Theorem: evex-byte1->x$inline-evex-byte1-equiv-congruence-on-byte1

(defthm evex-byte1->x$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->x$inline byte1)
                  (evex-byte1->x$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->x-of-evex-byte1

(defthm evex-byte1->x-of-evex-byte1
  (equal (evex-byte1->x (evex-byte1 mmm res r-prime b x r))
         (bfix x)))

Theorem: evex-byte1->x-of-write-with-mask

(defthm evex-byte1->x-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 64)
                       0))
           (equal (evex-byte1->x byte1)
                  (evex-byte1->x y))))

Function: evex-byte1->r$inline

(defun evex-byte1->r$inline (byte1)
  (declare (xargs :guard (evex-byte1-p byte1)))
  (mbe :logic
       (let ((byte1 (evex-byte1-fix byte1)))
         (part-select byte1 :low 7 :width 1))
       :exec (the (unsigned-byte 1)
                  (logand (the (unsigned-byte 1) 1)
                          (the (unsigned-byte 1)
                               (ash (the (unsigned-byte 8) byte1)
                                    -7))))))

Theorem: bitp-of-evex-byte1->r

(defthm bitp-of-evex-byte1->r
  (b* ((r (evex-byte1->r$inline byte1)))
    (bitp r))
  :rule-classes :rewrite)

Theorem: evex-byte1->r$inline-of-evex-byte1-fix-byte1

(defthm evex-byte1->r$inline-of-evex-byte1-fix-byte1
  (equal (evex-byte1->r$inline (evex-byte1-fix byte1))
         (evex-byte1->r$inline byte1)))

Theorem: evex-byte1->r$inline-evex-byte1-equiv-congruence-on-byte1

(defthm evex-byte1->r$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (evex-byte1->r$inline byte1)
                  (evex-byte1->r$inline byte1-equiv)))
  :rule-classes :congruence)

Theorem: evex-byte1->r-of-evex-byte1

(defthm evex-byte1->r-of-evex-byte1
  (equal (evex-byte1->r (evex-byte1 mmm res r-prime b x r))
         (bfix r)))

Theorem: evex-byte1->r-of-write-with-mask

(defthm evex-byte1->r-of-write-with-mask
  (implies (and (fty::bitstruct-read-over-write-hyps
                     byte1 evex-byte1-equiv-under-mask)
                (evex-byte1-equiv-under-mask byte1 y fty::mask)
                (equal (logand (lognot fty::mask) 128)
                       0))
           (equal (evex-byte1->r byte1)
                  (evex-byte1->r y))))

Theorem: evex-byte1-fix-in-terms-of-evex-byte1

(defthm evex-byte1-fix-in-terms-of-evex-byte1
  (equal (evex-byte1-fix byte1)
         (change-evex-byte1 byte1)))

Function: !evex-byte1->mmm$inline

(defun !evex-byte1->mmm$inline (mmm byte1)
  (declare (xargs :guard (and (3bits-p mmm)
                              (evex-byte1-p byte1))))
  (mbe :logic
       (b* ((mmm (mbe :logic (3bits-fix mmm) :exec mmm))
            (byte1 (evex-byte1-fix byte1)))
         (part-install mmm byte1
                       :width 3
                       :low 0))
       :exec (the (unsigned-byte 8)
                  (logior (the (unsigned-byte 8)
                               (logand (the (unsigned-byte 8) byte1)
                                       (the (signed-byte 4) -8)))
                          (the (unsigned-byte 3) mmm)))))

Theorem: evex-byte1-p-of-!evex-byte1->mmm

(defthm evex-byte1-p-of-!evex-byte1->mmm
  (b* ((new-byte1 (!evex-byte1->mmm$inline mmm byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->mmm$inline-of-3bits-fix-mmm

(defthm !evex-byte1->mmm$inline-of-3bits-fix-mmm
  (equal (!evex-byte1->mmm$inline (3bits-fix mmm)
                                  byte1)
         (!evex-byte1->mmm$inline mmm byte1)))

Theorem: !evex-byte1->mmm$inline-3bits-equiv-congruence-on-mmm

(defthm !evex-byte1->mmm$inline-3bits-equiv-congruence-on-mmm
  (implies (3bits-equiv mmm mmm-equiv)
           (equal (!evex-byte1->mmm$inline mmm byte1)
                  (!evex-byte1->mmm$inline mmm-equiv byte1)))
  :rule-classes :congruence)

Theorem: !evex-byte1->mmm$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->mmm$inline-of-evex-byte1-fix-byte1
  (equal (!evex-byte1->mmm$inline mmm (evex-byte1-fix byte1))
         (!evex-byte1->mmm$inline mmm byte1)))

Theorem: !evex-byte1->mmm$inline-evex-byte1-equiv-congruence-on-byte1

(defthm !evex-byte1->mmm$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (!evex-byte1->mmm$inline mmm byte1)
                  (!evex-byte1->mmm$inline mmm byte1-equiv)))
  :rule-classes :congruence)

Theorem: !evex-byte1->mmm-is-evex-byte1

(defthm !evex-byte1->mmm-is-evex-byte1
  (equal (!evex-byte1->mmm mmm byte1)
         (change-evex-byte1 byte1 :mmm mmm)))

Theorem: evex-byte1->mmm-of-!evex-byte1->mmm

(defthm evex-byte1->mmm-of-!evex-byte1->mmm
  (b* ((?new-byte1 (!evex-byte1->mmm$inline mmm byte1)))
    (equal (evex-byte1->mmm new-byte1)
           (3bits-fix mmm))))

Theorem: !evex-byte1->mmm-equiv-under-mask

(defthm !evex-byte1->mmm-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->mmm$inline mmm byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 -8)))

Function: !evex-byte1->res$inline

(defun !evex-byte1->res$inline (res byte1)
 (declare (xargs :guard (and (bitp res) (evex-byte1-p byte1))))
 (mbe
    :logic
    (b* ((res (mbe :logic (bfix res) :exec res))
         (byte1 (evex-byte1-fix byte1)))
      (part-install res byte1
                    :width 1
                    :low 3))
    :exec (the (unsigned-byte 8)
               (logior (the (unsigned-byte 8)
                            (logand (the (unsigned-byte 8) byte1)
                                    (the (signed-byte 5) -9)))
                       (the (unsigned-byte 4)
                            (ash (the (unsigned-byte 1) res) 3))))))

Theorem: evex-byte1-p-of-!evex-byte1->res

(defthm evex-byte1-p-of-!evex-byte1->res
  (b* ((new-byte1 (!evex-byte1->res$inline res byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->res$inline-of-bfix-res

(defthm !evex-byte1->res$inline-of-bfix-res
  (equal (!evex-byte1->res$inline (bfix res)
                                  byte1)
         (!evex-byte1->res$inline res byte1)))

Theorem: !evex-byte1->res$inline-bit-equiv-congruence-on-res

(defthm !evex-byte1->res$inline-bit-equiv-congruence-on-res
  (implies (bit-equiv res res-equiv)
           (equal (!evex-byte1->res$inline res byte1)
                  (!evex-byte1->res$inline res-equiv byte1)))
  :rule-classes :congruence)

Theorem: !evex-byte1->res$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->res$inline-of-evex-byte1-fix-byte1
  (equal (!evex-byte1->res$inline res (evex-byte1-fix byte1))
         (!evex-byte1->res$inline res byte1)))

Theorem: !evex-byte1->res$inline-evex-byte1-equiv-congruence-on-byte1

(defthm !evex-byte1->res$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (!evex-byte1->res$inline res byte1)
                  (!evex-byte1->res$inline res byte1-equiv)))
  :rule-classes :congruence)

Theorem: !evex-byte1->res-is-evex-byte1

(defthm !evex-byte1->res-is-evex-byte1
  (equal (!evex-byte1->res res byte1)
         (change-evex-byte1 byte1 :res res)))

Theorem: evex-byte1->res-of-!evex-byte1->res

(defthm evex-byte1->res-of-!evex-byte1->res
  (b* ((?new-byte1 (!evex-byte1->res$inline res byte1)))
    (equal (evex-byte1->res new-byte1)
           (bfix res))))

Theorem: !evex-byte1->res-equiv-under-mask

(defthm !evex-byte1->res-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->res$inline res byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 -9)))

Function: !evex-byte1->r-prime$inline

(defun !evex-byte1->r-prime$inline (r-prime byte1)
  (declare (xargs :guard (and (bitp r-prime)
                              (evex-byte1-p byte1))))
  (mbe :logic
       (b* ((r-prime (mbe :logic (bfix r-prime)
                          :exec r-prime))
            (byte1 (evex-byte1-fix byte1)))
         (part-install r-prime byte1
                       :width 1
                       :low 4))
       :exec (the (unsigned-byte 8)
                  (logior (the (unsigned-byte 8)
                               (logand (the (unsigned-byte 8) byte1)
                                       (the (signed-byte 6) -17)))
                          (the (unsigned-byte 5)
                               (ash (the (unsigned-byte 1) r-prime)
                                    4))))))

Theorem: evex-byte1-p-of-!evex-byte1->r-prime

(defthm evex-byte1-p-of-!evex-byte1->r-prime
  (b* ((new-byte1 (!evex-byte1->r-prime$inline r-prime byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->r-prime$inline-of-bfix-r-prime

(defthm !evex-byte1->r-prime$inline-of-bfix-r-prime
  (equal (!evex-byte1->r-prime$inline (bfix r-prime)
                                      byte1)
         (!evex-byte1->r-prime$inline r-prime byte1)))

Theorem: !evex-byte1->r-prime$inline-bit-equiv-congruence-on-r-prime

(defthm !evex-byte1->r-prime$inline-bit-equiv-congruence-on-r-prime
 (implies (bit-equiv r-prime r-prime-equiv)
          (equal (!evex-byte1->r-prime$inline r-prime byte1)
                 (!evex-byte1->r-prime$inline r-prime-equiv byte1)))
 :rule-classes :congruence)

Theorem: !evex-byte1->r-prime$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->r-prime$inline-of-evex-byte1-fix-byte1
 (equal (!evex-byte1->r-prime$inline r-prime (evex-byte1-fix byte1))
        (!evex-byte1->r-prime$inline r-prime byte1)))

Theorem: !evex-byte1->r-prime$inline-evex-byte1-equiv-congruence-on-byte1

(defthm
   !evex-byte1->r-prime$inline-evex-byte1-equiv-congruence-on-byte1
 (implies (evex-byte1-equiv byte1 byte1-equiv)
          (equal (!evex-byte1->r-prime$inline r-prime byte1)
                 (!evex-byte1->r-prime$inline r-prime byte1-equiv)))
 :rule-classes :congruence)

Theorem: !evex-byte1->r-prime-is-evex-byte1

(defthm !evex-byte1->r-prime-is-evex-byte1
  (equal (!evex-byte1->r-prime r-prime byte1)
         (change-evex-byte1 byte1
                            :r-prime r-prime)))

Theorem: evex-byte1->r-prime-of-!evex-byte1->r-prime

(defthm evex-byte1->r-prime-of-!evex-byte1->r-prime
  (b* ((?new-byte1 (!evex-byte1->r-prime$inline r-prime byte1)))
    (equal (evex-byte1->r-prime new-byte1)
           (bfix r-prime))))

Theorem: !evex-byte1->r-prime-equiv-under-mask

(defthm !evex-byte1->r-prime-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->r-prime$inline r-prime byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 -17)))

Function: !evex-byte1->b$inline

(defun !evex-byte1->b$inline (b byte1)
 (declare (xargs :guard (and (bitp b) (evex-byte1-p byte1))))
 (mbe :logic
      (b* ((b (mbe :logic (bfix b) :exec b))
           (byte1 (evex-byte1-fix byte1)))
        (part-install b byte1 :width 1 :low 5))
      :exec (the (unsigned-byte 8)
                 (logior (the (unsigned-byte 8)
                              (logand (the (unsigned-byte 8) byte1)
                                      (the (signed-byte 7) -33)))
                         (the (unsigned-byte 6)
                              (ash (the (unsigned-byte 1) b) 5))))))

Theorem: evex-byte1-p-of-!evex-byte1->b

(defthm evex-byte1-p-of-!evex-byte1->b
  (b* ((new-byte1 (!evex-byte1->b$inline b byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->b$inline-of-bfix-b

(defthm !evex-byte1->b$inline-of-bfix-b
  (equal (!evex-byte1->b$inline (bfix b) byte1)
         (!evex-byte1->b$inline b byte1)))

Theorem: !evex-byte1->b$inline-bit-equiv-congruence-on-b

(defthm !evex-byte1->b$inline-bit-equiv-congruence-on-b
  (implies (bit-equiv b b-equiv)
           (equal (!evex-byte1->b$inline b byte1)
                  (!evex-byte1->b$inline b-equiv byte1)))
  :rule-classes :congruence)

Theorem: !evex-byte1->b$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->b$inline-of-evex-byte1-fix-byte1
  (equal (!evex-byte1->b$inline b (evex-byte1-fix byte1))
         (!evex-byte1->b$inline b byte1)))

Theorem: !evex-byte1->b$inline-evex-byte1-equiv-congruence-on-byte1

(defthm !evex-byte1->b$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (!evex-byte1->b$inline b byte1)
                  (!evex-byte1->b$inline b byte1-equiv)))
  :rule-classes :congruence)

Theorem: !evex-byte1->b-is-evex-byte1

(defthm !evex-byte1->b-is-evex-byte1
  (equal (!evex-byte1->b b byte1)
         (change-evex-byte1 byte1 :b b)))

Theorem: evex-byte1->b-of-!evex-byte1->b

(defthm evex-byte1->b-of-!evex-byte1->b
  (b* ((?new-byte1 (!evex-byte1->b$inline b byte1)))
    (equal (evex-byte1->b new-byte1)
           (bfix b))))

Theorem: !evex-byte1->b-equiv-under-mask

(defthm !evex-byte1->b-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->b$inline b byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 -33)))

Function: !evex-byte1->x$inline

(defun !evex-byte1->x$inline (x byte1)
 (declare (xargs :guard (and (bitp x) (evex-byte1-p byte1))))
 (mbe :logic
      (b* ((x (mbe :logic (bfix x) :exec x))
           (byte1 (evex-byte1-fix byte1)))
        (part-install x byte1 :width 1 :low 6))
      :exec (the (unsigned-byte 8)
                 (logior (the (unsigned-byte 8)
                              (logand (the (unsigned-byte 8) byte1)
                                      (the (signed-byte 8) -65)))
                         (the (unsigned-byte 7)
                              (ash (the (unsigned-byte 1) x) 6))))))

Theorem: evex-byte1-p-of-!evex-byte1->x

(defthm evex-byte1-p-of-!evex-byte1->x
  (b* ((new-byte1 (!evex-byte1->x$inline x byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->x$inline-of-bfix-x

(defthm !evex-byte1->x$inline-of-bfix-x
  (equal (!evex-byte1->x$inline (bfix x) byte1)
         (!evex-byte1->x$inline x byte1)))

Theorem: !evex-byte1->x$inline-bit-equiv-congruence-on-x

(defthm !evex-byte1->x$inline-bit-equiv-congruence-on-x
  (implies (bit-equiv x x-equiv)
           (equal (!evex-byte1->x$inline x byte1)
                  (!evex-byte1->x$inline x-equiv byte1)))
  :rule-classes :congruence)

Theorem: !evex-byte1->x$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->x$inline-of-evex-byte1-fix-byte1
  (equal (!evex-byte1->x$inline x (evex-byte1-fix byte1))
         (!evex-byte1->x$inline x byte1)))

Theorem: !evex-byte1->x$inline-evex-byte1-equiv-congruence-on-byte1

(defthm !evex-byte1->x$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (!evex-byte1->x$inline x byte1)
                  (!evex-byte1->x$inline x byte1-equiv)))
  :rule-classes :congruence)

Theorem: !evex-byte1->x-is-evex-byte1

(defthm !evex-byte1->x-is-evex-byte1
  (equal (!evex-byte1->x x byte1)
         (change-evex-byte1 byte1 :x x)))

Theorem: evex-byte1->x-of-!evex-byte1->x

(defthm evex-byte1->x-of-!evex-byte1->x
  (b* ((?new-byte1 (!evex-byte1->x$inline x byte1)))
    (equal (evex-byte1->x new-byte1)
           (bfix x))))

Theorem: !evex-byte1->x-equiv-under-mask

(defthm !evex-byte1->x-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->x$inline x byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 -65)))

Function: !evex-byte1->r$inline

(defun !evex-byte1->r$inline (r byte1)
 (declare (xargs :guard (and (bitp r) (evex-byte1-p byte1))))
 (mbe :logic
      (b* ((r (mbe :logic (bfix r) :exec r))
           (byte1 (evex-byte1-fix byte1)))
        (part-install r byte1 :width 1 :low 7))
      :exec (the (unsigned-byte 8)
                 (logior (the (unsigned-byte 8)
                              (logand (the (unsigned-byte 8) byte1)
                                      (the (signed-byte 9) -129)))
                         (the (unsigned-byte 8)
                              (ash (the (unsigned-byte 1) r) 7))))))

Theorem: evex-byte1-p-of-!evex-byte1->r

(defthm evex-byte1-p-of-!evex-byte1->r
  (b* ((new-byte1 (!evex-byte1->r$inline r byte1)))
    (evex-byte1-p new-byte1))
  :rule-classes :rewrite)

Theorem: !evex-byte1->r$inline-of-bfix-r

(defthm !evex-byte1->r$inline-of-bfix-r
  (equal (!evex-byte1->r$inline (bfix r) byte1)
         (!evex-byte1->r$inline r byte1)))

Theorem: !evex-byte1->r$inline-bit-equiv-congruence-on-r

(defthm !evex-byte1->r$inline-bit-equiv-congruence-on-r
  (implies (bit-equiv r r-equiv)
           (equal (!evex-byte1->r$inline r byte1)
                  (!evex-byte1->r$inline r-equiv byte1)))
  :rule-classes :congruence)

Theorem: !evex-byte1->r$inline-of-evex-byte1-fix-byte1

(defthm !evex-byte1->r$inline-of-evex-byte1-fix-byte1
  (equal (!evex-byte1->r$inline r (evex-byte1-fix byte1))
         (!evex-byte1->r$inline r byte1)))

Theorem: !evex-byte1->r$inline-evex-byte1-equiv-congruence-on-byte1

(defthm !evex-byte1->r$inline-evex-byte1-equiv-congruence-on-byte1
  (implies (evex-byte1-equiv byte1 byte1-equiv)
           (equal (!evex-byte1->r$inline r byte1)
                  (!evex-byte1->r$inline r byte1-equiv)))
  :rule-classes :congruence)

Theorem: !evex-byte1->r-is-evex-byte1

(defthm !evex-byte1->r-is-evex-byte1
  (equal (!evex-byte1->r r byte1)
         (change-evex-byte1 byte1 :r r)))

Theorem: evex-byte1->r-of-!evex-byte1->r

(defthm evex-byte1->r-of-!evex-byte1->r
  (b* ((?new-byte1 (!evex-byte1->r$inline r byte1)))
    (equal (evex-byte1->r new-byte1)
           (bfix r))))

Theorem: !evex-byte1->r-equiv-under-mask

(defthm !evex-byte1->r-equiv-under-mask
  (b* ((?new-byte1 (!evex-byte1->r$inline r byte1)))
    (evex-byte1-equiv-under-mask new-byte1 byte1 127)))

Function: evex-byte1-debug$inline

(defun evex-byte1-debug$inline (byte1)
 (declare (xargs :guard (evex-byte1-p byte1)))
 (b* (((evex-byte1 byte1)))
   (cons (cons 'mmm byte1.mmm)
         (cons (cons 'res byte1.res)
               (cons (cons 'r-prime byte1.r-prime)
                     (cons (cons 'b byte1.b)
                           (cons (cons 'x byte1.x)
                                 (cons (cons 'r byte1.r) nil))))))))

Subtopics

!evex-byte1->r-prime
Update the |X86ISA|::|R-PRIME| field of a evex-byte1 bit structure.
!evex-byte1->mmm
Update the |X86ISA|::|MMM| field of a evex-byte1 bit structure.
!evex-byte1->res
Update the |X86ISA|::|RES| field of a evex-byte1 bit structure.
!evex-byte1->x
Update the |ACL2|::|X| field of a evex-byte1 bit structure.
!evex-byte1->r
Update the |ACL2|::|R| field of a evex-byte1 bit structure.
!evex-byte1->b
Update the |ACL2|::|B| field of a evex-byte1 bit structure.
Evex-byte1-p
Recognizer for evex-byte1 bit structures.
Evex-byte1->r-prime
Access the |X86ISA|::|R-PRIME| field of a evex-byte1 bit structure.
Evex-byte1-fix
Fixing function for evex-byte1 bit structures.
Evex-byte1->x
Access the |ACL2|::|X| field of a evex-byte1 bit structure.
Evex-byte1->res
Access the |X86ISA|::|RES| field of a evex-byte1 bit structure.
Evex-byte1->r
Access the |ACL2|::|R| field of a evex-byte1 bit structure.
Evex-byte1->mmm
Access the |X86ISA|::|MMM| field of a evex-byte1 bit structure.
Evex-byte1->b
Access the |ACL2|::|B| field of a evex-byte1 bit structure.