aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mpi/mpicoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mpi/mpicoder.c')
-rw-r--r--lib/mpi/mpicoder.c21
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