diff options
Diffstat (limited to 'lib/mpi/mpicoder.c')
-rw-r--r-- | lib/mpi/mpicoder.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index eb15e7dc7b65..6bb52beb06b0 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
@@ -380,7 +380,9 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes, | |||
380 | buf_len = sgl->length; | 380 | buf_len = sgl->length; |
381 | p2 = sg_virt(sgl); | 381 | p2 = sg_virt(sgl); |
382 | 382 | ||
383 | for (i = a->nlimbs - 1; i >= 0; i--) { | 383 | for (i = a->nlimbs - 1 - lzeros / BYTES_PER_MPI_LIMB, |
384 | lzeros %= BYTES_PER_MPI_LIMB; | ||
385 | i >= 0; i--) { | ||
384 | alimb = a->d[i]; | 386 | alimb = a->d[i]; |
385 | p = (u8 *)&alimb2; | 387 | p = (u8 *)&alimb2; |
386 | #if BYTES_PER_MPI_LIMB == 4 | 388 | #if BYTES_PER_MPI_LIMB == 4 |
@@ -401,17 +403,12 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes, | |||
401 | #error please implement for this limb size. | 403 | #error please implement for this limb size. |
402 | #endif | 404 | #endif |
403 | if (lzeros > 0) { | 405 | if (lzeros > 0) { |
404 | if (lzeros >= sizeof(alimb)) { | 406 | mpi_limb_t *limb1 = (void *)p - sizeof(alimb); |
405 | p -= sizeof(alimb); | 407 | mpi_limb_t *limb2 = (void *)p - sizeof(alimb) |
406 | continue; | 408 | + lzeros; |
407 | } else { | 409 | *limb1 = *limb2; |
408 | mpi_limb_t *limb1 = (void *)p - sizeof(alimb); | 410 | p -= lzeros; |
409 | mpi_limb_t *limb2 = (void *)p - sizeof(alimb) | 411 | y = lzeros; |
410 | + lzeros; | ||
411 | *limb1 = *limb2; | ||
412 | p -= lzeros; | ||
413 | y = lzeros; | ||
414 | } | ||
415 | lzeros -= sizeof(alimb); | 412 | lzeros -= sizeof(alimb); |
416 | } | 413 | } |
417 | 414 | ||