Skip to content

Commit

Permalink
wdadd change
Browse files Browse the repository at this point in the history
  • Loading branch information
Slukoo authored and bgregoir committed Jun 21, 2023
1 parent 1247d85 commit c9c694c
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
11 changes: 6 additions & 5 deletions eclib/JModel_m4.ec
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,9 @@ op UMULL (x y: W32.t) : W32.t * W32.t =
op UMULLcc x y g o h = if g then UMULL x y else (o, h).

op UMLAL (u v x y: W32.t) : W32.t * W32.t =
let (hi, lo) = mulu x y in
(lo + u, hi + v + of_int (b2i (carry_add lo u false)))%W32.
let n = wdwordu (mulhi x y) (x*y) in
let m = wdwordu v u in
(of_int (n + m), of_int (IntDiv.(%/) (n + m) modulus))%W32.
op UMLALcc u v x y g o h= if g then UMLAL u v x y else (o, h).

op SMULL (x y: W32.t) : W32.t * W32.t =
Expand All @@ -194,9 +195,9 @@ op SMULL (x y: W32.t) : W32.t * W32.t =
op SMULLcc x y g o h = if g then SMULL x y else (o, h).

op SMLAL (u v x y: W32.t) : W32.t * W32.t =
let lo = x * y in
let hi = wmulhs x y in
(lo + u, hi + v + of_int (b2i (carry_add lo u false)))%W32.
let n = wdwords (wmulhs x y) (x*y) in
let m = wdwords v u in
(of_int (n + m), of_int (IntDiv.(%/) (n + m) modulus))%W32.
op SMLALcc u v x y g o h= if g then SMLAL u v x y else (o, h).

op SMMUL (x y: W32.t) : W32.t =
Expand Down
10 changes: 4 additions & 6 deletions proofs/lang/word.v
Original file line number Diff line number Diff line change
Expand Up @@ -633,14 +633,12 @@ Definition waddcarry sz (x y: word sz) (c: bool) :=
(wbase sz <=? n, wrepr sz n).

Definition wdaddu sz (hi_1 lo_1 hi_2 lo_2: word sz) :=
let (c, lo) := waddcarry lo_1 lo_2 false in
let hi := wunsigned hi_1 + wunsigned hi_2 + Z.b2z c in
(lo, wrepr sz hi).
let n := (wdwordu hi_1 lo_1) + (wdwordu hi_2 lo_2) in
(wrepr sz n, wrepr sz (Z.quot n (wbase sz))).

Definition wdadds sz (hi_1 lo_1 hi_2 lo_2: word sz) :=
let (c, lo) := waddcarry lo_1 lo_2 false in
let hi := wsigned hi_1 + wsigned hi_2 + Z.b2z c in
(lo, wrepr sz hi).
let n := (wdwords hi_1 lo_1) + (wdwords hi_2 lo_2) in
(wrepr sz n, wrepr sz (Z.quot n (wbase sz))).

Definition wsubcarry sz (x y: word sz) (c: bool) :=
let n := wunsigned x - wunsigned y - Z.b2z c in
Expand Down

0 comments on commit c9c694c

Please sign in to comment.