move wasm modules into individual files
This commit is contained in:
parent
8c23d7a3af
commit
e5dff8b785
1171
fe25519_25/fe25519_invert.wat
Normal file
1171
fe25519_25/fe25519_invert.wat
Normal file
File diff suppressed because it is too large
Load Diff
287
fe25519_25/fe25519_sq.wat
Normal file
287
fe25519_25/fe25519_sq.wat
Normal file
@ -0,0 +1,287 @@
|
||||
(module
|
||||
(memory $0 1)
|
||||
(export "memory" (memory $0))
|
||||
|
||||
(func $sq (export "sq") (param $h i32) (param $f i32) (param $double i32) (param $repeat i32)
|
||||
(local $tmp i64)
|
||||
|
||||
(local $f0 i64)
|
||||
(local $f1 i64)
|
||||
(local $f2 i64)
|
||||
(local $f3 i64)
|
||||
(local $f4 i64)
|
||||
(local $f5 i64)
|
||||
(local $f6 i64)
|
||||
(local $f7 i64)
|
||||
(local $f8 i64)
|
||||
(local $f9 i64)
|
||||
|
||||
(local $h0 i64)
|
||||
(local $h1 i64)
|
||||
(local $h2 i64)
|
||||
(local $h3 i64)
|
||||
(local $h4 i64)
|
||||
(local $h5 i64)
|
||||
(local $h6 i64)
|
||||
(local $h7 i64)
|
||||
(local $h8 i64)
|
||||
(local $h9 i64)
|
||||
|
||||
(local $carry0 i64)
|
||||
(local $carry1 i64)
|
||||
(local $carry2 i64)
|
||||
(local $carry3 i64)
|
||||
(local $carry4 i64)
|
||||
(local $carry5 i64)
|
||||
(local $carry6 i64)
|
||||
(local $carry7 i64)
|
||||
(local $carry8 i64)
|
||||
(local $carry9 i64)
|
||||
|
||||
(local $f0_2 i64)
|
||||
(local $f1_2 i64)
|
||||
(local $f2_2 i64)
|
||||
(local $f3_2 i64)
|
||||
(local $f4_2 i64)
|
||||
(local $f5_2 i64)
|
||||
(local $f6_2 i64)
|
||||
(local $f7_2 i64)
|
||||
|
||||
(local $f5_38 i64)
|
||||
(local $f6_19 i64)
|
||||
(local $f7_38 i64)
|
||||
(local $f8_19 i64)
|
||||
(local $f9_38 i64)
|
||||
|
||||
(local $f0f0 i64)
|
||||
(local $f0f1_2 i64)
|
||||
(local $f0f2_2 i64)
|
||||
(local $f0f3_2 i64)
|
||||
(local $f0f4_2 i64)
|
||||
(local $f0f5_2 i64)
|
||||
(local $f0f6_2 i64)
|
||||
(local $f0f7_2 i64)
|
||||
(local $f0f8_2 i64)
|
||||
(local $f0f9_2 i64)
|
||||
(local $f1f1_2 i64)
|
||||
(local $f1f2_2 i64)
|
||||
(local $f1f3_4 i64)
|
||||
(local $f1f4_2 i64)
|
||||
(local $f1f5_4 i64)
|
||||
(local $f1f6_2 i64)
|
||||
(local $f1f7_4 i64)
|
||||
(local $f1f8_2 i64)
|
||||
(local $f1f9_76 i64)
|
||||
(local $f2f2 i64)
|
||||
(local $f2f3_2 i64)
|
||||
(local $f2f4_2 i64)
|
||||
(local $f2f5_2 i64)
|
||||
(local $f2f6_2 i64)
|
||||
(local $f2f7_2 i64)
|
||||
(local $f2f8_38 i64)
|
||||
(local $f2f9_38 i64)
|
||||
(local $f3f3_2 i64)
|
||||
(local $f3f4_2 i64)
|
||||
(local $f3f5_4 i64)
|
||||
(local $f3f6_2 i64)
|
||||
(local $f3f7_76 i64)
|
||||
(local $f3f8_38 i64)
|
||||
(local $f3f9_76 i64)
|
||||
(local $f4f4 i64)
|
||||
(local $f4f5_2 i64)
|
||||
(local $f4f6_38 i64)
|
||||
(local $f4f7_38 i64)
|
||||
(local $f4f8_38 i64)
|
||||
(local $f4f9_38 i64)
|
||||
(local $f5f5_38 i64)
|
||||
(local $f5f6_38 i64)
|
||||
(local $f5f7_76 i64)
|
||||
(local $f5f8_38 i64)
|
||||
(local $f5f9_76 i64)
|
||||
(local $f6f6_19 i64)
|
||||
(local $f6f7_38 i64)
|
||||
(local $f6f8_38 i64)
|
||||
(local $f6f9_38 i64)
|
||||
(local $f7f7_38 i64)
|
||||
(local $f7f8_38 i64)
|
||||
(local $f7f9_76 i64)
|
||||
(local $f8f8_19 i64)
|
||||
(local $f8f9_38 i64)
|
||||
(local $f9f9_38 i64)
|
||||
|
||||
(set_local $f0 (i64.load32_u offset=0 (get_local $f)))
|
||||
(set_local $f1 (i64.load32_u offset=4 (get_local $f)))
|
||||
(set_local $f2 (i64.load32_u offset=8 (get_local $f)))
|
||||
(set_local $f3 (i64.load32_u offset=12 (get_local $f)))
|
||||
(set_local $f4 (i64.load32_u offset=16 (get_local $f)))
|
||||
(set_local $f5 (i64.load32_u offset=20 (get_local $f)))
|
||||
(set_local $f6 (i64.load32_u offset=24 (get_local $f)))
|
||||
(set_local $f7 (i64.load32_u offset=28 (get_local $f)))
|
||||
(set_local $f8 (i64.load32_u offset=32 (get_local $f)))
|
||||
(set_local $f9 (i64.load32_u offset=36 (get_local $f)))
|
||||
|
||||
(block $end
|
||||
(loop $again
|
||||
(set_local $f0 (i64.extend32_s (get_local $f0)))
|
||||
(set_local $f1 (i64.extend32_s (get_local $f1)))
|
||||
(set_local $f2 (i64.extend32_s (get_local $f2)))
|
||||
(set_local $f3 (i64.extend32_s (get_local $f3)))
|
||||
(set_local $f4 (i64.extend32_s (get_local $f4)))
|
||||
(set_local $f5 (i64.extend32_s (get_local $f5)))
|
||||
(set_local $f6 (i64.extend32_s (get_local $f6)))
|
||||
(set_local $f7 (i64.extend32_s (get_local $f7)))
|
||||
(set_local $f8 (i64.extend32_s (get_local $f8)))
|
||||
(set_local $f9 (i64.extend32_s (get_local $f9)))
|
||||
|
||||
(set_local $f0_2 (i64.mul (i64.const 2 (get_local $f0))))
|
||||
(set_local $f1_2 (i64.mul (i64.const 2 (get_local $f1))))
|
||||
(set_local $f2_2 (i64.mul (i64.const 2 (get_local $f2))))
|
||||
(set_local $f3_2 (i64.mul (i64.const 2 (get_local $f3))))
|
||||
(set_local $f4_2 (i64.mul (i64.const 2 (get_local $f4))))
|
||||
(set_local $f5_2 (i64.mul (i64.const 2 (get_local $f5))))
|
||||
(set_local $f6_2 (i64.mul (i64.const 2 (get_local $f6))))
|
||||
(set_local $f7_2 (i64.mul (i64.const 2 (get_local $f7))))
|
||||
|
||||
(set_local $f5_38 (i64.mul (i64.const 38 (get_local $f5))))
|
||||
(set_local $f6_19 (i64.mul (i64.const 19 (get_local $f6))))
|
||||
(set_local $f7_38 (i64.mul (i64.const 38 (get_local $f7))))
|
||||
(set_local $f8_19 (i64.mul (i64.const 19 (get_local $f8))))
|
||||
(set_local $f9_38 (i64.mul (i64.const 38 (get_local $f9))))
|
||||
|
||||
(set_local $f0f0 (i64.mul (get_local $f0) (get_local $f0)))
|
||||
(set_local $f0f1_2 (i64.mul (get_local $f0_2) (get_local $f1)))
|
||||
(set_local $f0f2_2 (i64.mul (get_local $f0_2) (get_local $f2)))
|
||||
(set_local $f0f3_2 (i64.mul (get_local $f0_2) (get_local $f3)))
|
||||
(set_local $f0f4_2 (i64.mul (get_local $f0_2) (get_local $f4)))
|
||||
(set_local $f0f5_2 (i64.mul (get_local $f0_2) (get_local $f5)))
|
||||
(set_local $f0f6_2 (i64.mul (get_local $f0_2) (get_local $f6)))
|
||||
(set_local $f0f7_2 (i64.mul (get_local $f0_2) (get_local $f7)))
|
||||
(set_local $f0f8_2 (i64.mul (get_local $f0_2) (get_local $f8)))
|
||||
(set_local $f0f9_2 (i64.mul (get_local $f0_2) (get_local $f9)))
|
||||
(set_local $f1f1_2 (i64.mul (get_local $f1_2) (get_local $f1)))
|
||||
(set_local $f1f2_2 (i64.mul (get_local $f1_2) (get_local $f2)))
|
||||
(set_local $f1f3_4 (i64.mul (get_local $f1_2) (get_local $f3_2)))
|
||||
(set_local $f1f4_2 (i64.mul (get_local $f1_2) (get_local $f4)))
|
||||
(set_local $f1f5_4 (i64.mul (get_local $f1_2) (get_local $f5_2)))
|
||||
(set_local $f1f6_2 (i64.mul (get_local $f1_2) (get_local $f6)))
|
||||
(set_local $f1f7_4 (i64.mul (get_local $f1_2) (get_local $f7_2)))
|
||||
(set_local $f1f8_2 (i64.mul (get_local $f1_2) (get_local $f8)))
|
||||
(set_local $f1f9_76 (i64.mul (get_local $f1_2) (get_local $f9_38)))
|
||||
(set_local $f2f2 (i64.mul (get_local $f2) (get_local $f2)))
|
||||
(set_local $f2f3_2 (i64.mul (get_local $f2_2) (get_local $f3)))
|
||||
(set_local $f2f4_2 (i64.mul (get_local $f2_2) (get_local $f4)))
|
||||
(set_local $f2f5_2 (i64.mul (get_local $f2_2) (get_local $f5)))
|
||||
(set_local $f2f6_2 (i64.mul (get_local $f2_2) (get_local $f6)))
|
||||
(set_local $f2f7_2 (i64.mul (get_local $f2_2) (get_local $f7)))
|
||||
(set_local $f2f8_38 (i64.mul (get_local $f2_2) (get_local $f8_19)))
|
||||
(set_local $f2f9_38 (i64.mul (get_local $f2) (get_local $f9_38)))
|
||||
(set_local $f3f3_2 (i64.mul (get_local $f3_2) (get_local $f3)))
|
||||
(set_local $f3f4_2 (i64.mul (get_local $f3_2) (get_local $f4)))
|
||||
(set_local $f3f5_4 (i64.mul (get_local $f3_2) (get_local $f5_2)))
|
||||
(set_local $f3f6_2 (i64.mul (get_local $f3_2) (get_local $f6)))
|
||||
(set_local $f3f7_76 (i64.mul (get_local $f3_2) (get_local $f7_38)))
|
||||
(set_local $f3f8_38 (i64.mul (get_local $f3_2) (get_local $f8_19)))
|
||||
(set_local $f3f9_76 (i64.mul (get_local $f3_2) (get_local $f9_38)))
|
||||
(set_local $f4f4 (i64.mul (get_local $f4) (get_local $f4)))
|
||||
(set_local $f4f5_2 (i64.mul (get_local $f4_2) (get_local $f5)))
|
||||
(set_local $f4f6_38 (i64.mul (get_local $f4_2) (get_local $f6_19)))
|
||||
(set_local $f4f7_38 (i64.mul (get_local $f4) (get_local $f7_38)))
|
||||
(set_local $f4f8_38 (i64.mul (get_local $f4_2) (get_local $f8_19)))
|
||||
(set_local $f4f9_38 (i64.mul (get_local $f4) (get_local $f9_38)))
|
||||
(set_local $f5f5_38 (i64.mul (get_local $f5) (get_local $f5_38)))
|
||||
(set_local $f5f6_38 (i64.mul (get_local $f5_2) (get_local $f6_19)))
|
||||
(set_local $f5f7_76 (i64.mul (get_local $f5_2) (get_local $f7_38)))
|
||||
(set_local $f5f8_38 (i64.mul (get_local $f5_2) (get_local $f8_19)))
|
||||
(set_local $f5f9_76 (i64.mul (get_local $f5_2) (get_local $f9_38)))
|
||||
(set_local $f6f6_19 (i64.mul (get_local $f6) (get_local $f6_19)))
|
||||
(set_local $f6f7_38 (i64.mul (get_local $f6) (get_local $f7_38)))
|
||||
(set_local $f6f8_38 (i64.mul (get_local $f6_2) (get_local $f8_19)))
|
||||
(set_local $f6f9_38 (i64.mul (get_local $f6) (get_local $f9_38)))
|
||||
(set_local $f7f7_38 (i64.mul (get_local $f7) (get_local $f7_38)))
|
||||
(set_local $f7f8_38 (i64.mul (get_local $f7_2) (get_local $f8_19)))
|
||||
(set_local $f7f9_76 (i64.mul (get_local $f7_2) (get_local $f9_38)))
|
||||
(set_local $f8f8_19 (i64.mul (get_local $f8) (get_local $f8_19)))
|
||||
(set_local $f8f9_38 (i64.mul (get_local $f8) (get_local $f9_38)))
|
||||
(set_local $f9f9_38 (i64.mul (get_local $f9) (get_local $f9_38)))
|
||||
|
||||
(set_local $h0 (i64.add (get_local $f0f0) (i64.add (get_local $f1f9_76) (i64.add (get_local $f2f8_38) (i64.add (get_local $f3f7_76) (i64.add (get_local $f4f6_38) (get_local $f5f5_38)))))))
|
||||
(set_local $h1 (i64.add (get_local $f0f1_2) (i64.add (get_local $f2f9_38) (i64.add (get_local $f3f8_38) (i64.add (get_local $f4f7_38) (get_local $f5f6_38))))))
|
||||
(set_local $h2 (i64.add (get_local $f0f2_2) (i64.add (get_local $f1f1_2) (i64.add (get_local $f3f9_76) (i64.add (get_local $f4f8_38) (i64.add (get_local $f5f7_76) (get_local $f6f6_19)))))))
|
||||
(set_local $h3 (i64.add (get_local $f0f3_2) (i64.add (get_local $f1f2_2) (i64.add (get_local $f4f9_38) (i64.add (get_local $f5f8_38) (get_local $f6f7_38))))))
|
||||
(set_local $h4 (i64.add (get_local $f0f4_2) (i64.add (get_local $f1f3_4) (i64.add (get_local $f2f2) (i64.add (get_local $f5f9_76) (i64.add (get_local $f6f8_38) (get_local $f7f7_38)))))))
|
||||
(set_local $h5 (i64.add (get_local $f0f5_2) (i64.add (get_local $f1f4_2) (i64.add (get_local $f2f3_2) (i64.add (get_local $f6f9_38) (get_local $f7f8_38))))))
|
||||
(set_local $h6 (i64.add (get_local $f0f6_2) (i64.add (get_local $f1f5_4) (i64.add (get_local $f2f4_2) (i64.add (get_local $f3f3_2) (i64.add (get_local $f7f9_76) (get_local $f8f8_19)))))))
|
||||
(set_local $h7 (i64.add (get_local $f0f7_2) (i64.add (get_local $f1f6_2) (i64.add (get_local $f2f5_2) (i64.add (get_local $f3f4_2) (get_local $f8f9_38))))))
|
||||
(set_local $h8 (i64.add (get_local $f0f8_2) (i64.add (get_local $f1f7_4) (i64.add (get_local $f2f6_2) (i64.add (get_local $f3f5_4) (i64.add (get_local $f4f4) (get_local $f9f9_38)))))))
|
||||
(set_local $h9 (i64.add (get_local $f0f9_2) (i64.add (get_local $f1f8_2) (i64.add (get_local $f2f7_2) (i64.add (get_local $f3f6_2) (get_local $f4f5_2 ))))))
|
||||
|
||||
(br_if $end (i32.eq (get_local $count) (get_local $repeat)))
|
||||
(set_local $count (i32.add (get_local $count) (i32.const 1)))
|
||||
(br $again)))
|
||||
|
||||
(if (i32.eq (get_local $double) (i32.const 1))
|
||||
(then
|
||||
(set_local $h0 (i64.add (get_local $h0) (get_local $h0)))
|
||||
(set_local $h1 (i64.add (get_local $h1) (get_local $h1)))
|
||||
(set_local $h2 (i64.add (get_local $h2) (get_local $h2)))
|
||||
(set_local $h3 (i64.add (get_local $h3) (get_local $h3)))
|
||||
(set_local $h4 (i64.add (get_local $h4) (get_local $h4)))
|
||||
(set_local $h5 (i64.add (get_local $h5) (get_local $h5)))
|
||||
(set_local $h6 (i64.add (get_local $h6) (get_local $h6)))
|
||||
(set_local $h7 (i64.add (get_local $h7) (get_local $h7)))
|
||||
(set_local $h8 (i64.add (get_local $h8) (get_local $h8)))
|
||||
(set_local $h9 (i64.add (get_local $h9) (get_local $h9)))))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (i64.add (get_local $h0) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h1 (i64.add (get_local $h1) (get_local $carry0)))
|
||||
(set_local $h0 (i64.sub (get_local $h0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
(set_local $carry4 (i64.shr_s (i64.add (get_local $h4) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h5 (i64.add (get_local $h5) (get_local $carry4)))
|
||||
(set_local $h4 (i64.sub (get_local $h4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (i64.add (get_local $h1) (i64.shl (i64.const 1) (i64.const 24))) (i64.const 25)))
|
||||
(set_local $h2 (i64.add (get_local $h2) (get_local $carry1)))
|
||||
(set_local $h1 (i64.sub (get_local $h1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 25)))))
|
||||
(set_local $carry5 (i64.shr_s (i64.add (get_local $h5) (i64.shl (i64.const 1) (i64.const 24))) (i64.const 25)))
|
||||
(set_local $h6 (i64.add (get_local $h6) (get_local $carry5)))
|
||||
(set_local $h5 (i64.sub (get_local $h5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 25)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (i64.add (get_local $h2) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h3 (i64.add (get_local $h3) (get_local $carry2)))
|
||||
(set_local $h2 (i64.sub (get_local $h2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
(set_local $carry6 (i64.shr_s (i64.add (get_local $h6) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h7 (i64.add (get_local $h7) (get_local $carry6)))
|
||||
(set_local $h6 (i64.sub (get_local $h6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (i64.add (get_local $h3) (i64.shl (i64.const 1) (i64.const 24))) (i64.const 25)))
|
||||
(set_local $h4 (i64.add (get_local $h4) (get_local $carry3)))
|
||||
(set_local $h3 (i64.sub (get_local $h3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 25)))))
|
||||
(set_local $carry7 (i64.shr_s (i64.add (get_local $h7) (i64.shl (i64.const 1) (i64.const 24))) (i64.const 25)))
|
||||
(set_local $h8 (i64.add (get_local $h8) (get_local $carry7)))
|
||||
(set_local $h7 (i64.sub (get_local $h7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 25)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (i64.add (get_local $h4) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h5 (i64.add (get_local $h5) (get_local $carry4)))
|
||||
(set_local $h4 (i64.sub (get_local $h4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
(set_local $carry8 (i64.shr_s (i64.add (get_local $h8) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h9 (i64.add (get_local $h9) (get_local $carry8)))
|
||||
(set_local $h8 (i64.sub (get_local $h8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (i64.add (get_local $h9) (i64.shl (i64.const 1) (i64.const 24))) (i64.const 25)))
|
||||
(set_local $h0 (i64.add (get_local $h0) (i64.mul (get_local $carry9) (i64.const 19))))
|
||||
(set_local $h9 (i64.sub (get_local $h9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 25)))))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (i64.add (get_local $h0) (i64.shl (i64.const 1) (i64.const 25))) (i64.const 26)))
|
||||
(set_local $h1 (i64.add (get_local $h1) (get_local $carry0)))
|
||||
(set_local $h0 (i64.sub (get_local $h0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 26)))))
|
||||
|
||||
(i64.store32 offset=0 (get_local $h) (get_local $h0))
|
||||
(i64.store32 offset=4 (get_local $h) (get_local $h1))
|
||||
(i64.store32 offset=8 (get_local $h) (get_local $h2))
|
||||
(i64.store32 offset=12 (get_local $h) (get_local $h3))
|
||||
(i64.store32 offset=16 (get_local $h) (get_local $h4))
|
||||
(i64.store32 offset=20 (get_local $h) (get_local $h5))
|
||||
(i64.store32 offset=24 (get_local $h) (get_local $h6))
|
||||
(i64.store32 offset=28 (get_local $h) (get_local $h7))
|
||||
(i64.store32 offset=32 (get_local $h) (get_local $h8))
|
||||
(i64.store32 offset=36 (get_local $h) (get_local $h9))))
|
2407
fe25519_25/mult.wat
2407
fe25519_25/mult.wat
File diff suppressed because it is too large
Load Diff
277
fe25519_25/sc25519_mul.wat
Normal file
277
fe25519_25/sc25519_mul.wat
Normal file
@ -0,0 +1,277 @@
|
||||
(module
|
||||
(memory $0 1)
|
||||
(export "memory" (memory $0))
|
||||
|
||||
(func $sc25519_mul (export "sc25519_mul") (param $s i32) (param $a i32) (param $b i32)
|
||||
(local $tmp i64)
|
||||
|
||||
(local $a0 i64)
|
||||
(local $a1 i64)
|
||||
(local $a2 i64)
|
||||
(local $a3 i64)
|
||||
(local $a4 i64)
|
||||
(local $a5 i64)
|
||||
(local $a6 i64)
|
||||
(local $a7 i64)
|
||||
(local $a8 i64)
|
||||
(local $a9 i64)
|
||||
(local $a10 i64)
|
||||
(local $a11 i64)
|
||||
|
||||
(local $b0 i64)
|
||||
(local $b1 i64)
|
||||
(local $b2 i64)
|
||||
(local $b3 i64)
|
||||
(local $b4 i64)
|
||||
(local $b5 i64)
|
||||
(local $b6 i64)
|
||||
(local $b7 i64)
|
||||
(local $b8 i64)
|
||||
(local $b9 i64)
|
||||
(local $b10 i64)
|
||||
(local $b11 i64)
|
||||
|
||||
(local $s0 i64)
|
||||
(local $s1 i64)
|
||||
(local $s2 i64)
|
||||
(local $s3 i64)
|
||||
(local $s4 i64)
|
||||
(local $s5 i64)
|
||||
(local $s6 i64)
|
||||
(local $s7 i64)
|
||||
(local $s8 i64)
|
||||
(local $s9 i64)
|
||||
(local $s10 i64)
|
||||
(local $s11 i64)
|
||||
(local $s12 i64)
|
||||
(local $s13 i64)
|
||||
(local $s14 i64)
|
||||
(local $s15 i64)
|
||||
(local $s16 i64)
|
||||
(local $s17 i64)
|
||||
(local $s18 i64)
|
||||
(local $s19 i64)
|
||||
(local $s20 i64)
|
||||
(local $s21 i64)
|
||||
(local $s22 i64)
|
||||
(local $s23 i64)
|
||||
|
||||
(local $carry0 i64)
|
||||
(local $carry1 i64)
|
||||
(local $carry2 i64)
|
||||
(local $carry3 i64)
|
||||
(local $carry4 i64)
|
||||
(local $carry5 i64)
|
||||
(local $carry6 i64)
|
||||
(local $carry7 i64)
|
||||
(local $carry8 i64)
|
||||
(local $carry9 i64)
|
||||
(local $carry10 i64)
|
||||
(local $carry11 i64)
|
||||
(local $carry12 i64)
|
||||
(local $carry13 i64)
|
||||
(local $carry14 i64)
|
||||
(local $carry15 i64)
|
||||
(local $carry16 i64)
|
||||
(local $carry17 i64)
|
||||
(local $carry18 i64)
|
||||
(local $carry19 i64)
|
||||
(local $carry20 i64)
|
||||
(local $carry21 i64)
|
||||
(local $carry22 i64)
|
||||
|
||||
(set_local $a0 (i64.load32_u offset=0 (get_local $a)))
|
||||
(set_local $a1 (i64.load32_u offset=4 (get_local $a)))
|
||||
(set_local $a2 (i64.load32_u offset=8 (get_local $a)))
|
||||
(set_local $a3 (i64.load32_u offset=12 (get_local $a)))
|
||||
(set_local $a4 (i64.load32_u offset=16 (get_local $a)))
|
||||
(set_local $a5 (i64.load32_u offset=20 (get_local $a)))
|
||||
(set_local $a6 (i64.load32_u offset=24 (get_local $a)))
|
||||
(set_local $a7 (i64.load32_u offset=28 (get_local $a)))
|
||||
(set_local $a8 (i64.load32_u offset=32 (get_local $a)))
|
||||
(set_local $a9 (i64.load32_u offset=36 (get_local $a)))
|
||||
(set_local $a10 (i64.load32_u offset=40 (get_local $a)))
|
||||
(set_local $a11 (i64.load32_u offset=44 (get_local $a)))
|
||||
|
||||
(set_local $b0 (i64.load32_u offset=0 (get_local $b)))
|
||||
(set_local $b1 (i64.load32_u offset=4 (get_local $b)))
|
||||
(set_local $b2 (i64.load32_u offset=8 (get_local $b)))
|
||||
(set_local $b3 (i64.load32_u offset=12 (get_local $b)))
|
||||
(set_local $b4 (i64.load32_u offset=16 (get_local $b)))
|
||||
(set_local $b5 (i64.load32_u offset=20 (get_local $b)))
|
||||
(set_local $b6 (i64.load32_u offset=24 (get_local $b)))
|
||||
(set_local $b7 (i64.load32_u offset=28 (get_local $b)))
|
||||
(set_local $b8 (i64.load32_u offset=32 (get_local $b)))
|
||||
(set_local $b9 (i64.load32_u offset=36 (get_local $b)))
|
||||
(set_local $b10 (i64.load32_u offset=40 (get_local $b)))
|
||||
(set_local $b11 (i64.load32_u offset=44 (get_local $b)))
|
||||
|
||||
(set_local $a0 (i64.extend_s/i32 (get_local $a0)))
|
||||
(set_local $a1 (i64.extend_s/i32 (get_local $a1)))
|
||||
(set_local $a2 (i64.extend_s/i32 (get_local $a2)))
|
||||
(set_local $a3 (i64.extend_s/i32 (get_local $a3)))
|
||||
(set_local $a4 (i64.extend_s/i32 (get_local $a4)))
|
||||
(set_local $a5 (i64.extend_s/i32 (get_local $a5)))
|
||||
(set_local $a6 (i64.extend_s/i32 (get_local $a6)))
|
||||
(set_local $a7 (i64.extend_s/i32 (get_local $a7)))
|
||||
(set_local $a8 (i64.extend_s/i32 (get_local $a8)))
|
||||
(set_local $a9 (i64.extend_s/i32 (get_local $a9)))
|
||||
(set_local $a10 (i64.extend_s/i32 (get_local $a10)))
|
||||
(set_local $a11 (i64.extend_s/i32 (get_local $a11)))
|
||||
|
||||
(set_local $b0 (i64.extend_s/i32 (get_local $b0)))
|
||||
(set_local $b1 (i64.extend_s/i32 (get_local $b1)))
|
||||
(set_local $b2 (i64.extend_s/i32 (get_local $b2)))
|
||||
(set_local $b3 (i64.extend_s/i32 (get_local $b3)))
|
||||
(set_local $b4 (i64.extend_s/i32 (get_local $b4)))
|
||||
(set_local $b5 (i64.extend_s/i32 (get_local $b5)))
|
||||
(set_local $b6 (i64.extend_s/i32 (get_local $b6)))
|
||||
(set_local $b7 (i64.extend_s/i32 (get_local $b7)))
|
||||
(set_local $b8 (i64.extend_s/i32 (get_local $b8)))
|
||||
(set_local $b9 (i64.extend_s/i32 (get_local $b9)))
|
||||
(set_local $b10 (i64.extend_s/i32 (get_local $b10)))
|
||||
(set_local $b11 (i64.extend_s/i32 (get_local $b11)))
|
||||
|
||||
(set_local $s0 (i64.mul (get_local $a0) (get_local $b0)))
|
||||
(set_local $s1 (i64.add (i64.mul (get_local $a0) (get_local $b1 )) (i64.mul (get_local $a1) (get_local $b0))))
|
||||
(set_local $s2 (i64.add (i64.mul (get_local $a0) (get_local $b2 )) (i64.add (i64.mul (get_local $a1) (get_local $b1 )) (i64.mul (get_local $a2) (get_local $b0)))))
|
||||
(set_local $s3 (i64.add (i64.mul (get_local $a0) (get_local $b3 )) (i64.add (i64.mul (get_local $a1) (get_local $b2 )) (i64.add (i64.mul (get_local $a2) (get_local $b1)) (i64.mul (get_local $a3) (get_local $b0))))))
|
||||
(set_local $s4 (i64.add (i64.mul (get_local $a0) (get_local $b4 )) (i64.add (i64.mul (get_local $a1) (get_local $b3 )) (i64.add (i64.mul (get_local $a2) (get_local $b2)) (i64.add (i64.mul (get_local $a3) (get_local $b1)) (i64.mul (get_local $a4) (get_local $b0)))))))
|
||||
(set_local $s5 (i64.add (i64.mul (get_local $a0) (get_local $b5 )) (i64.add (i64.mul (get_local $a1) (get_local $b4 )) (i64.add (i64.mul (get_local $a2) (get_local $b3)) (i64.add (i64.mul (get_local $a3) (get_local $b2)) (i64.add (i64.mul (get_local $a4) (get_local $b1)) (i64.mul (get_local $a5) (get_local $b0))))))))
|
||||
(set_local $s6 (i64.add (i64.mul (get_local $a0) (get_local $b6 )) (i64.add (i64.mul (get_local $a1) (get_local $b5 )) (i64.add (i64.mul (get_local $a2) (get_local $b4)) (i64.add (i64.mul (get_local $a3) (get_local $b3)) (i64.add (i64.mul (get_local $a4) (get_local $b2)) (i64.add (i64.mul (get_local $a5) (get_local $b1)) (i64.mul (get_local $a6) (get_local $b0)))))))))
|
||||
(set_local $s7 (i64.add (i64.mul (get_local $a0) (get_local $b7 )) (i64.add (i64.mul (get_local $a1) (get_local $b6 )) (i64.add (i64.mul (get_local $a2) (get_local $b5)) (i64.add (i64.mul (get_local $a3) (get_local $b4)) (i64.add (i64.mul (get_local $a4) (get_local $b3)) (i64.add (i64.mul (get_local $a5) (get_local $b2)) (i64.add (i64.mul (get_local $a6) (get_local $b1)) (i64.mul (get_local $a7) (get_local $b0))))))))))
|
||||
(set_local $s8 (i64.add (i64.mul (get_local $a0) (get_local $b8 )) (i64.add (i64.mul (get_local $a1) (get_local $b7 )) (i64.add (i64.mul (get_local $a2) (get_local $b6)) (i64.add (i64.mul (get_local $a3) (get_local $b5)) (i64.add (i64.mul (get_local $a4) (get_local $b4)) (i64.add (i64.mul (get_local $a5) (get_local $b3)) (i64.add (i64.mul (get_local $a6) (get_local $b2)) (i64.add (i64.mul (get_local $a7) (get_local $b1)) (i64.mul (get_local $a8) (get_local $b0)))))))))))
|
||||
(set_local $s9 (i64.add (i64.mul (get_local $a0) (get_local $b9 )) (i64.add (i64.mul (get_local $a1) (get_local $b8 )) (i64.add (i64.mul (get_local $a2) (get_local $b7)) (i64.add (i64.mul (get_local $a3) (get_local $b6)) (i64.add (i64.mul (get_local $a4) (get_local $b5)) (i64.add (i64.mul (get_local $a5) (get_local $b4)) (i64.add (i64.mul (get_local $a6) (get_local $b3)) (i64.add (i64.mul (get_local $a7) (get_local $b2)) (i64.add (i64.mul (get_local $a8) (get_local $b1)) (i64.mul (get_local $a9) (get_local $b0))))))))))))
|
||||
(set_local $s10 (i64.add (i64.mul (get_local $a0) (get_local $b10)) (i64.add (i64.mul (get_local $a1) (get_local $b9 )) (i64.add (i64.mul (get_local $a2) (get_local $b8)) (i64.add (i64.mul (get_local $a3) (get_local $b7)) (i64.add (i64.mul (get_local $a4) (get_local $b6)) (i64.add (i64.mul (get_local $a5) (get_local $b5)) (i64.add (i64.mul (get_local $a6) (get_local $b4)) (i64.add (i64.mul (get_local $a7) (get_local $b3)) (i64.add (i64.mul (get_local $a8) (get_local $b2)) (i64.add (i64.mul (get_local $a9) (get_local $b1)) (i64.mul (get_local $a10) (get_local $b0)))))))))))))
|
||||
(set_local $s11 (i64.add (i64.mul (get_local $a0) (get_local $b11)) (i64.add (i64.mul (get_local $a1) (get_local $b10)) (i64.add (i64.mul (get_local $a2) (get_local $b9)) (i64.add (i64.mul (get_local $a3) (get_local $b8)) (i64.add (i64.mul (get_local $a4) (get_local $b7)) (i64.add (i64.mul (get_local $a5) (get_local $b6)) (i64.add (i64.mul (get_local $a6) (get_local $b5)) (i64.add (i64.mul (get_local $a7) (get_local $b4)) (i64.add (i64.mul (get_local $a8) (get_local $b3)) (i64.add (i64.mul (get_local $a9) (get_local $b2)) (i64.add (i64.mul (get_local $a10) (get_local $b1)) (i64.mul (get_local $a11) (get_local $b0))))))))))))))
|
||||
(set_local $s12 (i64.add (i64.mul (get_local $a1) (get_local $b11)) (i64.add (i64.mul (get_local $a2) (get_local $b10)) (i64.add (i64.mul (get_local $a3) (get_local $b9)) (i64.add (i64.mul (get_local $a4) (get_local $b8)) (i64.add (i64.mul (get_local $a5) (get_local $b7)) (i64.add (i64.mul (get_local $a6) (get_local $b6)) (i64.add (i64.mul (get_local $a7) (get_local $b5)) (i64.add (i64.mul (get_local $a8) (get_local $b4)) (i64.add (i64.mul (get_local $a9) (get_local $b3)) (i64.add (i64.mul (get_local $a10) (get_local $b2)) (i64.mul (get_local $a11) (get_local $b1)))))))))))))
|
||||
(set_local $s13 (i64.add (i64.mul (get_local $a2) (get_local $b11)) (i64.add (i64.mul (get_local $a3) (get_local $b10)) (i64.add (i64.mul (get_local $a4) (get_local $b9)) (i64.add (i64.mul (get_local $a5) (get_local $b8)) (i64.add (i64.mul (get_local $a6) (get_local $b7)) (i64.add (i64.mul (get_local $a7) (get_local $b6)) (i64.add (i64.mul (get_local $a8) (get_local $b5)) (i64.add (i64.mul (get_local $a9) (get_local $b4)) (i64.add (i64.mul (get_local $a10) (get_local $b3)) (i64.mul (get_local $a11) (get_local $b2))))))))))))
|
||||
(set_local $s14 (i64.add (i64.mul (get_local $a3) (get_local $b11)) (i64.add (i64.mul (get_local $a4) (get_local $b10)) (i64.add (i64.mul (get_local $a5) (get_local $b9)) (i64.add (i64.mul (get_local $a6) (get_local $b8)) (i64.add (i64.mul (get_local $a7) (get_local $b7)) (i64.add (i64.mul (get_local $a8) (get_local $b6)) (i64.add (i64.mul (get_local $a9) (get_local $b5)) (i64.add (i64.mul (get_local $a10) (get_local $b4)) (i64.mul (get_local $a11) (get_local $b3)))))))))))
|
||||
(set_local $s15 (i64.add (i64.mul (get_local $a4) (get_local $b11)) (i64.add (i64.mul (get_local $a5) (get_local $b10)) (i64.add (i64.mul (get_local $a6) (get_local $b9)) (i64.add (i64.mul (get_local $a7) (get_local $b8)) (i64.add (i64.mul (get_local $a8) (get_local $b7)) (i64.add (i64.mul (get_local $a9) (get_local $b6)) (i64.add (i64.mul (get_local $a10) (get_local $b5)) (i64.mul (get_local $a11) (get_local $b4))))))))))
|
||||
(set_local $s16 (i64.add (i64.mul (get_local $a5) (get_local $b11)) (i64.add (i64.mul (get_local $a6) (get_local $b10)) (i64.add (i64.mul (get_local $a7) (get_local $b9)) (i64.add (i64.mul (get_local $a8) (get_local $b8)) (i64.add (i64.mul (get_local $a9) (get_local $b7)) (i64.add (i64.mul (get_local $a10) (get_local $b6)) (i64.mul (get_local $a11) (get_local $b5)))))))))
|
||||
(set_local $s17 (i64.add (i64.mul (get_local $a6) (get_local $b11)) (i64.add (i64.mul (get_local $a7) (get_local $b10)) (i64.add (i64.mul (get_local $a8) (get_local $b9)) (i64.add (i64.mul (get_local $a9) (get_local $b8)) (i64.add (i64.mul (get_local $a10) (get_local $b7)) (i64.mul (get_local $a11) (get_local $b6))))))))
|
||||
(set_local $s18 (i64.add (i64.mul (get_local $a7) (get_local $b11)) (i64.add (i64.mul (get_local $a8) (get_local $b10)) (i64.add (i64.mul (get_local $a9) (get_local $b9)) (i64.add (i64.mul (get_local $a10) (get_local $b8)) (i64.mul (get_local $a11) (get_local $b7)))))))
|
||||
(set_local $s19 (i64.add (i64.mul (get_local $a8) (get_local $b11)) (i64.add (i64.mul (get_local $a9) (get_local $b10)) (i64.add (i64.mul (get_local $a10) (get_local $b9)) (i64.mul (get_local $a11) (get_local $b8))))))
|
||||
(set_local $s20 (i64.add (i64.mul (get_local $a9) (get_local $b11)) (i64.add (i64.mul (get_local $a10) (get_local $b10)) (i64.mul (get_local $a11) (get_local $b9)))))
|
||||
(set_local $s21 (i64.add (i64.mul (get_local $a10) (get_local $b11)) (i64.mul (get_local $a11) (get_local $b10))))
|
||||
(set_local $s22 (i64.mul (get_local $a11) (get_local $b11)))
|
||||
(set_local $s23 (i64.const 0))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (i64.add (get_local $s0) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s1 (i64.add (get_local $s1) (get_local $carry0)))
|
||||
(set_local $s0 (i64.sub (get_local $s0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (i64.add (get_local $s2) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s3 (i64.add (get_local $s3) (get_local $carry2)))
|
||||
(set_local $s2 (i64.sub (get_local $s2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (i64.add (get_local $s4) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s5 (i64.add (get_local $s5) (get_local $carry4)))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (i64.add (get_local $s6) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (i64.add (get_local $s8) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (i64.add (get_local $s10) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry12 (i64.shr_s (i64.add (get_local $s12) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s13 (i64.add (get_local $s13) (get_local $carry12)))
|
||||
(set_local $s12 (i64.sub (get_local $s12) (i64.mul (get_local $carry12) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry14 (i64.shr_s (i64.add (get_local $s14) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s15 (i64.add (get_local $s15) (get_local $carry14)))
|
||||
(set_local $s14 (i64.sub (get_local $s14) (i64.mul (get_local $carry14) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry16 (i64.shr_s (i64.add (get_local $s16) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s17 (i64.add (get_local $s17) (get_local $carry16)))
|
||||
(set_local $s16 (i64.sub (get_local $s16) (i64.mul (get_local $carry16) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry18 (i64.shr_s (i64.add (get_local $s18) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s19 (i64.add (get_local $s19) (get_local $carry18)))
|
||||
(set_local $s18 (i64.sub (get_local $s18) (i64.mul (get_local $carry18) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry20 (i64.shr_s (i64.add (get_local $s20) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s21 (i64.add (get_local $s21) (get_local $carry20)))
|
||||
(set_local $s20 (i64.sub (get_local $s20) (i64.mul (get_local $carry20) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry22 (i64.shr_s (i64.add (get_local $s22) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s23 (i64.add (get_local $s23) (get_local $carry22)))
|
||||
(set_local $s22 (i64.sub (get_local $s22) (i64.mul (get_local $carry22) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (i64.add (get_local $s1) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s2 (i64.add (get_local $s2) (get_local $carry1)))
|
||||
(set_local $s1 (i64.sub (get_local $s1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (i64.add (get_local $s3) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s4 (i64.add (get_local $s4) (get_local $carry3)))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry5 (i64.shr_s (i64.add (get_local $s5) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s6 (i64.add (get_local $s6) (get_local $carry5)))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (i64.add (get_local $s7) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (i64.add (get_local $s9) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry11 (i64.shr_s (i64.add (get_local $s11) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s12 (i64.add (get_local $s12) (get_local $carry11)))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $carry11) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry13 (i64.shr_s (i64.add (get_local $s13) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s14 (i64.add (get_local $s14) (get_local $carry13)))
|
||||
(set_local $s13 (i64.sub (get_local $s13) (i64.mul (get_local $carry13) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry15 (i64.shr_s (i64.add (get_local $s15) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s16 (i64.add (get_local $s16) (get_local $carry15)))
|
||||
(set_local $s15 (i64.sub (get_local $s15) (i64.mul (get_local $carry15) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry17 (i64.shr_s (i64.add (get_local $s17) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s18 (i64.add (get_local $s18) (get_local $carry17)))
|
||||
(set_local $s17 (i64.sub (get_local $s17) (i64.mul (get_local $carry17) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry19 (i64.shr_s (i64.add (get_local $s19) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s20 (i64.add (get_local $s20) (get_local $carry19)))
|
||||
(set_local $s19 (i64.sub (get_local $s19) (i64.mul (get_local $carry19) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry21 (i64.shr_s (i64.add (get_local $s21) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s22 (i64.add (get_local $s22) (get_local $carry21)))
|
||||
(set_local $s21 (i64.sub (get_local $s21) (i64.mul (get_local $carry21) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(get_local $s)
|
||||
(get_local $s0)
|
||||
(get_local $s1)
|
||||
(get_local $s2)
|
||||
(get_local $s3)
|
||||
(get_local $s4)
|
||||
(get_local $s5)
|
||||
(get_local $s6)
|
||||
(get_local $s7)
|
||||
(get_local $s8)
|
||||
(get_local $s9)
|
||||
(get_local $s10)
|
||||
(get_local $s11)
|
||||
(get_local $s12)
|
||||
(get_local $s13)
|
||||
(get_local $s14)
|
||||
(get_local $s15)
|
||||
(get_local $s16)
|
||||
(get_local $s17)
|
||||
(get_local $s18)
|
||||
(get_local $s19)
|
||||
(get_local $s20)
|
||||
(get_local $s21)
|
||||
(get_local $s22)
|
||||
(get_local $s23)
|
||||
(call $sc_reduce)))
|
316
fe25519_25/sc25519_muladd.wat
Normal file
316
fe25519_25/sc25519_muladd.wat
Normal file
@ -0,0 +1,316 @@
|
||||
(module
|
||||
(memory $0 1)
|
||||
(export "memory" (memory $0))
|
||||
|
||||
(func $sc25519_muladd (export "sc25519_muladd") (param $s i32) (param $a i32) (param $b i32) (param $c i32)
|
||||
(local $tmp i64)
|
||||
|
||||
(local $a0 i64)
|
||||
(local $a1 i64)
|
||||
(local $a2 i64)
|
||||
(local $a3 i64)
|
||||
(local $a4 i64)
|
||||
(local $a5 i64)
|
||||
(local $a6 i64)
|
||||
(local $a7 i64)
|
||||
(local $a8 i64)
|
||||
(local $a9 i64)
|
||||
(local $a10 i64)
|
||||
(local $a11 i64)
|
||||
|
||||
(local $b0 i64)
|
||||
(local $b1 i64)
|
||||
(local $b2 i64)
|
||||
(local $b3 i64)
|
||||
(local $b4 i64)
|
||||
(local $b5 i64)
|
||||
(local $b6 i64)
|
||||
(local $b7 i64)
|
||||
(local $b8 i64)
|
||||
(local $b9 i64)
|
||||
(local $b10 i64)
|
||||
(local $b11 i64)
|
||||
|
||||
(local $c0 i64)
|
||||
(local $c1 i64)
|
||||
(local $c2 i64)
|
||||
(local $c3 i64)
|
||||
(local $c4 i64)
|
||||
(local $c5 i64)
|
||||
(local $c6 i64)
|
||||
(local $c7 i64)
|
||||
(local $c8 i64)
|
||||
(local $c9 i64)
|
||||
(local $c10 i64)
|
||||
(local $c11 i64)
|
||||
|
||||
(local $s0 i64)
|
||||
(local $s1 i64)
|
||||
(local $s2 i64)
|
||||
(local $s3 i64)
|
||||
(local $s4 i64)
|
||||
(local $s5 i64)
|
||||
(local $s6 i64)
|
||||
(local $s7 i64)
|
||||
(local $s8 i64)
|
||||
(local $s9 i64)
|
||||
(local $s10 i64)
|
||||
(local $s11 i64)
|
||||
(local $s12 i64)
|
||||
(local $s13 i64)
|
||||
(local $s14 i64)
|
||||
(local $s15 i64)
|
||||
(local $s16 i64)
|
||||
(local $s17 i64)
|
||||
(local $s18 i64)
|
||||
(local $s19 i64)
|
||||
(local $s20 i64)
|
||||
(local $s21 i64)
|
||||
(local $s22 i64)
|
||||
(local $s23 i64)
|
||||
|
||||
(local $carry0 i64)
|
||||
(local $carry1 i64)
|
||||
(local $carry2 i64)
|
||||
(local $carry3 i64)
|
||||
(local $carry4 i64)
|
||||
(local $carry5 i64)
|
||||
(local $carry6 i64)
|
||||
(local $carry7 i64)
|
||||
(local $carry8 i64)
|
||||
(local $carry9 i64)
|
||||
(local $carry10 i64)
|
||||
(local $carry11 i64)
|
||||
(local $carry12 i64)
|
||||
(local $carry13 i64)
|
||||
(local $carry14 i64)
|
||||
(local $carry15 i64)
|
||||
(local $carry16 i64)
|
||||
(local $carry17 i64)
|
||||
(local $carry18 i64)
|
||||
(local $carry19 i64)
|
||||
(local $carry20 i64)
|
||||
(local $carry21 i64)
|
||||
(local $carry22 i64)
|
||||
|
||||
(set_local $a0 (i64.load32_u offset=0 (get_local $a)))
|
||||
(set_local $a1 (i64.load32_u offset=4 (get_local $a)))
|
||||
(set_local $a2 (i64.load32_u offset=8 (get_local $a)))
|
||||
(set_local $a3 (i64.load32_u offset=12 (get_local $a)))
|
||||
(set_local $a4 (i64.load32_u offset=16 (get_local $a)))
|
||||
(set_local $a5 (i64.load32_u offset=20 (get_local $a)))
|
||||
(set_local $a6 (i64.load32_u offset=24 (get_local $a)))
|
||||
(set_local $a7 (i64.load32_u offset=28 (get_local $a)))
|
||||
(set_local $a8 (i64.load32_u offset=32 (get_local $a)))
|
||||
(set_local $a9 (i64.load32_u offset=36 (get_local $a)))
|
||||
(set_local $a10 (i64.load32_u offset=40 (get_local $a)))
|
||||
(set_local $a11 (i64.load32_u offset=44 (get_local $a)))
|
||||
|
||||
(set_local $b0 (i64.load32_u offset=0 (get_local $b)))
|
||||
(set_local $b1 (i64.load32_u offset=4 (get_local $b)))
|
||||
(set_local $b2 (i64.load32_u offset=8 (get_local $b)))
|
||||
(set_local $b3 (i64.load32_u offset=12 (get_local $b)))
|
||||
(set_local $b4 (i64.load32_u offset=16 (get_local $b)))
|
||||
(set_local $b5 (i64.load32_u offset=20 (get_local $b)))
|
||||
(set_local $b6 (i64.load32_u offset=24 (get_local $b)))
|
||||
(set_local $b7 (i64.load32_u offset=28 (get_local $b)))
|
||||
(set_local $b8 (i64.load32_u offset=32 (get_local $b)))
|
||||
(set_local $b9 (i64.load32_u offset=36 (get_local $b)))
|
||||
(set_local $b10 (i64.load32_u offset=40 (get_local $b)))
|
||||
(set_local $b11 (i64.load32_u offset=44 (get_local $b)))
|
||||
|
||||
(set_local $c0 (i64.load32_u offset=0 (get_local $c)))
|
||||
(set_local $c1 (i64.load32_u offset=4 (get_local $c)))
|
||||
(set_local $c2 (i64.load32_u offset=8 (get_local $c)))
|
||||
(set_local $c3 (i64.load32_u offset=12 (get_local $c)))
|
||||
(set_local $c4 (i64.load32_u offset=16 (get_local $c)))
|
||||
(set_local $c5 (i64.load32_u offset=20 (get_local $c)))
|
||||
(set_local $c6 (i64.load32_u offset=24 (get_local $c)))
|
||||
(set_local $c7 (i64.load32_u offset=28 (get_local $c)))
|
||||
(set_local $c8 (i64.load32_u offset=32 (get_local $c)))
|
||||
(set_local $c9 (i64.load32_u offset=36 (get_local $c)))
|
||||
(set_local $c10 (i64.load32_u offset=40 (get_local $c)))
|
||||
(set_local $c11 (i64.load32_u offset=44 (get_local $c)))
|
||||
|
||||
(set_local $a0 (i64.extend32_s (get_local $a0)))
|
||||
(set_local $a1 (i64.extend32_s (get_local $a1)))
|
||||
(set_local $a2 (i64.extend32_s (get_local $a2)))
|
||||
(set_local $a3 (i64.extend32_s (get_local $a3)))
|
||||
(set_local $a4 (i64.extend32_s (get_local $a4)))
|
||||
(set_local $a5 (i64.extend32_s (get_local $a5)))
|
||||
(set_local $a6 (i64.extend32_s (get_local $a6)))
|
||||
(set_local $a7 (i64.extend32_s (get_local $a7)))
|
||||
(set_local $a8 (i64.extend32_s (get_local $a8)))
|
||||
(set_local $a9 (i64.extend32_s (get_local $a9)))
|
||||
(set_local $a10 (i64.extend32_s (get_local $a10)))
|
||||
(set_local $a11 (i64.extend32_s (get_local $a11)))
|
||||
|
||||
(set_local $b0 (i64.extend32_s (get_local $b0)))
|
||||
(set_local $b1 (i64.extend32_s (get_local $b1)))
|
||||
(set_local $b2 (i64.extend32_s (get_local $b2)))
|
||||
(set_local $b3 (i64.extend32_s (get_local $b3)))
|
||||
(set_local $b4 (i64.extend32_s (get_local $b4)))
|
||||
(set_local $b5 (i64.extend32_s (get_local $b5)))
|
||||
(set_local $b6 (i64.extend32_s (get_local $b6)))
|
||||
(set_local $b7 (i64.extend32_s (get_local $b7)))
|
||||
(set_local $b8 (i64.extend32_s (get_local $b8)))
|
||||
(set_local $b9 (i64.extend32_s (get_local $b9)))
|
||||
(set_local $b10 (i64.extend32_s (get_local $b10)))
|
||||
(set_local $b11 (i64.extend32_s (get_local $b11)))
|
||||
|
||||
(set_local $c0 (i64.extend32_s (get_local $c0)))
|
||||
(set_local $c1 (i64.extend32_s (get_local $c1)))
|
||||
(set_local $c2 (i64.extend32_s (get_local $c2)))
|
||||
(set_local $c3 (i64.extend32_s (get_local $c3)))
|
||||
(set_local $c4 (i64.extend32_s (get_local $c4)))
|
||||
(set_local $c5 (i64.extend32_s (get_local $c5)))
|
||||
(set_local $c6 (i64.extend32_s (get_local $c6)))
|
||||
(set_local $c7 (i64.extend32_s (get_local $c7)))
|
||||
(set_local $c8 (i64.extend32_s (get_local $c8)))
|
||||
(set_local $c9 (i64.extend32_s (get_local $c9)))
|
||||
(set_local $c10 (i64.extend32_s (get_local $c10)))
|
||||
(set_local $c11 (i64.extend32_s (get_local $c11)))
|
||||
|
||||
(set_local $s0 (i64.add (get_local $c0 ) (i64.mul (get_local $a0) (get_local $b0))))
|
||||
(set_local $s1 (i64.add (get_local $c1 ) (i64.add (i64.mul (get_local $a0) (get_local $b1 )) (i64.mul (get_local $a1) (get_local $b0)))))
|
||||
(set_local $s2 (i64.add (get_local $c2 ) (i64.add (i64.mul (get_local $a0) (get_local $b2 )) (i64.add (i64.mul (get_local $a1) (get_local $b1 )) (i64.mul (get_local $a2) (get_local $b0))))))
|
||||
(set_local $s3 (i64.add (get_local $c3 ) (i64.add (i64.mul (get_local $a0) (get_local $b3 )) (i64.add (i64.mul (get_local $a1) (get_local $b2 )) (i64.add (i64.mul (get_local $a2) (get_local $b1)) (i64.mul (get_local $a3) (get_local $b0)))))))
|
||||
(set_local $s4 (i64.add (get_local $c4 ) (i64.add (i64.mul (get_local $a0) (get_local $b4 )) (i64.add (i64.mul (get_local $a1) (get_local $b3 )) (i64.add (i64.mul (get_local $a2) (get_local $b2)) (i64.add (i64.mul (get_local $a3) (get_local $b1)) (i64.mul (get_local $a4) (get_local $b0))))))))
|
||||
(set_local $s5 (i64.add (get_local $c5 ) (i64.add (i64.mul (get_local $a0) (get_local $b5 )) (i64.add (i64.mul (get_local $a1) (get_local $b4 )) (i64.add (i64.mul (get_local $a2) (get_local $b3)) (i64.add (i64.mul (get_local $a3) (get_local $b2)) (i64.add (i64.mul (get_local $a4) (get_local $b1)) (i64.mul (get_local $a5) (get_local $b0)))))))))
|
||||
(set_local $s6 (i64.add (get_local $c6 ) (i64.add (i64.mul (get_local $a0) (get_local $b6 )) (i64.add (i64.mul (get_local $a1) (get_local $b5 )) (i64.add (i64.mul (get_local $a2) (get_local $b4)) (i64.add (i64.mul (get_local $a3) (get_local $b3)) (i64.add (i64.mul (get_local $a4) (get_local $b2)) (i64.add (i64.mul (get_local $a5) (get_local $b1)) (i64.mul (get_local $a6) (get_local $b0))))))))))
|
||||
(set_local $s7 (i64.add (get_local $c7 ) (i64.add (i64.mul (get_local $a0) (get_local $b7 )) (i64.add (i64.mul (get_local $a1) (get_local $b6 )) (i64.add (i64.mul (get_local $a2) (get_local $b5)) (i64.add (i64.mul (get_local $a3) (get_local $b4)) (i64.add (i64.mul (get_local $a4) (get_local $b3)) (i64.add (i64.mul (get_local $a5) (get_local $b2)) (i64.add (i64.mul (get_local $a6) (get_local $b1)) (i64.mul (get_local $a7) (get_local $b0)))))))))))
|
||||
(set_local $s8 (i64.add (get_local $c8 ) (i64.add (i64.mul (get_local $a0) (get_local $b8 )) (i64.add (i64.mul (get_local $a1) (get_local $b7 )) (i64.add (i64.mul (get_local $a2) (get_local $b6)) (i64.add (i64.mul (get_local $a3) (get_local $b5)) (i64.add (i64.mul (get_local $a4) (get_local $b4)) (i64.add (i64.mul (get_local $a5) (get_local $b3)) (i64.add (i64.mul (get_local $a6) (get_local $b2)) (i64.add (i64.mul (get_local $a7) (get_local $b1)) (i64.mul (get_local $a8) (get_local $b0))))))))))))
|
||||
(set_local $s9 (i64.add (get_local $c9 ) (i64.add (i64.mul (get_local $a0) (get_local $b9 )) (i64.add (i64.mul (get_local $a1) (get_local $b8 )) (i64.add (i64.mul (get_local $a2) (get_local $b7)) (i64.add (i64.mul (get_local $a3) (get_local $b6)) (i64.add (i64.mul (get_local $a4) (get_local $b5)) (i64.add (i64.mul (get_local $a5) (get_local $b4)) (i64.add (i64.mul (get_local $a6) (get_local $b3)) (i64.add (i64.mul (get_local $a7) (get_local $b2)) (i64.add (i64.mul (get_local $a8) (get_local $b1)) (i64.mul (get_local $a9) (get_local $b0)))))))))))))
|
||||
(set_local $s10 (i64.add (get_local $c10) (i64.add (i64.mul (get_local $a0) (get_local $b10)) (i64.add (i64.mul (get_local $a1) (get_local $b9 )) (i64.add (i64.mul (get_local $a2) (get_local $b8)) (i64.add (i64.mul (get_local $a3) (get_local $b7)) (i64.add (i64.mul (get_local $a4) (get_local $b6)) (i64.add (i64.mul (get_local $a5) (get_local $b5)) (i64.add (i64.mul (get_local $a6) (get_local $b4)) (i64.add (i64.mul (get_local $a7) (get_local $b3)) (i64.add (i64.mul (get_local $a8) (get_local $b2)) (i64.add (i64.mul (get_local $a9) (get_local $b1)) (i64.mul (get_local $a10) (get_local $b0))))))))))))))
|
||||
(set_local $s11 (i64.add (get_local $c11) (i64.add (i64.mul (get_local $a0) (get_local $b11)) (i64.add (i64.mul (get_local $a1) (get_local $b10)) (i64.add (i64.mul (get_local $a2) (get_local $b9)) (i64.add (i64.mul (get_local $a3) (get_local $b8)) (i64.add (i64.mul (get_local $a4) (get_local $b7)) (i64.add (i64.mul (get_local $a5) (get_local $b6)) (i64.add (i64.mul (get_local $a6) (get_local $b5)) (i64.add (i64.mul (get_local $a7) (get_local $b4)) (i64.add (i64.mul (get_local $a8) (get_local $b3)) (i64.add (i64.mul (get_local $a9) (get_local $b2)) (i64.add (i64.mul (get_local $a10) (get_local $b1)) (i64.mul (get_local $a11) (get_local $b0)))))))))))))))
|
||||
(set_local $s12 (i64.add (i64.mul (get_local $a1) (get_local $b11)) (i64.add (i64.mul (get_local $a2) (get_local $b10)) (i64.add (i64.mul (get_local $a3) (get_local $b9)) (i64.add (i64.mul (get_local $a4) (get_local $b8)) (i64.add (i64.mul (get_local $a5) (get_local $b7)) (i64.add (i64.mul (get_local $a6) (get_local $b6)) (i64.add (i64.mul (get_local $a7) (get_local $b5)) (i64.add (i64.mul (get_local $a8) (get_local $b4)) (i64.add (i64.mul (get_local $a9) (get_local $b3)) (i64.add (i64.mul (get_local $a10) (get_local $b2)) (i64.mul (get_local $a11) (get_local $b1)))))))))))))
|
||||
(set_local $s13 (i64.add (i64.mul (get_local $a2) (get_local $b11)) (i64.add (i64.mul (get_local $a3) (get_local $b10)) (i64.add (i64.mul (get_local $a4) (get_local $b9)) (i64.add (i64.mul (get_local $a5) (get_local $b8)) (i64.add (i64.mul (get_local $a6) (get_local $b7)) (i64.add (i64.mul (get_local $a7) (get_local $b6)) (i64.add (i64.mul (get_local $a8) (get_local $b5)) (i64.add (i64.mul (get_local $a9) (get_local $b4)) (i64.add (i64.mul (get_local $a10) (get_local $b3)) (i64.mul (get_local $a11) (get_local $b2))))))))))))
|
||||
(set_local $s14 (i64.add (i64.mul (get_local $a3) (get_local $b11)) (i64.add (i64.mul (get_local $a4) (get_local $b10)) (i64.add (i64.mul (get_local $a5) (get_local $b9)) (i64.add (i64.mul (get_local $a6) (get_local $b8)) (i64.add (i64.mul (get_local $a7) (get_local $b7)) (i64.add (i64.mul (get_local $a8) (get_local $b6)) (i64.add (i64.mul (get_local $a9) (get_local $b5)) (i64.add (i64.mul (get_local $a10) (get_local $b4)) (i64.mul (get_local $a11) (get_local $b3)))))))))))
|
||||
(set_local $s15 (i64.add (i64.mul (get_local $a4) (get_local $b11)) (i64.add (i64.mul (get_local $a5) (get_local $b10)) (i64.add (i64.mul (get_local $a6) (get_local $b9)) (i64.add (i64.mul (get_local $a7) (get_local $b8)) (i64.add (i64.mul (get_local $a8) (get_local $b7)) (i64.add (i64.mul (get_local $a9) (get_local $b6)) (i64.add (i64.mul (get_local $a10) (get_local $b5)) (i64.mul (get_local $a11) (get_local $b4))))))))))
|
||||
(set_local $s16 (i64.add (i64.mul (get_local $a5) (get_local $b11)) (i64.add (i64.mul (get_local $a6) (get_local $b10)) (i64.add (i64.mul (get_local $a7) (get_local $b9)) (i64.add (i64.mul (get_local $a8) (get_local $b8)) (i64.add (i64.mul (get_local $a9) (get_local $b7)) (i64.add (i64.mul (get_local $a10) (get_local $b6)) (i64.mul (get_local $a11) (get_local $b5)))))))))
|
||||
(set_local $s17 (i64.add (i64.mul (get_local $a6) (get_local $b11)) (i64.add (i64.mul (get_local $a7) (get_local $b10)) (i64.add (i64.mul (get_local $a8) (get_local $b9)) (i64.add (i64.mul (get_local $a9) (get_local $b8)) (i64.add (i64.mul (get_local $a10) (get_local $b7)) (i64.mul (get_local $a11) (get_local $b6))))))))
|
||||
(set_local $s18 (i64.add (i64.mul (get_local $a7) (get_local $b11)) (i64.add (i64.mul (get_local $a8) (get_local $b10)) (i64.add (i64.mul (get_local $a9) (get_local $b9)) (i64.add (i64.mul (get_local $a10) (get_local $b8)) (i64.mul (get_local $a11) (get_local $b7)))))))
|
||||
(set_local $s19 (i64.add (i64.mul (get_local $a8) (get_local $b11)) (i64.add (i64.mul (get_local $a9) (get_local $b10)) (i64.add (i64.mul (get_local $a10) (get_local $b9)) (i64.mul (get_local $a11) (get_local $b8))))))
|
||||
(set_local $s20 (i64.add (i64.mul (get_local $a9) (get_local $b11)) (i64.add (i64.mul (get_local $a10) (get_local $b10)) (i64.mul (get_local $a11) (get_local $b9)))))
|
||||
(set_local $s21 (i64.add (i64.mul (get_local $a10) (get_local $b11)) (i64.mul (get_local $a11) (get_local $b10))))
|
||||
(set_local $s22 (i64.mul (get_local $a11) (get_local $b11)))
|
||||
(set_local $s23 (i64.const 0))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (i64.add (get_local $s0) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s1 (i64.add (get_local $s1) (get_local $carry0)))
|
||||
(set_local $s0 (i64.sub (get_local $s0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (i64.add (get_local $s2) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s3 (i64.add (get_local $s3) (get_local $carry2)))
|
||||
(set_local $s2 (i64.sub (get_local $s2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (i64.add (get_local $s4) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s5 (i64.add (get_local $s5) (get_local $carry4)))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (i64.add (get_local $s6) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (i64.add (get_local $s8) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (i64.add (get_local $s10) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry12 (i64.shr_s (i64.add (get_local $s12) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s13 (i64.add (get_local $s13) (get_local $carry12)))
|
||||
(set_local $s12 (i64.sub (get_local $s12) (i64.mul (get_local $carry12) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry14 (i64.shr_s (i64.add (get_local $s14) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s15 (i64.add (get_local $s15) (get_local $carry14)))
|
||||
(set_local $s14 (i64.sub (get_local $s14) (i64.mul (get_local $carry14) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry16 (i64.shr_s (i64.add (get_local $s16) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s17 (i64.add (get_local $s17) (get_local $carry16)))
|
||||
(set_local $s16 (i64.sub (get_local $s16) (i64.mul (get_local $carry16) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry18 (i64.shr_s (i64.add (get_local $s18) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s19 (i64.add (get_local $s19) (get_local $carry18)))
|
||||
(set_local $s18 (i64.sub (get_local $s18) (i64.mul (get_local $carry18) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry20 (i64.shr_s (i64.add (get_local $s20) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s21 (i64.add (get_local $s21) (get_local $carry20)))
|
||||
(set_local $s20 (i64.sub (get_local $s20) (i64.mul (get_local $carry20) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry22 (i64.shr_s (i64.add (get_local $s22) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s23 (i64.add (get_local $s23) (get_local $carry22)))
|
||||
(set_local $s22 (i64.sub (get_local $s22) (i64.mul (get_local $carry22) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (i64.add (get_local $s1) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s2 (i64.add (get_local $s2) (get_local $carry1)))
|
||||
(set_local $s1 (i64.sub (get_local $s1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (i64.add (get_local $s3) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s4 (i64.add (get_local $s4) (get_local $carry3)))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry5 (i64.shr_s (i64.add (get_local $s5) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s6 (i64.add (get_local $s6) (get_local $carry5)))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (i64.add (get_local $s7) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (i64.add (get_local $s9) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry11 (i64.shr_s (i64.add (get_local $s11) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s12 (i64.add (get_local $s12) (get_local $carry11)))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $carry11) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry13 (i64.shr_s (i64.add (get_local $s13) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s14 (i64.add (get_local $s14) (get_local $carry13)))
|
||||
(set_local $s13 (i64.sub (get_local $s13) (i64.mul (get_local $carry13) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry15 (i64.shr_s (i64.add (get_local $s15) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s16 (i64.add (get_local $s16) (get_local $carry15)))
|
||||
(set_local $s15 (i64.sub (get_local $s15) (i64.mul (get_local $carry15) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry17 (i64.shr_s (i64.add (get_local $s17) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s18 (i64.add (get_local $s18) (get_local $carry17)))
|
||||
(set_local $s17 (i64.sub (get_local $s17) (i64.mul (get_local $carry17) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry19 (i64.shr_s (i64.add (get_local $s19) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s20 (i64.add (get_local $s20) (get_local $carry19)))
|
||||
(set_local $s19 (i64.sub (get_local $s19) (i64.mul (get_local $carry19) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry21 (i64.shr_s (i64.add (get_local $s21) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s22 (i64.add (get_local $s22) (get_local $carry21)))
|
||||
(set_local $s21 (i64.sub (get_local $s21) (i64.mul (get_local $carry21) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(get_local $s)
|
||||
(get_local $s0)
|
||||
(get_local $s1)
|
||||
(get_local $s2)
|
||||
(get_local $s3)
|
||||
(get_local $s4)
|
||||
(get_local $s5)
|
||||
(get_local $s6)
|
||||
(get_local $s7)
|
||||
(get_local $s8)
|
||||
(get_local $s9)
|
||||
(get_local $s10)
|
||||
(get_local $s11)
|
||||
(get_local $s12)
|
||||
(get_local $s13)
|
||||
(get_local $s14)
|
||||
(get_local $s15)
|
||||
(get_local $s16)
|
||||
(get_local $s17)
|
||||
(get_local $s18)
|
||||
(get_local $s19)
|
||||
(get_local $s20)
|
||||
(get_local $s21)
|
||||
(get_local $s22)
|
||||
(get_local $s23)
|
||||
(call $sc_reduce)))
|
493
fe25519_25/sc_reduce.wat
Normal file
493
fe25519_25/sc_reduce.wat
Normal file
@ -0,0 +1,493 @@
|
||||
(module
|
||||
(memory $0 1)
|
||||
(export "memory" (memory $0))
|
||||
|
||||
(func $sc_reduce (export "sc_reduce")
|
||||
(param $ptr i32)
|
||||
|
||||
(param $s0 i64)
|
||||
(param $s1 i64)
|
||||
(param $s2 i64)
|
||||
(param $s3 i64)
|
||||
(param $s4 i64)
|
||||
(param $s5 i64)
|
||||
(param $s6 i64)
|
||||
(param $s7 i64)
|
||||
(param $s8 i64)
|
||||
(param $s9 i64)
|
||||
(param $s10 i64)
|
||||
(param $s11 i64)
|
||||
(param $s12 i64)
|
||||
(param $s13 i64)
|
||||
(param $s14 i64)
|
||||
(param $s15 i64)
|
||||
(param $s16 i64)
|
||||
(param $s17 i64)
|
||||
(param $s18 i64)
|
||||
(param $s19 i64)
|
||||
(param $s20 i64)
|
||||
(param $s21 i64)
|
||||
(param $s22 i64)
|
||||
(param $s23 i64)
|
||||
|
||||
(set_local $s11 (i64.add (get_local $s11) (i64.mul (get_local $s23) (i64.const 666643))))
|
||||
(set_local $s12 (i64.add (get_local $s12) (i64.mul (get_local $s23) (i64.const 470296))))
|
||||
(set_local $s13 (i64.add (get_local $s13) (i64.mul (get_local $s23) (i64.const 654183))))
|
||||
(set_local $s14 (i64.sub (get_local $s14) (i64.mul (get_local $s23) (i64.const 997805))))
|
||||
(set_local $s15 (i64.add (get_local $s15) (i64.mul (get_local $s23) (i64.const 136657))))
|
||||
(set_local $s16 (i64.sub (get_local $s16) (i64.mul (get_local $s23) (i64.const 683901))))
|
||||
|
||||
(set_local $s10 (i64.add (get_local $s10) (i64.mul (get_local $s22) (i64.const 666643))))
|
||||
(set_local $s11 (i64.add (get_local $s11) (i64.mul (get_local $s22) (i64.const 470296))))
|
||||
(set_local $s12 (i64.add (get_local $s12) (i64.mul (get_local $s22) (i64.const 654183))))
|
||||
(set_local $s13 (i64.sub (get_local $s13) (i64.mul (get_local $s22) (i64.const 997805))))
|
||||
(set_local $s14 (i64.add (get_local $s14) (i64.mul (get_local $s22) (i64.const 136657))))
|
||||
(set_local $s15 (i64.sub (get_local $s15) (i64.mul (get_local $s22) (i64.const 683901))))
|
||||
|
||||
(set_local $s9 (i64.add (get_local $s9 ) (i64.mul (get_local $s21) (i64.const 666643))))
|
||||
(set_local $s10 (i64.add (get_local $s10) (i64.mul (get_local $s21) (i64.const 470296))))
|
||||
(set_local $s11 (i64.add (get_local $s11) (i64.mul (get_local $s21) (i64.const 654183))))
|
||||
(set_local $s12 (i64.sub (get_local $s12) (i64.mul (get_local $s21) (i64.const 997805))))
|
||||
(set_local $s13 (i64.add (get_local $s13) (i64.mul (get_local $s21) (i64.const 136657))))
|
||||
(set_local $s14 (i64.sub (get_local $s14) (i64.mul (get_local $s21) (i64.const 683901))))
|
||||
|
||||
(set_local $s8 (i64.add (get_local $s8 ) (i64.mul (get_local $s20) (i64.const 666643))))
|
||||
(set_local $s9 (i64.add (get_local $s9 ) (i64.mul (get_local $s20) (i64.const 470296))))
|
||||
(set_local $s10 (i64.add (get_local $s10) (i64.mul (get_local $s20) (i64.const 654183))))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $s20) (i64.const 997805))))
|
||||
(set_local $s12 (i64.add (get_local $s12) (i64.mul (get_local $s20) (i64.const 136657))))
|
||||
(set_local $s13 (i64.sub (get_local $s13) (i64.mul (get_local $s20) (i64.const 683901))))
|
||||
|
||||
(set_local $s7 (i64.add (get_local $s7 ) (i64.mul (get_local $s19) (i64.const 666643))))
|
||||
(set_local $s8 (i64.add (get_local $s8 ) (i64.mul (get_local $s19) (i64.const 470296))))
|
||||
(set_local $s9 (i64.add (get_local $s9 ) (i64.mul (get_local $s19) (i64.const 654183))))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $s19) (i64.const 997805))))
|
||||
(set_local $s11 (i64.add (get_local $s11) (i64.mul (get_local $s19) (i64.const 136657))))
|
||||
(set_local $s12 (i64.sub (get_local $s12) (i64.mul (get_local $s19) (i64.const 683901))))
|
||||
|
||||
(set_local $s6 (i64.add (get_local $s6 ) (i64.mul (get_local $s18) (i64.const 666643))))
|
||||
(set_local $s7 (i64.add (get_local $s7 ) (i64.mul (get_local $s18) (i64.const 470296))))
|
||||
(set_local $s8 (i64.add (get_local $s8 ) (i64.mul (get_local $s18) (i64.const 654183))))
|
||||
(set_local $s9 (i64.sub (get_local $s9 ) (i64.mul (get_local $s18) (i64.const 997805))))
|
||||
(set_local $s10 (i64.add (get_local $s10) (i64.mul (get_local $s18) (i64.const 136657))))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $s18) (i64.const 683901))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (i64.add (get_local $s6) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (i64.add (get_local $s8) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (i64.add (get_local $s10) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry12 (i64.shr_s (i64.add (get_local $s12) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s13 (i64.add (get_local $s13) (get_local $carry12)))
|
||||
(set_local $s12 (i64.sub (get_local $s12) (i64.mul (get_local $carry12) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry14 (i64.shr_s (i64.add (get_local $s14) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s15 (i64.add (get_local $s15) (get_local $carry14)))
|
||||
(set_local $s14 (i64.sub (get_local $s14) (i64.mul (get_local $carry14) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry16 (i64.shr_s (i64.add (get_local $s16) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s17 (i64.add (get_local $s17) (get_local $carry16)))
|
||||
(set_local $s16 (i64.sub (get_local $s16) (i64.mul (get_local $carry16) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (i64.add (get_local $s7) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (i64.add (get_local $s9) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry11 (i64.shr_s (i64.add (get_local $s11) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s12 (i64.add (get_local $s12) (get_local $carry11)))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $carry11) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry13 (i64.shr_s (i64.add (get_local $s13) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s14 (i64.add (get_local $s14) (get_local $carry13)))
|
||||
(set_local $s13 (i64.sub (get_local $s13) (i64.mul (get_local $carry13) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry15 (i64.shr_s (i64.add (get_local $s15) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s16 (i64.add (get_local $s16) (get_local $carry15)))
|
||||
(set_local $s15 (i64.sub (get_local $s15) (i64.mul (get_local $carry15) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $s5 (i64.add (get_local $s5 ) (i64.mul (get_local $s17) (i64.const 666643))))
|
||||
(set_local $s6 (i64.add (get_local $s6 ) (i64.mul (get_local $s17) (i64.const 470296))))
|
||||
(set_local $s7 (i64.add (get_local $s7 ) (i64.mul (get_local $s17) (i64.const 654183))))
|
||||
(set_local $s8 (i64.sub (get_local $s8 ) (i64.mul (get_local $s17) (i64.const 997805))))
|
||||
(set_local $s9 (i64.add (get_local $s9 ) (i64.mul (get_local $s17) (i64.const 136657))))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $s17) (i64.const 683901))))
|
||||
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s16) (i64.const 666643))))
|
||||
(set_local $s5 (i64.add (get_local $s5) (i64.mul (get_local $s16) (i64.const 470296))))
|
||||
(set_local $s6 (i64.add (get_local $s6) (i64.mul (get_local $s16) (i64.const 654183))))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $s16) (i64.const 997805))))
|
||||
(set_local $s8 (i64.add (get_local $s8) (i64.mul (get_local $s16) (i64.const 136657))))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $s16) (i64.const 683901))))
|
||||
|
||||
(set_local $s3 (i64.add (get_local $s3) (i64.mul (get_local $s15) (i64.const 666643))))
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s15) (i64.const 470296))))
|
||||
(set_local $s5 (i64.add (get_local $s5) (i64.mul (get_local $s15) (i64.const 654183))))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $s15) (i64.const 997805))))
|
||||
(set_local $s7 (i64.add (get_local $s7) (i64.mul (get_local $s15) (i64.const 136657))))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $s15) (i64.const 683901))))
|
||||
|
||||
(set_local $s2 (i64.add (get_local $s2) (i64.mul (get_local $s14) (i64.const 666643))))
|
||||
(set_local $s3 (i64.add (get_local $s3) (i64.mul (get_local $s14) (i64.const 470296))))
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s14) (i64.const 654183))))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $s14) (i64.const 997805))))
|
||||
(set_local $s6 (i64.add (get_local $s6) (i64.mul (get_local $s14) (i64.const 136657))))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $s14) (i64.const 683901))))
|
||||
|
||||
(set_local $s1 (i64.add (get_local $s1) (i64.mul (get_local $s13) (i64.const 666643))))
|
||||
(set_local $s2 (i64.add (get_local $s2) (i64.mul (get_local $s13) (i64.const 470296))))
|
||||
(set_local $s3 (i64.add (get_local $s3) (i64.mul (get_local $s13) (i64.const 654183))))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $s13) (i64.const 997805))))
|
||||
(set_local $s5 (i64.add (get_local $s5) (i64.mul (get_local $s13) (i64.const 136657))))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $s13) (i64.const 683901))))
|
||||
|
||||
(set_local $s0 (i64.add (get_local $s0) (i64.mul (get_local $s12) (i64.const 666643))))
|
||||
(set_local $s1 (i64.add (get_local $s1) (i64.mul (get_local $s12) (i64.const 470296))))
|
||||
(set_local $s2 (i64.add (get_local $s2) (i64.mul (get_local $s12) (i64.const 654183))))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $s12) (i64.const 997805))))
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s12) (i64.const 136657))))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $s12) (i64.const 683901))))
|
||||
(set_local $s12 (i64.const 0))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (i64.add (get_local $s0) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s1 (i64.add (get_local $s1) (get_local $carry0)))
|
||||
(set_local $s0 (i64.sub (get_local $s0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (i64.add (get_local $s2) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s3 (i64.add (get_local $s3) (get_local $carry2)))
|
||||
(set_local $s2 (i64.sub (get_local $s2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (i64.add (get_local $s4) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s5 (i64.add (get_local $s5) (get_local $carry4)))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (i64.add (get_local $s6) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (i64.add (get_local $s8) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (i64.add (get_local $s10) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (i64.add (get_local $s1) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s2 (i64.add (get_local $s2) (get_local $carry1)))
|
||||
(set_local $s1 (i64.sub (get_local $s1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (i64.add (get_local $s3) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s4 (i64.add (get_local $s4) (get_local $carry3)))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry5 (i64.shr_s (i64.add (get_local $s5) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s6 (i64.add (get_local $s6) (get_local $carry5)))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (i64.add (get_local $s7) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (i64.add (get_local $s9) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry11 (i64.shr_s (i64.add (get_local $s11) (i64.shl (i64.const 1) (i64.const 20))) (i64.const 21)))
|
||||
(set_local $s12 (i64.add (get_local $s12) (get_local $carry11)))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $carry11) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $s0 (i64.add (get_local $s0) (i64.mul (get_local $s12) (i64.const 666643))))
|
||||
(set_local $s1 (i64.add (get_local $s1) (i64.mul (get_local $s12) (i64.const 470296))))
|
||||
(set_local $s2 (i64.add (get_local $s2) (i64.mul (get_local $s12) (i64.const 654183))))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $s12) (i64.const 997805))))
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s12) (i64.const 136657))))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $s12) (i64.const 683901))))
|
||||
(set_local $s12 (i64.const 0))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (get_local $s0) (i64.const 21)))
|
||||
(set_local $s1 (i64.add (get_local $s1) (get_local $carry0)))
|
||||
(set_local $s0 (i64.sub (get_local $s0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (get_local $s1) (i64.const 21)))
|
||||
(set_local $s2 (i64.add (get_local $s2) (get_local $carry1)))
|
||||
(set_local $s1 (i64.sub (get_local $s1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (get_local $s2) (i64.const 21)))
|
||||
(set_local $s3 (i64.add (get_local $s3) (get_local $carry2)))
|
||||
(set_local $s2 (i64.sub (get_local $s2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (get_local $s3) (i64.const 21)))
|
||||
(set_local $s4 (i64.add (get_local $s4) (get_local $carry3)))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (get_local $s4) (i64.const 21)))
|
||||
(set_local $s5 (i64.add (get_local $s5) (get_local $carry4)))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry5 (i64.shr_s (get_local $s5) (i64.const 21)))
|
||||
(set_local $s6 (i64.add (get_local $s6) (get_local $carry5)))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (get_local $s6) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (get_local $s7) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (get_local $s8) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (get_local $s9) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (get_local $s10) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry11 (i64.shr_s (get_local $s11) (i64.const 21)))
|
||||
(set_local $s12 (i64.add (get_local $s12) (get_local $carry11)))
|
||||
(set_local $s11 (i64.sub (get_local $s11) (i64.mul (get_local $carry11) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $s0 (i64.add (get_local $s0) (i64.mul (get_local $s12) (i64.const 666643))))
|
||||
(set_local $s1 (i64.add (get_local $s1) (i64.mul (get_local $s12) (i64.const 470296))))
|
||||
(set_local $s2 (i64.add (get_local $s2) (i64.mul (get_local $s12) (i64.const 654183))))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $s12) (i64.const 997805))))
|
||||
(set_local $s4 (i64.add (get_local $s4) (i64.mul (get_local $s12) (i64.const 136657))))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $s12) (i64.const 683901))))
|
||||
|
||||
(set_local $carry0 (i64.shr_s (get_local $s0) (i64.const 21)))
|
||||
(set_local $s1 (i64.add (get_local $s1) (get_local $carry0)))
|
||||
(set_local $s0 (i64.sub (get_local $s0) (i64.mul (get_local $carry0) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry1 (i64.shr_s (get_local $s1) (i64.const 21)))
|
||||
(set_local $s2 (i64.add (get_local $s2) (get_local $carry1)))
|
||||
(set_local $s1 (i64.sub (get_local $s1) (i64.mul (get_local $carry1) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry2 (i64.shr_s (get_local $s2) (i64.const 21)))
|
||||
(set_local $s3 (i64.add (get_local $s3) (get_local $carry2)))
|
||||
(set_local $s2 (i64.sub (get_local $s2) (i64.mul (get_local $carry2) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry3 (i64.shr_s (get_local $s3) (i64.const 21)))
|
||||
(set_local $s4 (i64.add (get_local $s4) (get_local $carry3)))
|
||||
(set_local $s3 (i64.sub (get_local $s3) (i64.mul (get_local $carry3) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry4 (i64.shr_s (get_local $s4) (i64.const 21)))
|
||||
(set_local $s5 (i64.add (get_local $s5) (get_local $carry4)))
|
||||
(set_local $s4 (i64.sub (get_local $s4) (i64.mul (get_local $carry4) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry5 (i64.shr_s (get_local $s5) (i64.const 21)))
|
||||
(set_local $s6 (i64.add (get_local $s6) (get_local $carry5)))
|
||||
(set_local $s5 (i64.sub (get_local $s5) (i64.mul (get_local $carry5) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry6 (i64.shr_s (get_local $s6) (i64.const 21)))
|
||||
(set_local $s7 (i64.add (get_local $s7) (get_local $carry6)))
|
||||
(set_local $s6 (i64.sub (get_local $s6) (i64.mul (get_local $carry6) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry7 (i64.shr_s (get_local $s7) (i64.const 21)))
|
||||
(set_local $s8 (i64.add (get_local $s8) (get_local $carry7)))
|
||||
(set_local $s7 (i64.sub (get_local $s7) (i64.mul (get_local $carry7) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry8 (i64.shr_s (get_local $s8) (i64.const 21)))
|
||||
(set_local $s9 (i64.add (get_local $s9) (get_local $carry8)))
|
||||
(set_local $s8 (i64.sub (get_local $s8) (i64.mul (get_local $carry8) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry9 (i64.shr_s (get_local $s9) (i64.const 21)))
|
||||
(set_local $s10 (i64.add (get_local $s10) (get_local $carry9)))
|
||||
(set_local $s9 (i64.sub (get_local $s9) (i64.mul (get_local $carry9) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(set_local $carry10 (i64.shr_s (get_local $s10) (i64.const 21)))
|
||||
(set_local $s11 (i64.add (get_local $s11) (get_local $carry10)))
|
||||
(set_local $s10 (i64.sub (get_local $s10) (i64.mul (get_local $carry10) (i64.shl (i64.const 1) (i64.const 21)))))
|
||||
|
||||
(get_local $s)
|
||||
|
||||
(i64.and (get_local $s0) (i64.const 0xff))
|
||||
(i64.and (get_local $s0) (i64.const 0xff00))
|
||||
(i64.or)
|
||||
(get_local $s0)
|
||||
(i64.shl (i64.mul (get_local $s1) (i64.const 32)) (i64.const 16))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s1) (i64.const 21))
|
||||
(i64.const 0xff000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s1) (i64.const 21))
|
||||
(i64.const 0xff00000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s1) (i64.const 21))
|
||||
(i64.shl (i64.mul (get_local $s2) (i64.const 4)) (i64.const 40))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s2) (i64.const 42))
|
||||
(i64.const 0xff000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s2) (i64.const 42))
|
||||
(i64.shl (i64.mul (get_local $s3) (i64.const 128)) (i64.const 56))
|
||||
(i64.or)
|
||||
(i64.const 0xff00000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
|
||||
(i64.store offset=0)
|
||||
|
||||
(get_local $s)
|
||||
|
||||
(i64.and (i64.shr_s (get_local $s3) (i64.const 1)) (i64.const 0xff))
|
||||
(i64.and (i64.shr_s (get_local $s3) (i64.const 1)) (i64.const 0xff00))
|
||||
(i64.or)
|
||||
(i64.shr_s (get_local $s3) (i64.const 1))
|
||||
(i64.shl (i64.mul (get_local $s4) (i64.const 16)) (i64.const 16))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s4) (i64.const 20))
|
||||
(i64.const 0xff000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s4) (i64.const 20))
|
||||
(i64.const 0xff00000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s4) (i64.const 20))
|
||||
(i64.shl (i64.mul (get_local $s5) (i64.const 2)) (i64.const 40))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s5) (i64.const 41))
|
||||
(i64.const 0xff000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s5) (i64.const 41))
|
||||
(i64.shl (i64.mul (get_local $s6) (i64.const 64)) (i64.const 56))
|
||||
(i64.or)
|
||||
(i64.const 0xff00000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
|
||||
(i64.store offset=8)
|
||||
|
||||
(get_local $s)
|
||||
|
||||
(i64.and (i64.shr_s (get_local $s6) (i64.const 2)) (i64.const 0xff))
|
||||
(i64.and (i64.shr_s (get_local $s6) (i64.const 2)) (i64.const 0xff00))
|
||||
(i64.or)
|
||||
(i64.shr_s (get_local $s6) (i64.const 2))
|
||||
(i64.shl (i64.mul (get_local $s7) (i64.const 8)) (i64.const 16))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s7) (i64.const 19))
|
||||
(i64.const 0xff000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s7) (i64.const 19))
|
||||
(i64.const 0xff00000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s8) (i64.const 40))
|
||||
(i64.const 0xff0000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s8) (i64.const 40))
|
||||
(i64.const 0xff000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s8) (i64.const 40))
|
||||
(i64.shl (i64.mul (get_local $s9) (i64.const 32)) (i64.const 56))
|
||||
(i64.or)
|
||||
(i64.const 0xff00000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
|
||||
(i64.store offset=16)
|
||||
|
||||
(get_local $s)
|
||||
|
||||
(i64.and (i64.shr_s (get_local $s9) (i64.const 3)) (i64.const 0xff))
|
||||
(i64.and (i64.shr_s (get_local $s9) (i64.const 3)) (i64.const 0xff00))
|
||||
(i64.or)
|
||||
(i64.shr_s (get_local $s9) (i64.const 3))
|
||||
(i64.shl (i64.mul (get_local $s10) (i64.const 4)) (i64.const 16))
|
||||
(i64.or)
|
||||
(i64.const 0xff0000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s10) (i64.const 18))
|
||||
(i64.const 0xff000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s10) (i64.const 18))
|
||||
(i64.shl (i64.mul (get_local $s11) (i64.const 128)) (i64.const 32))
|
||||
(i64.or)
|
||||
(i64.const 0xff00000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s11) (i64.const 39))
|
||||
(i64.const 0xff0000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s11) (i64.const 39))
|
||||
(i64.const 0xff000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
(i64.shl (get_local $s11) (i64.const 39))
|
||||
(i64.const 0xff00000000000000)
|
||||
(i64.and)
|
||||
(i64.or)
|
||||
|
||||
(i64.store offset=24))
|
||||
|
||||
(func $sc25519_reduce (export "sc25519_reduce") (param $s i32)
|
||||
(get_local $s)
|
||||
(i64.load32_u offset=0 (get_local $s))
|
||||
(i64.load32_u offset=4 (get_local $s))
|
||||
(i64.load32_u offset=8 (get_local $s))
|
||||
(i64.load32_u offset=12 (get_local $s))
|
||||
(i64.load32_u offset=16 (get_local $s))
|
||||
(i64.load32_u offset=20 (get_local $s))
|
||||
(i64.load32_u offset=24 (get_local $s))
|
||||
(i64.load32_u offset=28 (get_local $s))
|
||||
(i64.load32_u offset=32 (get_local $s))
|
||||
(i64.load32_u offset=36 (get_local $s))
|
||||
(i64.load32_u offset=40 (get_local $s))
|
||||
(i64.load32_u offset=44 (get_local $s))
|
||||
(i64.load32_u offset=48 (get_local $s))
|
||||
(i64.load32_u offset=52 (get_local $s))
|
||||
(i64.load32_u offset=56 (get_local $s))
|
||||
(i64.load32_u offset=60 (get_local $s))
|
||||
(i64.load32_u offset=64 (get_local $s))
|
||||
(i64.load32_u offset=68 (get_local $s))
|
||||
(i64.load32_u offset=72 (get_local $s))
|
||||
(i64.load32_u offset=76 (get_local $s))
|
||||
(i64.load32_u offset=80 (get_local $s))
|
||||
(i64.load32_u offset=84 (get_local $s))
|
||||
(i64.load32_u offset=88 (get_local $s))
|
||||
(i64.load32_u offset=92 (get_local $s))
|
||||
(call $sc_reduce)))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user