• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • 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
            • 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
              • System-segment-descriptorbits
              • Data-segment-descriptorbits
              • Code-segment-descriptorbits
              • Interrupt/trap-gate-descriptorbits
              • Call-gate-descriptorbits
              • Data-segment-descriptor-attributesbits
              • Code-segment-descriptor-attributesbits
              • System-segment-descriptor-attributesbits
              • Interrupt/trap-gate-descriptor-attributesbits
              • Call-gate-descriptor-attributesbits
              • Segment-selectorbits
              • Hidden-segment-registerbits
                • !hidden-segment-registerbits->base-addr
                • !hidden-segment-registerbits->limit
                • !hidden-segment-registerbits->attr
                • Hidden-segment-registerbits-fix
                • Hidden-segment-registerbits->base-addr
                • Hidden-segment-registerbits->limit
                • Hidden-segment-registerbits->attr
                • Hidden-segment-registerbits-p
              • Gdtr/idtrbits
              • Interrupt/trap-gate-descriptor-attributesbits-equiv-under-mask
              • System-segment-descriptorbits-debug
              • System-segment-descriptor-attributesbits-equiv-under-mask
              • Interrupt/trap-gate-descriptorbits-equiv-under-mask
              • Data-segment-descriptor-attributesbits-equiv-under-mask
              • Code-segment-descriptor-attributesbits-equiv-under-mask
              • Call-gate-descriptor-attributesbits-equiv-under-mask
              • System-segment-descriptorbits-equiv-under-mask
              • Interrupt/trap-gate-descriptorbits-debug
              • Hidden-segment-registerbits-equiv-under-mask
              • Data-segment-descriptorbits-equiv-under-mask
              • Data-segment-descriptorbits-debug
              • Data-segment-descriptor-attributesbits-debug
              • Code-segment-descriptorbits-equiv-under-mask
              • Code-segment-descriptorbits-debug
              • Code-segment-descriptor-attributesbits-debug
              • Call-gate-descriptorbits-equiv-under-mask
              • System-segment-descriptor-attributesbits-debug
              • Segment-selectorbits-equiv-under-mask
              • Interrupt/trap-gate-descriptor-attributesbits-debug
              • Call-gate-descriptorbits-debug
              • Gdtr/idtrbits-equiv-under-mask
              • Call-gate-descriptor-attributesbits-debug
              • Segment-selectorbits-debug
              • Hidden-segment-registerbits-debug
              • Gdtr/idtrbits-debug
            • 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
  • Segmentation-bitstructs

Hidden-segment-registerbits

Intel manual, Dec'23, Vol. 3A, Figure 3-7.

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

Fields
base-addr — 64bits
limit — 32bits
attr — 16bits

Definitions and Theorems

Function: hidden-segment-registerbits-p

