feMul calculates h = f * g Can overlap h with f or g. Preconditions: |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. Postconditions: |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. Notes on implementation strategy: Using sch
(h, f, g *fieldElement)
| 305 | // |
| 306 | // With tighter constraints on inputs can squeeze carries into int32. |
| 307 | func feMul(h, f, g *fieldElement) { |
| 308 | f0 := f[0] |
| 309 | f1 := f[1] |
| 310 | f2 := f[2] |
| 311 | f3 := f[3] |
| 312 | f4 := f[4] |
| 313 | f5 := f[5] |
| 314 | f6 := f[6] |
| 315 | f7 := f[7] |
| 316 | f8 := f[8] |
| 317 | f9 := f[9] |
| 318 | g0 := g[0] |
| 319 | g1 := g[1] |
| 320 | g2 := g[2] |
| 321 | g3 := g[3] |
| 322 | g4 := g[4] |
| 323 | g5 := g[5] |
| 324 | g6 := g[6] |
| 325 | g7 := g[7] |
| 326 | g8 := g[8] |
| 327 | g9 := g[9] |
| 328 | g1_19 := 19 * g1 /* 1.4*2^29 */ |
| 329 | g2_19 := 19 * g2 /* 1.4*2^30; still ok */ |
| 330 | g3_19 := 19 * g3 |
| 331 | g4_19 := 19 * g4 |
| 332 | g5_19 := 19 * g5 |
| 333 | g6_19 := 19 * g6 |
| 334 | g7_19 := 19 * g7 |
| 335 | g8_19 := 19 * g8 |
| 336 | g9_19 := 19 * g9 |
| 337 | f1_2 := 2 * f1 |
| 338 | f3_2 := 2 * f3 |
| 339 | f5_2 := 2 * f5 |
| 340 | f7_2 := 2 * f7 |
| 341 | f9_2 := 2 * f9 |
| 342 | f0g0 := int64(f0) * int64(g0) |
| 343 | f0g1 := int64(f0) * int64(g1) |
| 344 | f0g2 := int64(f0) * int64(g2) |
| 345 | f0g3 := int64(f0) * int64(g3) |
| 346 | f0g4 := int64(f0) * int64(g4) |
| 347 | f0g5 := int64(f0) * int64(g5) |
| 348 | f0g6 := int64(f0) * int64(g6) |
| 349 | f0g7 := int64(f0) * int64(g7) |
| 350 | f0g8 := int64(f0) * int64(g8) |
| 351 | f0g9 := int64(f0) * int64(g9) |
| 352 | f1g0 := int64(f1) * int64(g0) |
| 353 | f1g1_2 := int64(f1_2) * int64(g1) |
| 354 | f1g2 := int64(f1) * int64(g2) |
| 355 | f1g3_2 := int64(f1_2) * int64(g3) |
| 356 | f1g4 := int64(f1) * int64(g4) |
| 357 | f1g5_2 := int64(f1_2) * int64(g5) |
| 358 | f1g6 := int64(f1) * int64(g6) |
| 359 | f1g7_2 := int64(f1_2) * int64(g7) |
| 360 | f1g8 := int64(f1) * int64(g8) |
| 361 | f1g9_38 := int64(f1_2) * int64(g9_19) |
| 362 | f2g0 := int64(f2) * int64(g0) |
| 363 | f2g1 := int64(f2) * int64(g1) |
| 364 | f2g2 := int64(f2) * int64(g2) |
no outgoing calls
no test coverage detected