• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
      • Apt
      • Zfc
      • Acre
      • Milawa
      • Smtlink
      • Abnf
      • Vwsim
      • Isar
      • Wp-gen
      • Dimacs-reader
      • Pfcs
      • Legacy-defrstobj
      • Proof-checker-array
      • Soft
      • C
      • Farray
      • Rp-rewriter
      • Instant-runoff-voting
      • Imp-language
      • Sidekick
      • Leftist-trees
      • Java
      • Taspi
      • Bitcoin
      • Riscv
        • Instructions
        • States
          • Stat
          • Stat-validp
          • Write-memory-unsigned64
          • Write-memory-unsigned32
          • Write-memory-unsigned8
          • Write-memory-unsigned16
          • Read-xreg-unsigned
          • Write-xreg-32
          • States64
            • Write64-xreg
            • Write64-xreg-32
              • Write64-mem-ubyte64-lendian
              • Write64-mem-ubyte16-lendian
              • Xregfile64
              • State64
              • Memory64
              • Write64-mem-ubyte32-lendian
              • Write64-pc
              • Write64-mem-ubyte8
              • Read64-mem-ubyte64-lendian
              • Read64-mem-ubyte16-lendian
              • Read64-mem-ubyte32-lendian
              • Read64-xreg-unsigned
              • Read64-mem-ubyte8
              • Read64-xreg-unsigned32
              • Read64-xreg-signed32
              • Read64-xreg-signed
              • Inc64-pc
              • Read64-pc
              • Error64p
              • Error64
              • *mem64-size*
            • Write-xreg
            • Read-memory-unsigned8
            • Read-memory-unsigned64
            • Read-memory-unsigned32
            • Read-memory-unsigned16
            • Read-xreg-signed
            • Read-xreg-unsigned32
            • States32
            • Write-pc
            • Read-xreg-signed32
            • Read-pc
            • Inc4-pc
          • Decoding
          • Encoding
          • Features
          • Semantics
          • Execution
        • Des
        • Ethereum
        • X86isa
        • Sha-2
        • Yul
        • Zcash
        • Proof-checker-itp13
        • Regex
        • ACL2-programming-language
        • Json
        • Jfkr
        • Equational
        • Cryptography
        • Poseidon
        • Where-do-i-place-my-book
        • Axe
        • Bigmems
        • Builtins
        • Execloader
        • Aleo
        • Solidity
        • Paco
        • Concurrent-programs
        • Bls12-377-curves
      • Debugging
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • States64

    Write64-xreg-32

    Write an integer to the low 32 bits of an x register, sign-extending it to the high 32 bits of the register.

    Signature
    (write64-xreg-32 reg val stat) → new-stat
    Arguments
    reg — Guard (ubyte5p reg).
    val — Guard (integerp val).
    stat — Guard (state64p stat).
    Returns
    new-stat — Type (state64p new-stat).

    The register index consists of 5 bits.

    The value to write is actually any integer, signed or unsigned, of which we only write the low 32 bits into the register, by converting it to a signed 32-bit integer, and then writing that to the register, which sign-extends it.

    The fact that the value to write is any integer is handy for callers, who can just pass the integer (e.g. the exact result of an operation) and let this writer function convert the integer for the register.

    Definitions and Theorems

    Function: write64-xreg-32

    (defun write64-xreg-32 (reg val stat)
      (declare (xargs :guard (and (ubyte5p reg)
                                  (integerp val)
                                  (state64p stat))))
      (let ((__function__ 'write64-xreg-32))
        (declare (ignorable __function__))
        (write64-xreg reg (logext 32 val)
                      stat)))

    Theorem: state64p-of-write64-xreg-32

    (defthm state64p-of-write64-xreg-32
      (b* ((new-stat (write64-xreg-32 reg val stat)))
        (state64p new-stat))
      :rule-classes :rewrite)

    Theorem: write64-xreg-32-of-ubyte5-fix-reg

    (defthm write64-xreg-32-of-ubyte5-fix-reg
      (equal (write64-xreg-32 (ubyte5-fix reg)
                              val stat)
             (write64-xreg-32 reg val stat)))

    Theorem: write64-xreg-32-ubyte5-equiv-congruence-on-reg

    (defthm write64-xreg-32-ubyte5-equiv-congruence-on-reg
      (implies (ubyte5-equiv reg reg-equiv)
               (equal (write64-xreg-32 reg val stat)
                      (write64-xreg-32 reg-equiv val stat)))
      :rule-classes :congruence)

    Theorem: write64-xreg-32-of-ifix-val

    (defthm write64-xreg-32-of-ifix-val
      (equal (write64-xreg-32 reg (ifix val) stat)
             (write64-xreg-32 reg val stat)))

    Theorem: write64-xreg-32-int-equiv-congruence-on-val

    (defthm write64-xreg-32-int-equiv-congruence-on-val
      (implies (acl2::int-equiv val val-equiv)
               (equal (write64-xreg-32 reg val stat)
                      (write64-xreg-32 reg val-equiv stat)))
      :rule-classes :congruence)

    Theorem: write64-xreg-32-of-state64-fix-stat

    (defthm write64-xreg-32-of-state64-fix-stat
      (equal (write64-xreg-32 reg val (state64-fix stat))
             (write64-xreg-32 reg val stat)))

    Theorem: write64-xreg-32-state64-equiv-congruence-on-stat

    (defthm write64-xreg-32-state64-equiv-congruence-on-stat
      (implies (state64-equiv stat stat-equiv)
               (equal (write64-xreg-32 reg val stat)
                      (write64-xreg-32 reg val stat-equiv)))
      :rule-classes :congruence)