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))