diff options
Diffstat (limited to 'src/Compilers/Z/Reify.v')
-rw-r--r-- | src/Compilers/Z/Reify.v | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/Compilers/Z/Reify.v b/src/Compilers/Z/Reify.v index 6d41df19e..d3a86dde1 100644 --- a/src/Compilers/Z/Reify.v +++ b/src/Compilers/Z/Reify.v @@ -22,22 +22,29 @@ Ltac base_reify_op op op_head extra ::= | @Z.opp => constr:(reify_op op op_head 1 (Opp TZ TZ)) | @Z.zselect => constr:(reify_op op op_head 3 (Zselect TZ TZ TZ TZ)) | @Z.add_with_carry => constr:(reify_op op op_head 3 (AddWithCarry TZ TZ TZ TZ)) + | @Z.sub_with_borrow => constr:(reify_op op op_head 3 (SubWithBorrow TZ TZ TZ TZ)) | @Z.add_with_get_carry => lazymatch extra with | @Z.add_with_get_carry ?bit_width _ _ _ => constr:(reify_op op op_head 3 (AddWithGetCarry bit_width TZ TZ TZ TZ TZ)) | _ => fail 100 "Anomaly: In Reflection.Z.base_reify_op: head is Z.add_with_get_carry but body is wrong:" extra end + | @Z.sub_with_get_borrow + => lazymatch extra with + | @Z.sub_with_get_borrow ?bit_width _ _ _ + => constr:(reify_op op op_head 3 (SubWithGetBorrow bit_width TZ TZ TZ TZ TZ)) + | _ => fail 100 "Anomaly: In Reflection.Z.base_reify_op: head is Z.sub_with_get_borrow but body is wrong:" extra + end end. Ltac base_reify_type T ::= lazymatch T with | Z => TZ end. Ltac Reify' e := - let e := (eval cbv beta delta [Z.add_get_carry] in e) in + let e := (eval cbv beta delta [Z.add_get_carry Z.sub_get_borrow] in e) in Compilers.Reify.Reify' base_type interp_base_type op e. Ltac Reify e := - let e := (eval cbv beta delta [Z.add_get_carry] in e) in + let e := (eval cbv beta delta [Z.add_get_carry Z.sub_get_borrow] in e) in let v := Compilers.Reify.Reify base_type interp_base_type op make_const e in constr:(ExprEta v). Ltac prove_ExprEta_Compile_correct := |