• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
        • Warnings
        • Primitives
        • Use-set
        • Syntax
        • Getting-started
        • Utilities
        • Loader
        • Transforms
        • Lint
        • Mlib
          • Scopestack
          • Filtering-by-name
          • Vl-namefactory
          • Substitution
          • Allexprs
          • Hid-tools
          • Vl-consteval
          • Range-tools
          • Lvalexprs
          • Hierarchy
          • Finding-by-name
          • Expr-tools
          • Expr-slicing
          • Stripping-functions
          • Stmt-tools
          • Modnamespace
          • Vl-parse-expr-from-str
          • Welltyped
          • Reordering-by-name
          • Flat-warnings
          • Genblob
          • Expr-building
          • Datatype-tools
          • Syscalls
          • Relocate
          • Expr-cleaning
          • Namemangle
          • Caremask
            • Vl-msb-bits-to-care-mask
            • Vl-msb-bits-zap-dontcares
            • Vl-msb-bits-to-intliteral
            • Vl-intliteral-msb-bits
            • Port-tools
            • Lvalues
          • Server
          • Kit
          • Printer
          • Esim-vl
          • Well-formedness
        • Sv
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Caremask

    Vl-intliteral-msb-bits

    Try to explode a match-expression into a vl-bitlist-p.

    Signature
    (vl-intliteral-msb-bits x) → (mv okp msb-bits)
    Arguments
    x — A match expression in a casex or casez statement, e.g., typically this is a weirdint with some wildcard bits, such as 4'b10??.
        Guard (vl-expr-p x).
    Returns
    okp — Type (booleanp okp).
    msb-bits — Type (vl-bitlist-p msb-bits).

    For now we just support simple weirdints and constints. We could probably easily extend this to arbitrary concatenations of weirdints and constints, but that's probably overkill.

    Definitions and Theorems

    Function: vl-intliteral-msb-bits

    (defun vl-intliteral-msb-bits (x)
      (declare (xargs :guard (vl-expr-p x)))
      (declare (xargs :guard (vl-expr-welltyped-p x)))
      (let ((__function__ 'vl-intliteral-msb-bits))
        (declare (ignorable __function__))
        (b* (((unless (vl-fast-atom-p x))
              (mv nil nil))
             (guts (vl-atom->guts x))
             ((when (vl-fast-weirdint-p guts))
              (mv t (vl-weirdint->bits guts)))
             ((unless (vl-constint-p guts))
              (mv nil nil)))
          (mv t (vl-constint->msb-bits x)))))

    Theorem: booleanp-of-vl-intliteral-msb-bits.okp

    (defthm booleanp-of-vl-intliteral-msb-bits.okp
      (b* (((mv ?okp ?msb-bits)
            (vl-intliteral-msb-bits x)))
        (booleanp okp))
      :rule-classes :type-prescription)

    Theorem: vl-bitlist-p-of-vl-intliteral-msb-bits.msb-bits

    (defthm vl-bitlist-p-of-vl-intliteral-msb-bits.msb-bits
      (b* (((mv ?okp ?msb-bits)
            (vl-intliteral-msb-bits x)))
        (vl-bitlist-p msb-bits))
      :rule-classes :rewrite)

    Theorem: len-of-vl-intliteral-msb-bits

    (defthm len-of-vl-intliteral-msb-bits
      (b* (((mv okp msb-bits)
            (vl-intliteral-msb-bits x)))
        (implies (and okp (vl-expr-welltyped-p x))
                 (equal (len msb-bits)
                        (vl-expr->finalwidth x)))))

    Theorem: consp-of-vl-intliteral-msb-bits

    (defthm consp-of-vl-intliteral-msb-bits
      (b* (((mv okp msb-bits)
            (vl-intliteral-msb-bits x)))
        (implies (and okp (vl-expr-welltyped-p x))
                 (equal (consp msb-bits)
                        (posp (vl-expr->finalwidth x))))))

    Theorem: vl-intliteral-msb-bits-of-vl-expr-fix-x

    (defthm vl-intliteral-msb-bits-of-vl-expr-fix-x
      (equal (vl-intliteral-msb-bits (vl-expr-fix x))
             (vl-intliteral-msb-bits x)))

    Theorem: vl-intliteral-msb-bits-vl-expr-equiv-congruence-on-x

    (defthm vl-intliteral-msb-bits-vl-expr-equiv-congruence-on-x
      (implies (vl-expr-equiv x x-equiv)
               (equal (vl-intliteral-msb-bits x)
                      (vl-intliteral-msb-bits x-equiv)))
      :rule-classes :congruence)