diff options
Diffstat (limited to 'mpi/mpiutil.c')
-rw-r--r-- | mpi/mpiutil.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/mpi/mpiutil.c b/mpi/mpiutil.c index 3a1d71fb4..8b2071afc 100644 --- a/mpi/mpiutil.c +++ b/mpi/mpiutil.c @@ -433,6 +433,34 @@ mpi_set( MPI w, MPI u) void +mpi_set_cond( MPI w, MPI u, unsigned long set) +{ + mpi_size_t i; + mpi_size_t nlimbs = u->alloced; + mpi_limb_t mask = ((mpi_limb_t)0) - !!set; + mpi_limb_t x; + + if (w->alloced != u->alloced) + log_bug ("mpi_set_cond: different sizes\n"); + + for (i = 0; i < nlimbs; i++) + { + x = mask & (w->d[i] ^ u->d[i]); + w->d[i] = w->d[i] ^ x; + } + + x = mask & (w->nlimbs ^ u->nlimbs); + w->nlimbs = w->nlimbs ^ x; + + x = mask & (w->nbits ^ u->nbits); + w->nbits = w->nbits ^ x; + + x = mask & (w->sign ^ u->sign); + w->sign = w->sign ^ x; +} + + +void mpi_set_ui( MPI w, unsigned long u) { RESIZE_IF_NEEDED(w, 1); |