• 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
        • Decoding
        • Encoding
        • Features
        • Semantics
          • Semantics64
            • Exec64-bgeu
            • Exec64-bltu
            • Exec64-blt
            • Exec64-bge
            • Exec64-bne
            • Exec64-beq
            • Exec64-jalr
            • Exec64-branch
            • Exec64-jal
            • Exec64-op-imms-32
            • Exec64-op-32
            • Exec64-op
            • Exec64-srlw
            • Exec64-sraw
            • Exec64-op-imm-32
            • Exec64-op-imm
            • Exec64-auipc
            • Exec64-store
            • Exec64-sra
            • Exec64-sltiu
            • Exec64-remw
            • Exec64-remuw
            • Exec64-op-imms
            • Exec64-load
            • Exec64-srliw
            • Exec64-srl
            • Exec64-sraiw
            • Exec64-slti
            • Exec64-sllw
            • Exec64-remu
            • Exec64-rem
            • Exec64-divw
            • Exec64-divuw
            • Exec64-addiw
            • Exec64-xori
            • Exec64-srli
            • Exec64-srai
            • Exec64-ori
            • Exec64-divu
            • Exec64-andi
            • Exec64-addi
            • Exec64-sltu
              • Exec64-slt
              • Exec64-slliw
              • Exec64-sll
              • Exec64-mulhsu
              • Exec64-lwu
              • Exec64-lhu
              • Exec64-div
              • Exec64-xor
              • Exec64-sw
              • Exec64-slli
              • Exec64-sh
              • Exec64-mulw
              • Exec64-mulhu
              • Exec64-mulh
              • Exec64-lw
              • Exec64-lh
              • Exec64-lbu
              • Exec64-addw
              • Exec64-subw
              • Exec64-sub
              • Exec64-sd
              • Exec64-sb
              • Exec64-or
              • Exec64-ld
              • Exec64-lb
              • Exec64-and
              • Exec64-mul
              • Exec64-add
              • Exec64-instr
              • Eff64-addr
              • Exec64-lui
            • Semantics32
          • 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
    • Semantics64

    Exec64-sltu

    Semantics of the SLTU instruction [ISA:2.4.2].

    Signature
    (exec64-sltu rd rs1 rs2 stat) → new-stat
    Arguments
    rd — Guard (ubyte5p rd).
    rs1 — Guard (ubyte5p rs1).
    rs2 — Guard (ubyte5p rs2).
    stat — Guard (state64p stat).
    Returns
    new-stat — Type (state64p new-stat).

    We read two unsigned 64-bit integers from rs1 and rs2. We compare the two unsigned integers: if the first one is less than the second, the result is 1, otherwise it is 0. We write the result to rd. We increment the program counter.

    Definitions and Theorems

    Function: exec64-sltu

    (defun exec64-sltu (rd rs1 rs2 stat)
      (declare (xargs :guard (and (ubyte5p rd)
                                  (ubyte5p rs1)
                                  (ubyte5p rs2)
                                  (state64p stat))))
      (let ((__function__ 'exec64-sltu))
        (declare (ignorable __function__))
        (b* ((rs1-operand (read64-xreg-unsigned rs1 stat))
             (rs2-operand (read64-xreg-unsigned rs2 stat))
             (result (if (< rs1-operand rs2-operand) 1 0))
             (stat (write64-xreg rd result stat))
             (stat (inc64-pc stat)))
          stat)))

    Theorem: state64p-of-exec64-sltu

    (defthm state64p-of-exec64-sltu
      (b* ((new-stat (exec64-sltu rd rs1 rs2 stat)))
        (state64p new-stat))
      :rule-classes :rewrite)

    Theorem: exec64-sltu-of-ubyte5-fix-rd

    (defthm exec64-sltu-of-ubyte5-fix-rd
      (equal (exec64-sltu (ubyte5-fix rd)
                          rs1 rs2 stat)
             (exec64-sltu rd rs1 rs2 stat)))

    Theorem: exec64-sltu-ubyte5-equiv-congruence-on-rd

    (defthm exec64-sltu-ubyte5-equiv-congruence-on-rd
      (implies (ubyte5-equiv rd rd-equiv)
               (equal (exec64-sltu rd rs1 rs2 stat)
                      (exec64-sltu rd-equiv rs1 rs2 stat)))
      :rule-classes :congruence)

    Theorem: exec64-sltu-of-ubyte5-fix-rs1

    (defthm exec64-sltu-of-ubyte5-fix-rs1
      (equal (exec64-sltu rd (ubyte5-fix rs1)
                          rs2 stat)
             (exec64-sltu rd rs1 rs2 stat)))

    Theorem: exec64-sltu-ubyte5-equiv-congruence-on-rs1

    (defthm exec64-sltu-ubyte5-equiv-congruence-on-rs1
      (implies (ubyte5-equiv rs1 rs1-equiv)
               (equal (exec64-sltu rd rs1 rs2 stat)
                      (exec64-sltu rd rs1-equiv rs2 stat)))
      :rule-classes :congruence)

    Theorem: exec64-sltu-of-ubyte5-fix-rs2

    (defthm exec64-sltu-of-ubyte5-fix-rs2
      (equal (exec64-sltu rd rs1 (ubyte5-fix rs2)
                          stat)
             (exec64-sltu rd rs1 rs2 stat)))

    Theorem: exec64-sltu-ubyte5-equiv-congruence-on-rs2

    (defthm exec64-sltu-ubyte5-equiv-congruence-on-rs2
      (implies (ubyte5-equiv rs2 rs2-equiv)
               (equal (exec64-sltu rd rs1 rs2 stat)
                      (exec64-sltu rd rs1 rs2-equiv stat)))
      :rule-classes :congruence)

    Theorem: exec64-sltu-of-state64-fix-stat

    (defthm exec64-sltu-of-state64-fix-stat
      (equal (exec64-sltu rd rs1 rs2 (state64-fix stat))
             (exec64-sltu rd rs1 rs2 stat)))

    Theorem: exec64-sltu-state64-equiv-congruence-on-stat

    (defthm exec64-sltu-state64-equiv-congruence-on-stat
      (implies (state64-equiv stat stat-equiv)
               (equal (exec64-sltu rd rs1 rs2 stat)
                      (exec64-sltu rd rs1 rs2 stat-equiv)))
      :rule-classes :congruence)