diff options
author | Andres Erbsen <andreser@mit.edu> | 2017-05-14 17:35:53 -0400 |
---|---|---|
committer | Andres Erbsen <andreser@mit.edu> | 2017-05-14 17:36:00 -0400 |
commit | 8bade36d3e2162e6acacd5f057fe6b106f49a637 (patch) | |
tree | 9ca9641a25d3bcb1a31b7b20ce6edd5a23651ce5 /src/Specific/ArithmeticSynthesisTest.v | |
parent | e3e3be5b5f9d02059a9dd6f36ea4ddf36395f7e0 (diff) |
preserve common subexpressions in donna-derived code
Diffstat (limited to 'src/Specific/ArithmeticSynthesisTest.v')
-rw-r--r-- | src/Specific/ArithmeticSynthesisTest.v | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/Specific/ArithmeticSynthesisTest.v b/src/Specific/ArithmeticSynthesisTest.v index bed33de2e..bdb9fd361 100644 --- a/src/Specific/ArithmeticSynthesisTest.v +++ b/src/Specific/ArithmeticSynthesisTest.v @@ -164,25 +164,25 @@ Section Ops51. (* Micro-optimized form from curve25519-donna-c64 by Adam Langley (Google) and Daniel Bernstein. See <https://github.com/agl/curve25519-donna/blob/master/LICENSE.md>. *) let '(r4, r3, r2, r1, r0) := a in let '(s4, s3, s2, s1, s0) := b in - let t0 := r0 * s0 in - let t1 := r0 * s1 + r1 * s0 in - let t2 := r0 * s2 + r2 * s0 + r1 * s1 in - let t3 := r0 * s3 + r3 * s0 + r1 * s2 + r2 * s1 in - let t4 := r0 * s4 + r4 * s0 + r3 * s1 + r1 * s3 + r2 * s2 in + dlet t0 := r0 * s0 in + dlet t1 := r0 * s1 + r1 * s0 in + dlet t2 := r0 * s2 + r2 * s0 + r1 * s1 in + dlet t3 := r0 * s3 + r3 * s0 + r1 * s2 + r2 * s1 in + dlet t4 := r0 * s4 + r4 * s0 + r3 * s1 + r1 * s3 + r2 * s2 in - let r4' := r4*19 in - let r1' := r1*19 in - let r2' := r2*19 in - let r3' := r3*19 in + dlet r4' := r4*19 in + dlet r1' := r1*19 in + dlet r2' := r2*19 in + dlet r3' := r3*19 in - let t0 := t0 + r4' * s1 + r1' * s4 + r2' * s3 + r3' * s2 in - let t1 := t1 + r4' * s2 + r2' * s4 + r3' * s3 in - let t2 := t2 + r4' * s3 + r3' * s4 in - let t3 := t3 + r4' * s4 in + dlet t0 := t0 + r4' * s1 + r1' * s4 + r2' * s3 + r3' * s2 in + dlet t1 := t1 + r4' * s2 + r2' * s4 + r3' * s3 in + dlet t2 := t2 + r4' * s3 + r3' * s4 in + dlet t3 := t3 + r4' * s4 in (t4, t3, t2, t1, t0) ). Focus 2. { - break_match; cbv [runtime_mul runtime_add]; repeat apply (f_equal2 pair); ring. + break_match; cbv [Let_In runtime_mul runtime_add]; repeat apply (f_equal2 pair); ring. } Unfocus. reflexivity. |