(defun hidden-segment-registerbits-p (x)
  (declare (xargs :guard t))
  (let ((__function__ 'hidden-segment-registerbits-p))
    (declare (ignorable __function__))
    (mbe :logic (unsigned-byte-p 112 x)
         :exec (and (natp x)
                    (< x
                       5192296858534827628530496329220096)))))

Theorem: hidden-segment-registerbits-p-when-unsigned-byte-p

(defthm hidden-segment-registerbits-p-when-unsigned-byte-p
  (implies (unsigned-byte-p 112 x)
           (hidden-segment-registerbits-p x)))

Theorem: unsigned-byte-p-when-hidden-segment-registerbits-p

(defthm unsigned-byte-p-when-hidden-segment-registerbits-p
  (implies (hidden-segment-registerbits-p x)
           (unsigned-byte-p 112 x)))

Theorem: hidden-segment-registerbits-p-compound-recognizer

(defthm hidden-segment-registerbits-p-compound-recognizer
  (implies (hidden-segment-registerbits-p x)
           (natp x))
  :rule-classes :compound-recognizer)

Function: hidden-segment-registerbits-fix

(defun hidden-segment-registerbits-fix (x)
  (declare (xargs :guard (hidden-segment-registerbits-p x)))
  (let ((__function__ 'hidden-segment-registerbits-fix))
    (declare (ignorable __function__))
    (mbe :logic (loghead 112 x) :exec x)))

Theorem: hidden-segment-registerbits-p-of-hidden-segment-registerbits-fix

(defthm
   hidden-segment-registerbits-p-of-hidden-segment-registerbits-fix
  (b* ((fty::fixed (hidden-segment-registerbits-fix x)))
    (hidden-segment-registerbits-p fty::fixed))
  :rule-classes :rewrite)

Theorem: hidden-segment-registerbits-fix-when-hidden-segment-registerbits-p

(defthm
 hidden-segment-registerbits-fix-when-hidden-segment-registerbits-p
 (implies (hidden-segment-registerbits-p x)
          (equal (hidden-segment-registerbits-fix x)
                 x)))

Function: hidden-segment-registerbits-equiv$inline

(defun hidden-segment-registerbits-equiv$inline (x y)
  (declare (xargs :guard (and (hidden-segment-registerbits-p x)
                              (hidden-segment-registerbits-p y))))
  (equal (hidden-segment-registerbits-fix x)
         (hidden-segment-registerbits-fix y)))

Theorem: hidden-segment-registerbits-equiv-is-an-equivalence

(defthm hidden-segment-registerbits-equiv-is-an-equivalence
  (and (booleanp (hidden-segment-registerbits-equiv x y))
       (hidden-segment-registerbits-equiv x x)
       (implies (hidden-segment-registerbits-equiv x y)
                (hidden-segment-registerbits-equiv y x))
       (implies (and (hidden-segment-registerbits-equiv x y)
                     (hidden-segment-registerbits-equiv y z))
                (hidden-segment-registerbits-equiv x z)))
  :rule-classes (:equivalence))

Theorem: hidden-segment-registerbits-equiv-implies-equal-hidden-segment-registerbits-fix-1

(defthm
 hidden-segment-registerbits-equiv-implies-equal-hidden-segment-registerbits-fix-1
 (implies (hidden-segment-registerbits-equiv x x-equiv)
          (equal (hidden-segment-registerbits-fix x)
                 (hidden-segment-registerbits-fix x-equiv)))
 :rule-classes (:congruence))

Theorem: hidden-segment-registerbits-fix-under-hidden-segment-registerbits-equiv

(defthm
 hidden-segment-registerbits-fix-under-hidden-segment-registerbits-equiv
 (hidden-segment-registerbits-equiv
      (hidden-segment-registerbits-fix x)
      x)
 :rule-classes (:rewrite :rewrite-quoted-constant))

Function: hidden-segment-registerbits

(defun hidden-segment-registerbits (base-addr limit attr)
  (declare (xargs :guard (and (64bits-p base-addr)
                              (32bits-p limit)
                              (16bits-p attr))))
  (let ((__function__ 'hidden-segment-registerbits))
    (declare (ignorable __function__))
    (b* ((base-addr (mbe :logic (64bits-fix base-addr)
                         :exec base-addr))
         (limit (mbe :logic (32bits-fix limit)
                     :exec limit))
         (attr (mbe :logic (16bits-fix attr)
                    :exec attr)))
      (logapp 64 base-addr (logapp 32 limit attr)))))

Theorem: hidden-segment-registerbits-p-of-hidden-segment-registerbits

(defthm hidden-segment-registerbits-p-of-hidden-segment-registerbits
  (b* ((hidden-segment-registerbits
            (hidden-segment-registerbits base-addr limit attr)))
    (hidden-segment-registerbits-p hidden-segment-registerbits))
  :rule-classes :rewrite)

Theorem: hidden-segment-registerbits-of-64bits-fix-base-addr

(defthm hidden-segment-registerbits-of-64bits-fix-base-addr
  (equal (hidden-segment-registerbits (64bits-fix base-addr)
                                      limit attr)
         (hidden-segment-registerbits base-addr limit attr)))

Theorem: hidden-segment-registerbits-64bits-equiv-congruence-on-base-addr

(defthm
   hidden-segment-registerbits-64bits-equiv-congruence-on-base-addr
 (implies
   (64bits-equiv base-addr base-addr-equiv)
   (equal (hidden-segment-registerbits base-addr limit attr)
          (hidden-segment-registerbits base-addr-equiv limit attr)))
 :rule-classes :congruence)

Theorem: hidden-segment-registerbits-of-32bits-fix-limit

(defthm hidden-segment-registerbits-of-32bits-fix-limit
  (equal (hidden-segment-registerbits base-addr (32bits-fix limit)
                                      attr)
         (hidden-segment-registerbits base-addr limit attr)))

Theorem: hidden-segment-registerbits-32bits-equiv-congruence-on-limit

(defthm hidden-segment-registerbits-32bits-equiv-congruence-on-limit
 (implies
   (32bits-equiv limit limit-equiv)
   (equal (hidden-segment-registerbits base-addr limit attr)
          (hidden-segment-registerbits base-addr limit-equiv attr)))
 :rule-classes :congruence)

Theorem: hidden-segment-registerbits-of-16bits-fix-attr

(defthm hidden-segment-registerbits-of-16bits-fix-attr
 (equal
     (hidden-segment-registerbits base-addr limit (16bits-fix attr))
     (hidden-segment-registerbits base-addr limit attr)))

Theorem: hidden-segment-registerbits-16bits-equiv-congruence-on-attr

(defthm hidden-segment-registerbits-16bits-equiv-congruence-on-attr
 (implies
   (16bits-equiv attr attr-equiv)
   (equal (hidden-segment-registerbits base-addr limit attr)
          (hidden-segment-registerbits base-addr limit attr-equiv)))
 :rule-classes :congruence)

Function: hidden-segment-registerbits-equiv-under-mask

(defun hidden-segment-registerbits-equiv-under-mask (x x1 mask)
 (declare (xargs :guard (and (hidden-segment-registerbits-p x)
                             (hidden-segment-registerbits-p x1)
                             (integerp mask))))
 (let ((__function__ 'hidden-segment-registerbits-equiv-under-mask))
   (declare (ignorable __function__))
   (fty::int-equiv-under-mask (hidden-segment-registerbits-fix x)
                              (hidden-segment-registerbits-fix x1)
                              mask)))

Function: hidden-segment-registerbits->base-addr$inline

(defun hidden-segment-registerbits->base-addr$inline (x)
  (declare (xargs :guard (hidden-segment-registerbits-p x)))
  (mbe :logic
       (let ((x (hidden-segment-registerbits-fix x)))
         (part-select x :low 0 :width 64))
       :exec (the (unsigned-byte 64)
                  (logand (the (unsigned-byte 64)
                               18446744073709551615)
                          (the (unsigned-byte 112) x)))))

Theorem: 64bits-p-of-hidden-segment-registerbits->base-addr

(defthm 64bits-p-of-hidden-segment-registerbits->base-addr
 (b* ((base-addr (hidden-segment-registerbits->base-addr$inline x)))
   (64bits-p base-addr))
 :rule-classes :rewrite)

Theorem: hidden-segment-registerbits->base-addr$inline-of-hidden-segment-registerbits-fix-x

(defthm
 hidden-segment-registerbits->base-addr$inline-of-hidden-segment-registerbits-fix-x
 (equal (hidden-segment-registerbits->base-addr$inline
             (hidden-segment-registerbits-fix x))
        (hidden-segment-registerbits->base-addr$inline x)))

Theorem: hidden-segment-registerbits->base-addr$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 hidden-segment-registerbits->base-addr$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
    (hidden-segment-registerbits-equiv x x-equiv)
    (equal (hidden-segment-registerbits->base-addr$inline x)
           (hidden-segment-registerbits->base-addr$inline x-equiv)))
 :rule-classes :congruence)

Theorem: hidden-segment-registerbits->base-addr-of-hidden-segment-registerbits

(defthm
 hidden-segment-registerbits->base-addr-of-hidden-segment-registerbits
 (equal (hidden-segment-registerbits->base-addr
             (hidden-segment-registerbits base-addr limit attr))
        (64bits-fix base-addr)))

Theorem: hidden-segment-registerbits->base-addr-of-write-with-mask

(defthm hidden-segment-registerbits->base-addr-of-write-with-mask
 (implies
   (and (fty::bitstruct-read-over-write-hyps
             x
             hidden-segment-registerbits-equiv-under-mask)
        (hidden-segment-registerbits-equiv-under-mask x y fty::mask)
        (equal (logand (lognot fty::mask)
                       18446744073709551615)
               0))
   (equal (hidden-segment-registerbits->base-addr x)
          (hidden-segment-registerbits->base-addr y))))

Function: hidden-segment-registerbits->limit$inline

(defun hidden-segment-registerbits->limit$inline (x)
  (declare (xargs :guard (hidden-segment-registerbits-p x)))
  (mbe :logic
       (let ((x (hidden-segment-registerbits-fix x)))
         (part-select x :low 64 :width 32))
       :exec (the (unsigned-byte 32)
                  (logand (the (unsigned-byte 32) 4294967295)
                          (the (unsigned-byte 48)
                               (ash (the (unsigned-byte 112) x)
                                    -64))))))

Theorem: 32bits-p-of-hidden-segment-registerbits->limit

(defthm 32bits-p-of-hidden-segment-registerbits->limit
  (b* ((limit (hidden-segment-registerbits->limit$inline x)))
    (32bits-p limit))
  :rule-classes :rewrite)

Theorem: hidden-segment-registerbits->limit$inline-of-hidden-segment-registerbits-fix-x

(defthm
 hidden-segment-registerbits->limit$inline-of-hidden-segment-registerbits-fix-x
 (equal (hidden-segment-registerbits->limit$inline
             (hidden-segment-registerbits-fix x))
        (hidden-segment-registerbits->limit$inline x)))

Theorem: hidden-segment-registerbits->limit$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 hidden-segment-registerbits->limit$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
      (hidden-segment-registerbits-equiv x x-equiv)
      (equal (hidden-segment-registerbits->limit$inline x)
             (hidden-segment-registerbits->limit$inline x-equiv)))
 :rule-classes :congruence)

Theorem: hidden-segment-registerbits->limit-of-hidden-segment-registerbits

(defthm
  hidden-segment-registerbits->limit-of-hidden-segment-registerbits
  (equal (hidden-segment-registerbits->limit
              (hidden-segment-registerbits base-addr limit attr))
         (32bits-fix limit)))

Theorem: hidden-segment-registerbits->limit-of-write-with-mask

(defthm hidden-segment-registerbits->limit-of-write-with-mask
 (implies
   (and (fty::bitstruct-read-over-write-hyps
             x
             hidden-segment-registerbits-equiv-under-mask)
        (hidden-segment-registerbits-equiv-under-mask x y fty::mask)
        (equal (logand (lognot fty::mask)
                       79228162495817593519834398720)
               0))
   (equal (hidden-segment-registerbits->limit x)
          (hidden-segment-registerbits->limit y))))

Function: hidden-segment-registerbits->attr$inline

(defun hidden-segment-registerbits->attr$inline (x)
  (declare (xargs :guard (hidden-segment-registerbits-p x)))
  (mbe :logic
       (let ((x (hidden-segment-registerbits-fix x)))
         (part-select x :low 96 :width 16))
       :exec (the (unsigned-byte 16)
                  (logand (the (unsigned-byte 16) 65535)
                          (the (unsigned-byte 16)
                               (ash (the (unsigned-byte 112) x)
                                    -96))))))

Theorem: 16bits-p-of-hidden-segment-registerbits->attr

(defthm 16bits-p-of-hidden-segment-registerbits->attr
  (b* ((attr (hidden-segment-registerbits->attr$inline x)))
    (16bits-p attr))
  :rule-classes :rewrite)

Theorem: hidden-segment-registerbits->attr$inline-of-hidden-segment-registerbits-fix-x

(defthm
 hidden-segment-registerbits->attr$inline-of-hidden-segment-registerbits-fix-x
 (equal (hidden-segment-registerbits->attr$inline
             (hidden-segment-registerbits-fix x))
        (hidden-segment-registerbits->attr$inline x)))

Theorem: hidden-segment-registerbits->attr$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 hidden-segment-registerbits->attr$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
      (hidden-segment-registerbits-equiv x x-equiv)
      (equal (hidden-segment-registerbits->attr$inline x)
             (hidden-segment-registerbits->attr$inline x-equiv)))
 :rule-classes :congruence)

Theorem: hidden-segment-registerbits->attr-of-hidden-segment-registerbits

(defthm
   hidden-segment-registerbits->attr-of-hidden-segment-registerbits
  (equal (hidden-segment-registerbits->attr
              (hidden-segment-registerbits base-addr limit attr))
         (16bits-fix attr)))

Theorem: hidden-segment-registerbits->attr-of-write-with-mask

(defthm hidden-segment-registerbits->attr-of-write-with-mask
 (implies
   (and (fty::bitstruct-read-over-write-hyps
             x
             hidden-segment-registerbits-equiv-under-mask)
        (hidden-segment-registerbits-equiv-under-mask x y fty::mask)
        (equal (logand (lognot fty::mask)
                       5192217630372313364192902785269760)
               0))
   (equal (hidden-segment-registerbits->attr x)
          (hidden-segment-registerbits->attr y))))

Theorem: hidden-segment-registerbits-fix-in-terms-of-hidden-segment-registerbits

(defthm
 hidden-segment-registerbits-fix-in-terms-of-hidden-segment-registerbits
 (equal (hidden-segment-registerbits-fix x)
        (change-hidden-segment-registerbits x)))

Function: !hidden-segment-registerbits->base-addr$inline

(defun !hidden-segment-registerbits->base-addr$inline (base-addr x)
  (declare (xargs :guard (and (64bits-p base-addr)
                              (hidden-segment-registerbits-p x))))
  (mbe :logic
       (b* ((base-addr (mbe :logic (64bits-fix base-addr)
                            :exec base-addr))
            (x (hidden-segment-registerbits-fix x)))
         (part-install base-addr x
                       :width 64
                       :low 0))
       :exec (the (unsigned-byte 112)
                  (logior (the (unsigned-byte 112)
                               (logand (the (unsigned-byte 112) x)
                                       (the (signed-byte 65)
                                            -18446744073709551616)))
                          (the (unsigned-byte 64) base-addr)))))

Theorem: hidden-segment-registerbits-p-of-!hidden-segment-registerbits->base-addr

(defthm
 hidden-segment-registerbits-p-of-!hidden-segment-registerbits->base-addr
 (b*
  ((new-x
      (!hidden-segment-registerbits->base-addr$inline base-addr x)))
  (hidden-segment-registerbits-p new-x))
 :rule-classes :rewrite)

Theorem: !hidden-segment-registerbits->base-addr$inline-of-64bits-fix-base-addr

(defthm
 !hidden-segment-registerbits->base-addr$inline-of-64bits-fix-base-addr
 (equal
      (!hidden-segment-registerbits->base-addr$inline
           (64bits-fix base-addr)
           x)
      (!hidden-segment-registerbits->base-addr$inline base-addr x)))

Theorem: !hidden-segment-registerbits->base-addr$inline-64bits-equiv-congruence-on-base-addr

(defthm
 !hidden-segment-registerbits->base-addr$inline-64bits-equiv-congruence-on-base-addr
 (implies
   (64bits-equiv base-addr base-addr-equiv)
   (equal
        (!hidden-segment-registerbits->base-addr$inline base-addr x)
        (!hidden-segment-registerbits->base-addr$inline
             base-addr-equiv x)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->base-addr$inline-of-hidden-segment-registerbits-fix-x

(defthm
 !hidden-segment-registerbits->base-addr$inline-of-hidden-segment-registerbits-fix-x
 (equal
      (!hidden-segment-registerbits->base-addr$inline
           base-addr
           (hidden-segment-registerbits-fix x))
      (!hidden-segment-registerbits->base-addr$inline base-addr x)))

Theorem: !hidden-segment-registerbits->base-addr$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 !hidden-segment-registerbits->base-addr$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
   (hidden-segment-registerbits-equiv x x-equiv)
   (equal
        (!hidden-segment-registerbits->base-addr$inline base-addr x)
        (!hidden-segment-registerbits->base-addr$inline
             base-addr x-equiv)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->base-addr-is-hidden-segment-registerbits

(defthm
 !hidden-segment-registerbits->base-addr-is-hidden-segment-registerbits
 (equal (!hidden-segment-registerbits->base-addr base-addr x)
        (change-hidden-segment-registerbits x
                                            :base-addr base-addr)))

Theorem: hidden-segment-registerbits->base-addr-of-!hidden-segment-registerbits->base-addr

(defthm
 hidden-segment-registerbits->base-addr-of-!hidden-segment-registerbits->base-addr
 (b*
  ((?new-x
      (!hidden-segment-registerbits->base-addr$inline base-addr x)))
  (equal (hidden-segment-registerbits->base-addr new-x)
         (64bits-fix base-addr))))

Theorem: !hidden-segment-registerbits->base-addr-equiv-under-mask

(defthm !hidden-segment-registerbits->base-addr-equiv-under-mask
 (b*
  ((?new-x
      (!hidden-segment-registerbits->base-addr$inline base-addr x)))
  (hidden-segment-registerbits-equiv-under-mask
       new-x x -18446744073709551616)))

Function: !hidden-segment-registerbits->limit$inline

(defun !hidden-segment-registerbits->limit$inline (limit x)
 (declare (xargs :guard (and (32bits-p limit)
                             (hidden-segment-registerbits-p x))))
 (mbe
    :logic
    (b* ((limit (mbe :logic (32bits-fix limit)
                     :exec limit))
         (x (hidden-segment-registerbits-fix x)))
      (part-install limit x
                    :width 32
                    :low 64))
    :exec
    (the (unsigned-byte 112)
         (logior (the (unsigned-byte 112)
                      (logand (the (unsigned-byte 112) x)
                              (the (signed-byte 97)
                                   -79228162495817593519834398721)))
                 (the (unsigned-byte 96)
                      (ash (the (unsigned-byte 32) limit)
                           64))))))

Theorem: hidden-segment-registerbits-p-of-!hidden-segment-registerbits->limit

(defthm
 hidden-segment-registerbits-p-of-!hidden-segment-registerbits->limit
 (b* ((new-x (!hidden-segment-registerbits->limit$inline limit x)))
   (hidden-segment-registerbits-p new-x))
 :rule-classes :rewrite)

Theorem: !hidden-segment-registerbits->limit$inline-of-32bits-fix-limit

(defthm
     !hidden-segment-registerbits->limit$inline-of-32bits-fix-limit
 (equal
      (!hidden-segment-registerbits->limit$inline (32bits-fix limit)
                                                  x)
      (!hidden-segment-registerbits->limit$inline limit x)))

Theorem: !hidden-segment-registerbits->limit$inline-32bits-equiv-congruence-on-limit

(defthm
 !hidden-segment-registerbits->limit$inline-32bits-equiv-congruence-on-limit
 (implies
   (32bits-equiv limit limit-equiv)
   (equal
        (!hidden-segment-registerbits->limit$inline limit x)
        (!hidden-segment-registerbits->limit$inline limit-equiv x)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->limit$inline-of-hidden-segment-registerbits-fix-x

(defthm
 !hidden-segment-registerbits->limit$inline-of-hidden-segment-registerbits-fix-x
 (equal (!hidden-segment-registerbits->limit$inline
             limit
             (hidden-segment-registerbits-fix x))
        (!hidden-segment-registerbits->limit$inline limit x)))

Theorem: !hidden-segment-registerbits->limit$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 !hidden-segment-registerbits->limit$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
   (hidden-segment-registerbits-equiv x x-equiv)
   (equal
        (!hidden-segment-registerbits->limit$inline limit x)
        (!hidden-segment-registerbits->limit$inline limit x-equiv)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->limit-is-hidden-segment-registerbits

(defthm
 !hidden-segment-registerbits->limit-is-hidden-segment-registerbits
 (equal (!hidden-segment-registerbits->limit limit x)
        (change-hidden-segment-registerbits x
                                            :limit limit)))

Theorem: hidden-segment-registerbits->limit-of-!hidden-segment-registerbits->limit

(defthm
 hidden-segment-registerbits->limit-of-!hidden-segment-registerbits->limit
 (b* ((?new-x (!hidden-segment-registerbits->limit$inline limit x)))
   (equal (hidden-segment-registerbits->limit new-x)
          (32bits-fix limit))))

Theorem: !hidden-segment-registerbits->limit-equiv-under-mask

(defthm !hidden-segment-registerbits->limit-equiv-under-mask
 (b* ((?new-x (!hidden-segment-registerbits->limit$inline limit x)))
   (hidden-segment-registerbits-equiv-under-mask
        new-x
        x -79228162495817593519834398721)))

Function: !hidden-segment-registerbits->attr$inline

(defun !hidden-segment-registerbits->attr$inline (attr x)
 (declare (xargs :guard (and (16bits-p attr)
                             (hidden-segment-registerbits-p x))))
 (mbe
  :logic
  (b* ((attr (mbe :logic (16bits-fix attr)
                  :exec attr))
       (x (hidden-segment-registerbits-fix x)))
    (part-install attr x :width 16 :low 96))
  :exec
  (the
    (unsigned-byte 112)
    (logior (the (unsigned-byte 112)
                 (logand (the (unsigned-byte 112) x)
                         (the (signed-byte 113)
                              -5192217630372313364192902785269761)))
            (the (unsigned-byte 112)
                 (ash (the (unsigned-byte 16) attr)
                      96))))))

Theorem: hidden-segment-registerbits-p-of-!hidden-segment-registerbits->attr

(defthm
 hidden-segment-registerbits-p-of-!hidden-segment-registerbits->attr
 (b* ((new-x (!hidden-segment-registerbits->attr$inline attr x)))
   (hidden-segment-registerbits-p new-x))
 :rule-classes :rewrite)

Theorem: !hidden-segment-registerbits->attr$inline-of-16bits-fix-attr

(defthm !hidden-segment-registerbits->attr$inline-of-16bits-fix-attr
 (equal (!hidden-segment-registerbits->attr$inline (16bits-fix attr)
                                                   x)
        (!hidden-segment-registerbits->attr$inline attr x)))

Theorem: !hidden-segment-registerbits->attr$inline-16bits-equiv-congruence-on-attr

(defthm
 !hidden-segment-registerbits->attr$inline-16bits-equiv-congruence-on-attr
 (implies
   (16bits-equiv attr attr-equiv)
   (equal (!hidden-segment-registerbits->attr$inline attr x)
          (!hidden-segment-registerbits->attr$inline attr-equiv x)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->attr$inline-of-hidden-segment-registerbits-fix-x

(defthm
 !hidden-segment-registerbits->attr$inline-of-hidden-segment-registerbits-fix-x
 (equal (!hidden-segment-registerbits->attr$inline
             attr
             (hidden-segment-registerbits-fix x))
        (!hidden-segment-registerbits->attr$inline attr x)))

Theorem: !hidden-segment-registerbits->attr$inline-hidden-segment-registerbits-equiv-congruence-on-x

(defthm
 !hidden-segment-registerbits->attr$inline-hidden-segment-registerbits-equiv-congruence-on-x
 (implies
   (hidden-segment-registerbits-equiv x x-equiv)
   (equal (!hidden-segment-registerbits->attr$inline attr x)
          (!hidden-segment-registerbits->attr$inline attr x-equiv)))
 :rule-classes :congruence)

Theorem: !hidden-segment-registerbits->attr-is-hidden-segment-registerbits

(defthm
  !hidden-segment-registerbits->attr-is-hidden-segment-registerbits
  (equal (!hidden-segment-registerbits->attr attr x)
         (change-hidden-segment-registerbits x
                                             :attr attr)))

Theorem: hidden-segment-registerbits->attr-of-!hidden-segment-registerbits->attr

(defthm
 hidden-segment-registerbits->attr-of-!hidden-segment-registerbits->attr
 (b* ((?new-x (!hidden-segment-registerbits->attr$inline attr x)))
   (equal (hidden-segment-registerbits->attr new-x)
          (16bits-fix attr))))

Theorem: !hidden-segment-registerbits->attr-equiv-under-mask

(defthm !hidden-segment-registerbits->attr-equiv-under-mask
  (b* ((?new-x (!hidden-segment-registerbits->attr$inline attr x)))
    (hidden-segment-registerbits-equiv-under-mask
         new-x x 79228162514264337593543950335)))

Function: hidden-segment-registerbits-debug

(defun hidden-segment-registerbits-debug (x)
  (declare (xargs :guard (hidden-segment-registerbits-p x)))
  (let ((__function__ 'hidden-segment-registerbits-debug))
    (declare (ignorable __function__))
    (b* (((hidden-segment-registerbits x)))
      (cons (cons 'base-addr x.base-addr)
            (cons (cons 'limit x.limit)
                  (cons (cons 'attr x.attr) nil))))))

Subtopics

!hidden-segment-registerbits->base-addr
Update the |X86ISA|::|BASE-ADDR| field of a hidden-segment-registerbits bit structure.
!hidden-segment-registerbits->limit
Update the |X86ISA|::|LIMIT| field of a hidden-segment-registerbits bit structure.
!hidden-segment-registerbits->attr
Update the |X86ISA|::|ATTR| field of a hidden-segment-registerbits bit structure.
Hidden-segment-registerbits-fix
Fixing function for hidden-segment-registerbits bit structures.
Hidden-segment-registerbits->base-addr
Access the |X86ISA|::|BASE-ADDR| field of a hidden-segment-registerbits bit structure.
Hidden-segment-registerbits->limit
Access the |X86ISA|::|LIMIT| field of a hidden-segment-registerbits bit structure.
Hidden-segment-registerbits->attr
Access the |X86ISA|::|ATTR| field of a hidden-segment-registerbits bit structure.
Hidden-segment-registerbits-p
Recognizer for hidden-segment-registerbits bit structures.