• 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-pc

    Write the program counter.

    Signature
    (write64-pc pc stat) → new-stat
    Arguments
    pc — Guard (integerp pc).
    stat — Guard (state64p stat).
    Returns
    new-stat — Type (state64p new-stat).

    The value is any integer, signed or unsigned, which is converted to an unsigned 64-bit integer by keeping its low 64 bits.

    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. [ISA:1.4] says that address computations wrap round ignoring overflow, i.e. the last address in the address space is adjacent to address 0.

    Definitions and Theorems

    Function: write64-pc

    (defun write64-pc (pc stat)
      (declare (xargs :guard (and (integerp pc) (state64p stat))))
      (let ((__function__ 'write64-pc))
        (declare (ignorable __function__))
        (change-state64 stat
                        :pc (loghead 64 pc))))

    Theorem: state64p-of-write64-pc

    (defthm state64p-of-write64-pc
      (b* ((new-stat (write64-pc pc stat)))
        (state64p new-stat))
      :rule-classes :rewrite)

    Theorem: write64-pc-of-ifix-pc

    (defthm write64-pc-of-ifix-pc
      (equal (write64-pc (ifix pc) stat)
             (write64-pc pc stat)))

    Theorem: write64-pc-int-equiv-congruence-on-pc

    (defthm write64-pc-int-equiv-congruence-on-pc
      (implies (acl2::int-equiv pc pc-equiv)
               (equal (write64-pc pc stat)
                      (write64-pc pc-equiv stat)))
      :rule-classes :congruence)

    Theorem: write64-pc-of-state64-fix-stat

    (defthm write64-pc-of-state64-fix-stat
      (equal (write64-pc pc (state64-fix stat))
             (write64-pc pc stat)))

    Theorem: write64-pc-state64-equiv-congruence-on-stat

    (defthm write64-pc-state64-equiv-congruence-on-stat
      (implies (state64-equiv stat stat-equiv)
               (equal (write64-pc pc stat)
                      (write64-pc pc stat-equiv)))
      :rule-classes :congruence)