Encode the name of
an instruction with the
(encode-load-funct funct feat) → funct3
Function:
(defun encode-load-funct (funct feat) (declare (xargs :guard (and (load-funct-p funct) (featp feat)))) (declare (xargs :guard (implies (or (load-funct-case funct :lwu) (load-funct-case funct :ld)) (feat-64p feat)))) (let ((__function__ 'encode-load-funct)) (declare (ignorable __function__)) (load-funct-case funct :lb 0 :lbu 4 :lh 1 :lhu 5 :lw 2 :lwu (assert$ (feat-64p feat) 6) :ld (assert$ (feat-64p feat) 3))))
Theorem:
(defthm ubyte3p-of-encode-load-funct (b* ((funct3 (encode-load-funct funct feat))) (ubyte3p funct3)) :rule-classes :rewrite)
Theorem:
(defthm encode-load-funct-of-load-funct-fix-funct (equal (encode-load-funct (load-funct-fix funct) feat) (encode-load-funct funct feat)))
Theorem:
(defthm encode-load-funct-load-funct-equiv-congruence-on-funct (implies (load-funct-equiv funct funct-equiv) (equal (encode-load-funct funct feat) (encode-load-funct funct-equiv feat))) :rule-classes :congruence)
Theorem:
(defthm encode-load-funct-of-feat-fix-feat (equal (encode-load-funct funct (feat-fix feat)) (encode-load-funct funct feat)))
Theorem:
(defthm encode-load-funct-feat-equiv-congruence-on-feat (implies (feat-equiv feat feat-equiv) (equal (encode-load-funct funct feat) (encode-load-funct funct feat-equiv))) :rule-classes :congruence)