The state of the
The definition of the state uses nested and abstract stobjs by way of community books rstobj2::defrstobj, bigmem::bigmem, or bigmem-asymmetric::bigmem-asymmetric. It may be interesting to read about the old definition to see how the current definition supports all of its functionality but in a more maintainable way; see x86isa-state-history.
The
Note that the
These fields are an artifact of our x86 ISA model.
(ms :type t :initially nil)
(fault :type t :initially nil)
(env :type (satisfies env-alistp)
:fix (ec-call (env-alist-fix x))
:initially nil)(undef :type t :initially 0)
(app-view :type (satisfies booleanp) :fix (acl2::bool-fix x) :initially t)
(marking-view :type (satisfies booleanp)
:fix (acl2::bool-fix x)
:initially t)(enable-peripherals :type (satisfies booleanp)
:fix (acl2::bool-fix x)
:initially t)(handle-exceptions :type (satisfies booleanp)
:fix (acl2::bool-fix x)
:initially t)(os-info :type (satisfies keywordp)
:fix (ec-call (os-info-fix x))
:initially :linux)(rgf :type (array (signed-byte 64) (16)) :initially 0 :fix (logext 64 (ifix x)) :resizable nil :accessor rgfi :updater !rgfi)
(rip :type (signed-byte 48)
:initially 0
:fix (logext 48 (ifix x)))(rflags :type (unsigned-byte 32)
:initially 2
:fix (loghead 32 (ifix x)))Visible portion:
16-bit selector INDEX(13)::TI(1)::RPL(2)
Hidden/Cache portion (see Intel manual, Mar'17, Vol. 3A, Figure 3-7):
16-bit Attributes
32-bit Limit
64-bit Base Address
See Intel manual, Jan'19, Volume 1, Section 3.4.2 and Intel manual, Jan'19, Volume 3, Sections 3.4.2 and 3.4.3 for details.
(seg-visible :type (array (unsigned-byte 16) (6)) :initially 0 :fix (loghead 16 (ifix x)) :resizable nil :accessor seg-visiblei :updater !seg-visiblei)
(seg-hidden-base :type (array (unsigned-byte 64) (6)) :fix (loghead 64 (ifix x)) :initially 0 :resizable nil :accessor seg-hidden-basei :updater !seg-hidden-basei)
(seg-hidden-limit :type (array (unsigned-byte 32) (6)) :fix (loghead 32 (ifix x)) :initially 0 :resizable nil :accessor seg-hidden-limiti :updater !seg-hidden-limiti)
(seg-hidden-attr :type (array (unsigned-byte 16) (6)) :fix (loghead 16 (ifix x)) :initially 0 :resizable nil :accessor seg-hidden-attri :updater !seg-hidden-attri)
(str :type (array (unsigned-byte 80) (2)) :fix (loghead 80 (ifix x)) :initially 0 :resizable nil :accessor stri :updater !stri)
Visible portion:
16-bit selector INDEX(13)::TI(1)::RPL(2)
Hidden/Cache portion:
16-bit Attributes
32-bit Limit
64-bit Base Address
See Intel manual, Jan'19, Volume 3, Figure 2-6 for details.
(ssr-visible :type (array (unsigned-byte 16) (2)) :initially 0 :fix (loghead 16 (ifix x)) :resizable nil :accessor ssr-visiblei :updater !ssr-visiblei)
(ssr-hidden-base :type (array (unsigned-byte 64) (2)) :initially 0 :fix (loghead 64 (ifix x)) :resizable nil :accessor ssr-hidden-basei :updater !ssr-hidden-basei)
(ssr-hidden-limit :type (array (unsigned-byte 32) (2)) :initially 0 :fix (loghead 32 (ifix x)) :resizable nil :accessor ssr-hidden-limiti :updater !ssr-hidden-limiti)
(ssr-hidden-attr :type (array (unsigned-byte 16) (2)) :fix (loghead 16 (ifix x)) :initially 0 :resizable nil :accessor ssr-hidden-attri :updater !ssr-hidden-attri)
(ctr :type (array (unsigned-byte 64) (17)) :fix (loghead 64 (ifix x)) :initially 0 :resizable nil :accessor ctri :updater !ctri)
(dbg :type (array (unsigned-byte 64) (8)) :initially 0 :fix (loghead 64 (ifix x)) :resizable nil :accessor dbgi :updater !dbgi)
(fp-data :type (array (unsigned-byte 80) (8)) :fix (loghead 80 (ifix x)) :initially 0 :resizable nil :accessor fp-datai :updater !fp-datai)
(fp-ctrl :type (unsigned-byte 16)
:fix (loghead 16 (ifix x))
:initially 0)(fp-status :type (unsigned-byte 16)
:fix (loghead 16 (ifix x))
:initially 0)(fp-tag :type (unsigned-byte 16)
:fix (loghead 16 (ifix x))
:initially 0)(fp-last-inst :type (unsigned-byte 48)
:fix (loghead 48 (ifix x))
:initially 0)(fp-last-data :type (unsigned-byte 48)
:fix (loghead 48 (ifix x))
:initially 0)(fp-opcode :type (unsigned-byte 11)
:fix (loghead 11 (ifix x))
:initially 0)(mxcsr :type (unsigned-byte 32)
:fix (loghead 32 (ifix x))
:initially 8064)(opmsk :type (array (unsigned-byte 64) (8)) :fix (loghead 64 (ifix x)) :initially 0 :resizable nil :accessor opmski :updater !opmski)
(zmm :type (array (unsigned-byte 512) (32)) :fix (loghead 512 (ifix x)) :initially 0 :resizable nil :accessor zmmi :updater !zmmi)
(msr :type (array (unsigned-byte 64) (11)) :fix (loghead 64 (ifix x)) :initially 0 :resizable nil :accessor msri :updater !msri)
(mem :type (array (unsigned-byte 8) (4503599627370496)) :initially 0 :fix (loghead 8 (ifix x)) :child-stobj bigmem::mem :child-accessor bigmem::read-mem :child-updater bigmem::write-mem :accessor memi :updater !memi)
(inhibit-interrupts-one-instruction :type (satisfies booleanp)
:initially nil
:fix (acl2::bool-fix x))(time-stamp-counter :type (satisfies natp)
:initially 0
:fix (nfix x))(last-clock-event :type (satisfies natp)
:initially 0
:fix (nfix x))(implicit-supervisor-access :type (satisfies booleanp)
:initially nil
:fix (acl2::bool-fix x))(tlb :type (satisfies tlbp) :initially :tlb :fix (tlb-fix x))
(tty-in :type (satisfies tty-bufferp)
:initially nil
:fix (tty-buffer-fix x))(tty-out :type (satisfies tty-bufferp)
:initially nil
:fix (tty-buffer-fix x))