Transform
(vl-mult-occform x nf mod ialist warnings) → (mv new-warnings new-modules new-modinsts new-assigns new-nf)
Function:
(defun vl-mult-occform (x nf mod ialist warnings) (declare (xargs :guard (and (vl-assign-p x) (vl-namefactory-p nf) (vl-module-p mod) (vl-warninglist-p warnings) (equal ialist (vl-make-moditem-alist mod))))) (declare (xargs :guard (and (not (vl-atom-p (vl-assign->expr x))) (member (vl-nonatom->op (vl-assign->expr x)) '(:vl-binary-times)) t))) (let ((__function__ 'vl-mult-occform)) (declare (ignorable __function__)) (b* ((x (vl-assign-fix x)) (warnings (vl-warninglist-fix warnings)) (nf (vl-namefactory-fix nf))) (b* (((vl-assign x) x) (arg1 (first (vl-nonatom->args x.expr))) (arg2 (second (vl-nonatom->args x.expr))) (width (vl-expr->finalwidth x.expr)) (type (vl-expr->finaltype x.expr)) ((unless (and (posp width) (equal width (vl-expr->finalwidth x.lvalue)) (equal width (vl-expr->finalwidth arg1)) (equal width (vl-expr->finalwidth arg2)) type (vl-expr->finaltype x.lvalue) (eq type (vl-expr->finaltype arg1)) (eq type (vl-expr->finaltype arg2)))) (occform-return :assigns (list x) :warnings (fatal :type :vl-programming-error :msg "~a0: bad widths/types in multiplication." :args (list x)))) ((mv warnings arg1) (vl-occform-argfix arg1 mod ialist warnings)) ((mv warnings arg2) (vl-occform-argfix arg2 mod ialist warnings)) (basename "vl_mult") ((mv instname nf) (vl-namefactory-indexed-name basename nf)) (mods (vl-make-n-bit-mult width)) (modinst (vl-simple-instantiate (car mods) instname (list x.lvalue arg1 arg2) :loc x.loc))) (occform-return :mods mods :modinsts (list modinst))))))
Theorem:
(defthm vl-warninglist-p-of-vl-mult-occform.new-warnings (b* (((mv ?new-warnings ?new-modules ?new-modinsts ?new-assigns ?new-nf) (vl-mult-occform x nf mod ialist warnings))) (vl-warninglist-p new-warnings)) :rule-classes :rewrite)
Theorem:
(defthm vl-modulelist-p-of-vl-mult-occform.new-modules (b* (((mv ?new-warnings ?new-modules ?new-modinsts ?new-assigns ?new-nf) (vl-mult-occform x nf mod ialist warnings))) (vl-modulelist-p new-modules)) :rule-classes :rewrite)
Theorem:
(defthm vl-modinstlist-p-of-vl-mult-occform.new-modinsts (b* (((mv ?new-warnings ?new-modules ?new-modinsts ?new-assigns ?new-nf) (vl-mult-occform x nf mod ialist warnings))) (vl-modinstlist-p new-modinsts)) :rule-classes :rewrite)
Theorem:
(defthm vl-assignlist-p-of-vl-mult-occform.new-assigns (b* (((mv ?new-warnings ?new-modules ?new-modinsts ?new-assigns ?new-nf) (vl-mult-occform x nf mod ialist warnings))) (vl-assignlist-p new-assigns)) :rule-classes :rewrite)
Theorem:
(defthm vl-namefactory-p-of-vl-mult-occform.new-nf (b* (((mv ?new-warnings ?new-modules ?new-modinsts ?new-assigns ?new-nf) (vl-mult-occform x nf mod ialist warnings))) (vl-namefactory-p new-nf)) :rule-classes :rewrite)
Theorem:
(defthm vl-mult-occform-mvtypes-1 (true-listp (mv-nth 1 (vl-mult-occform x nf mod ialist warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-mult-occform-mvtypes-2 (true-listp (mv-nth 2 (vl-mult-occform x nf mod ialist warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-mult-occform-mvtypes-3 (true-listp (mv-nth 3 (vl-mult-occform x nf mod ialist warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-mult-occform-of-vl-assign-fix-x (equal (vl-mult-occform (vl-assign-fix x) nf mod ialist warnings) (vl-mult-occform x nf mod ialist warnings)))
Theorem:
(defthm vl-mult-occform-vl-assign-equiv-congruence-on-x (implies (vl-assign-equiv x x-equiv) (equal (vl-mult-occform x nf mod ialist warnings) (vl-mult-occform x-equiv nf mod ialist warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-mult-occform-of-vl-namefactory-fix-nf (equal (vl-mult-occform x (vl-namefactory-fix nf) mod ialist warnings) (vl-mult-occform x nf mod ialist warnings)))
Theorem:
(defthm vl-mult-occform-vl-namefactory-equiv-congruence-on-nf (implies (vl-namefactory-equiv nf nf-equiv) (equal (vl-mult-occform x nf mod ialist warnings) (vl-mult-occform x nf-equiv mod ialist warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-mult-occform-of-vl-module-fix-mod (equal (vl-mult-occform x nf (vl-module-fix mod) ialist warnings) (vl-mult-occform x nf mod ialist warnings)))
Theorem:
(defthm vl-mult-occform-vl-module-equiv-congruence-on-mod (implies (vl-module-equiv mod mod-equiv) (equal (vl-mult-occform x nf mod ialist warnings) (vl-mult-occform x nf mod-equiv ialist warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-mult-occform-of-vl-warninglist-fix-warnings (equal (vl-mult-occform x nf mod ialist (vl-warninglist-fix warnings)) (vl-mult-occform x nf mod ialist warnings)))
Theorem:
(defthm vl-mult-occform-vl-warninglist-equiv-congruence-on-warnings (implies (vl-warninglist-equiv warnings warnings-equiv) (equal (vl-mult-occform x nf mod ialist warnings) (vl-mult-occform x nf mod ialist warnings-equiv))) :rule-classes :congruence)