• 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
          • X86isa-state
          • Syscalls
          • Cpuid
          • Linear-memory
          • Rflag-specifications
          • Characterizing-undefined-behavior
          • Top-level-memory
          • App-view
          • X86-decoder
            • Get-prefixes
            • Vex-0f3a-execute
            • Vex-0f38-execute
            • Vex-0f-execute
            • Two-byte-opcode-execute
            • Second-three-byte-opcode-execute
            • One-byte-opcode-execute
            • First-three-byte-opcode-execute
            • Evex-0f3a-execute
            • Evex-0f38-execute
            • Evex-0f-execute
            • X86-fetch-decode-execute
            • Vex-decode-and-execute
            • Evex-decode-and-execute
            • X86-run
            • Implemented-opcodes
            • Three-byte-opcode-decode-and-execute
            • X86-run-halt-count
            • Two-byte-opcode-decode-and-execute
            • X86-run-steps
            • Opcode-maps
              • Cpuid
              • Opcode-maps-structures
              • Implemented-opcodes
              • Chk-exc-fn
                • Filtering-instructions
                • Addressing-method-code-p
                • Operand-type-code-p
                • Eval-pre-map
              • X86-run-halt
              • X86-fetch-decode-execute-halt
              • X86-run-steps1
            • Physical-memory
            • Decoding-and-spec-utils
            • Instructions
            • Register-readers-and-writers
            • X86-modes
            • Segmentation
            • Other-non-deterministic-computations
            • Environment
            • Paging
          • Implemented-opcodes
          • To-do
          • Proof-utilities
          • Peripherals
          • Model-validation
          • Modelcalls
          • Concrete-simulation-examples
          • Utils
          • Debugging-code-proofs
        • Axe
        • Execloader
      • Math
      • Testing-utilities
    • Quote
    • Opcode-maps

    Chk-exc-fn

    Signature
    (chk-exc-fn decode-context 
                type-id feature-flags proc-mode 
                prefixes rex-byte opcode modr/m sib x86) 
     
      → 
    *
    Arguments
    decode-context — Guard (symbolp decode-context).
    type-id — Guard (symbolp type-id).
    feature-flags — Guard (symbol-listp feature-flags).

    Definitions and Theorems

    Function: chk-exc-fn

    (defun chk-exc-fn
           (decode-context type-id feature-flags proc-mode
                           prefixes rex-byte opcode modr/m sib x86)
     (declare (xargs :stobjs (x86)))
     (declare (type (integer 0 4) proc-mode)
              (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 (xargs :guard (and (symbolp decode-context)
                                 (symbolp type-id)
                                 (symbol-listp feature-flags))))
     (declare (ignore opcode modr/m sib))
     (declare
       (xargs
            :guard (and (member-eq decode-context '(:legacy :vex :evex))
                        (subsetp-equal feature-flags
                                       *supported-feature-flags*))))
     (let ((__function__ 'chk-exc-fn))
       (declare (ignorable __function__))
       (cond ((and (eq decode-context :vex)
                   (or (ud-reps-used)
                       (ud-opr-used)
                       (not (eql rex-byte 0))
                       (not (or (eql proc-mode 0)
                                (eql proc-mode 1)
                                (eql proc-mode 2)))))
              :ud)
             ((or (eq type-id :type-vex-gpr)
                  (eq type-id :type-13))
              (cond ((equal (feature-flags feature-flags) 0)
                     :ud)))
             ((equal (cr0bits->ts (cr0)) 1) :nm)
             ((and (not (member-eq type-id
                                   '(:type-22-7 :type-22-8 :type-22-9)))
                   (equal (cr4bits->osfxsr (cr4)) 0))
              :ud)
             ((or (equal (cr0bits->em (cr0)) 1)
                  (ud-lock-used)
                  (equal (feature-flags feature-flags) 0))
              :ud))))