Semantics of instructions.
Function:
(defun exec-instr (instr pc stat feat) (declare (xargs :guard (and (instrp instr) (statp stat) (featp feat)))) (declare (xargs :guard (and (instr-validp instr feat) (cond ((feat-32p feat) (ubyte32p pc)) ((feat-64p feat) (ubyte64p pc)) (t (impossible))) (stat-validp stat feat)))) (let ((__function__ 'exec-instr)) (declare (ignorable __function__)) (instr-case instr :op-imm (exec-op-imm instr.funct instr.rd instr.rs1 instr.imm stat feat) :op-imms32 (exec-op-imms32 instr.funct instr.rd instr.rs1 instr.imm stat feat) :op-imms64 (exec-op-imms64 instr.funct instr.rd instr.rs1 instr.imm stat feat) :op-imm-32 (exec-op-imm-32 instr.funct instr.rd instr.rs1 instr.imm stat feat) :op-imms-32 (exec-op-imms-32 instr.funct instr.rd instr.rs1 instr.imm stat feat) :lui (exec-lui instr.rd instr.imm stat feat) :auipc (exec-auipc instr.rd instr.imm pc stat feat) :op (exec-op instr.funct instr.rd instr.rs1 instr.rs2 stat feat) :op-32 (exec-op-32 instr.funct instr.rd instr.rs1 instr.rs2 stat feat) :jal (exec-jal instr.rd instr.imm pc stat feat) :jalr (exec-jalr instr.rd instr.rs1 instr.imm pc stat feat) :branch (exec-branch instr.funct instr.rs1 instr.rs2 instr.imm pc stat feat) :load (exec-load instr.funct instr.rd instr.rs1 instr.imm stat feat) :store (exec-store instr.funct instr.rs1 instr.rs2 instr.imm stat feat))))
Theorem:
(defthm statp-of-exec-instr (b* ((new-stat (exec-instr instr pc stat feat))) (statp new-stat)) :rule-classes :rewrite)
Theorem:
(defthm exec-instr-of-instr-fix-instr (equal (exec-instr (instr-fix instr) pc stat feat) (exec-instr instr pc stat feat)))
Theorem:
(defthm exec-instr-instr-equiv-congruence-on-instr (implies (instr-equiv instr instr-equiv) (equal (exec-instr instr pc stat feat) (exec-instr instr-equiv pc stat feat))) :rule-classes :congruence)
Theorem:
(defthm exec-instr-of-stat-fix-stat (equal (exec-instr instr pc (stat-fix stat) feat) (exec-instr instr pc stat feat)))
Theorem:
(defthm exec-instr-stat-equiv-congruence-on-stat (implies (stat-equiv stat stat-equiv) (equal (exec-instr instr pc stat feat) (exec-instr instr pc stat-equiv feat))) :rule-classes :congruence)
Theorem:
(defthm exec-instr-of-feat-fix-feat (equal (exec-instr instr pc stat (feat-fix feat)) (exec-instr instr pc stat feat)))
Theorem:
(defthm exec-instr-feat-equiv-congruence-on-feat (implies (feat-equiv feat feat-equiv) (equal (exec-instr instr pc stat feat) (exec-instr instr pc stat feat-equiv))) :rule-classes :congruence)