diff options
Diffstat (limited to 'lib/mpi')
| -rw-r--r-- | lib/mpi/longlong.h | 2 | ||||
| -rw-r--r-- | lib/mpi/mpi-inline.h | 2 | ||||
| -rw-r--r-- | lib/mpi/mpi-internal.h | 8 | ||||
| -rw-r--r-- | lib/mpi/mpicoder.c | 39 |
4 files changed, 27 insertions, 24 deletions
diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h index b90e255c2a68..93336502af08 100644 --- a/lib/mpi/longlong.h +++ b/lib/mpi/longlong.h | |||
| @@ -216,7 +216,7 @@ extern UDItype __udiv_qrnnd(UDItype *, UDItype, UDItype, UDItype); | |||
| 216 | __asm__ ("%@ Inlined umul_ppmm\n" \ | 216 | __asm__ ("%@ Inlined umul_ppmm\n" \ |
| 217 | "umull %r1, %r0, %r2, %r3" \ | 217 | "umull %r1, %r0, %r2, %r3" \ |
| 218 | : "=&r" ((USItype)(xh)), \ | 218 | : "=&r" ((USItype)(xh)), \ |
| 219 | "=r" ((USItype)(xl)) \ | 219 | "=&r" ((USItype)(xl)) \ |
| 220 | : "r" ((USItype)(a)), \ | 220 | : "r" ((USItype)(a)), \ |
| 221 | "r" ((USItype)(b)) \ | 221 | "r" ((USItype)(b)) \ |
| 222 | : "r0", "r1") | 222 | : "r0", "r1") |
diff --git a/lib/mpi/mpi-inline.h b/lib/mpi/mpi-inline.h index e2b39852b30a..c245ea31f785 100644 --- a/lib/mpi/mpi-inline.h +++ b/lib/mpi/mpi-inline.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #define G10_MPI_INLINE_H | 30 | #define G10_MPI_INLINE_H |
| 31 | 31 | ||
| 32 | #ifndef G10_MPI_INLINE_DECL | 32 | #ifndef G10_MPI_INLINE_DECL |
| 33 | #define G10_MPI_INLINE_DECL extern inline | 33 | #define G10_MPI_INLINE_DECL static inline |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
| 36 | G10_MPI_INLINE_DECL mpi_limb_t | 36 | G10_MPI_INLINE_DECL mpi_limb_t |
diff --git a/lib/mpi/mpi-internal.h b/lib/mpi/mpi-internal.h index c65dd1bff45a..7eceeddb3fb8 100644 --- a/lib/mpi/mpi-internal.h +++ b/lib/mpi/mpi-internal.h | |||
| @@ -168,19 +168,19 @@ void mpi_rshift_limbs(MPI a, unsigned int count); | |||
| 168 | int mpi_lshift_limbs(MPI a, unsigned int count); | 168 | int mpi_lshift_limbs(MPI a, unsigned int count); |
| 169 | 169 | ||
| 170 | /*-- mpihelp-add.c --*/ | 170 | /*-- mpihelp-add.c --*/ |
| 171 | mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 171 | static inline mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 172 | mpi_size_t s1_size, mpi_limb_t s2_limb); | 172 | mpi_size_t s1_size, mpi_limb_t s2_limb); |
| 173 | mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 173 | mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 174 | mpi_ptr_t s2_ptr, mpi_size_t size); | 174 | mpi_ptr_t s2_ptr, mpi_size_t size); |
| 175 | mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, | 175 | static inline mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, |
| 176 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); | 176 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); |
| 177 | 177 | ||
| 178 | /*-- mpihelp-sub.c --*/ | 178 | /*-- mpihelp-sub.c --*/ |
| 179 | mpi_limb_t mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 179 | static inline mpi_limb_t mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 180 | mpi_size_t s1_size, mpi_limb_t s2_limb); | 180 | mpi_size_t s1_size, mpi_limb_t s2_limb); |
| 181 | mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 181 | mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 182 | mpi_ptr_t s2_ptr, mpi_size_t size); | 182 | mpi_ptr_t s2_ptr, mpi_size_t size); |
| 183 | mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, | 183 | static inline mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, |
| 184 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); | 184 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); |
| 185 | 185 | ||
| 186 | /*-- mpihelp-cmp.c --*/ | 186 | /*-- mpihelp-cmp.c --*/ |
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index ec533a6c77b5..eb15e7dc7b65 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
| @@ -128,6 +128,23 @@ leave: | |||
| 128 | } | 128 | } |
| 129 | EXPORT_SYMBOL_GPL(mpi_read_from_buffer); | 129 | EXPORT_SYMBOL_GPL(mpi_read_from_buffer); |
| 130 | 130 | ||
| 131 | static int count_lzeros(MPI a) | ||
| 132 | { | ||
| 133 | mpi_limb_t alimb; | ||
| 134 | int i, lzeros = 0; | ||
| 135 | |||
| 136 | for (i = a->nlimbs - 1; i >= 0; i--) { | ||
| 137 | alimb = a->d[i]; | ||
| 138 | if (alimb == 0) { | ||
| 139 | lzeros += sizeof(mpi_limb_t); | ||
| 140 | } else { | ||
| 141 | lzeros += count_leading_zeros(alimb) / 8; | ||
| 142 | break; | ||
| 143 | } | ||
| 144 | } | ||
| 145 | return lzeros; | ||
| 146 | } | ||
| 147 | |||
| 131 | /** | 148 | /** |
| 132 | * mpi_read_buffer() - read MPI to a bufer provided by user (msb first) | 149 | * mpi_read_buffer() - read MPI to a bufer provided by user (msb first) |
| 133 | * | 150 | * |
| @@ -148,7 +165,7 @@ int mpi_read_buffer(MPI a, uint8_t *buf, unsigned buf_len, unsigned *nbytes, | |||
| 148 | uint8_t *p; | 165 | uint8_t *p; |
| 149 | mpi_limb_t alimb; | 166 | mpi_limb_t alimb; |
| 150 | unsigned int n = mpi_get_size(a); | 167 | unsigned int n = mpi_get_size(a); |
| 151 | int i, lzeros = 0; | 168 | int i, lzeros; |
| 152 | 169 | ||
| 153 | if (!buf || !nbytes) | 170 | if (!buf || !nbytes) |
| 154 | return -EINVAL; | 171 | return -EINVAL; |
| @@ -156,14 +173,7 @@ int mpi_read_buffer(MPI a, uint8_t *buf, unsigned buf_len, unsigned *nbytes, | |||
| 156 | if (sign) | 173 | if (sign) |
| 157 | *sign = a->sign; | 174 | *sign = a->sign; |
| 158 | 175 | ||
| 159 | p = (void *)&a->d[a->nlimbs] - 1; | 176 | lzeros = count_lzeros(a); |
| 160 | |||
| 161 | for (i = a->nlimbs * sizeof(alimb) - 1; i >= 0; i--, p--) { | ||
| 162 | if (!*p) | ||
| 163 | lzeros++; | ||
| 164 | else | ||
| 165 | break; | ||
| 166 | } | ||
| 167 | 177 | ||
| 168 | if (buf_len < n - lzeros) { | 178 | if (buf_len < n - lzeros) { |
| 169 | *nbytes = n - lzeros; | 179 | *nbytes = n - lzeros; |
| @@ -351,7 +361,7 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes, | |||
| 351 | u8 *p, *p2; | 361 | u8 *p, *p2; |
| 352 | mpi_limb_t alimb, alimb2; | 362 | mpi_limb_t alimb, alimb2; |
| 353 | unsigned int n = mpi_get_size(a); | 363 | unsigned int n = mpi_get_size(a); |
| 354 | int i, x, y = 0, lzeros = 0, buf_len; | 364 | int i, x, y = 0, lzeros, buf_len; |
| 355 | 365 | ||
| 356 | if (!nbytes) | 366 | if (!nbytes) |
| 357 | return -EINVAL; | 367 | return -EINVAL; |
| @@ -359,14 +369,7 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes, | |||
| 359 | if (sign) | 369 | if (sign) |
| 360 | *sign = a->sign; | 370 | *sign = a->sign; |
| 361 | 371 | ||
| 362 | p = (void *)&a->d[a->nlimbs] - 1; | 372 | lzeros = count_lzeros(a); |
| 363 | |||
| 364 | for (i = a->nlimbs * sizeof(alimb) - 1; i >= 0; i--, p--) { | ||
| 365 | if (!*p) | ||
| 366 | lzeros++; | ||
| 367 | else | ||
| 368 | break; | ||
| 369 | } | ||
| 370 | 373 | ||
| 371 | if (*nbytes < n - lzeros) { | 374 | if (*nbytes < n - lzeros) { |
| 372 | *nbytes = n - lzeros; | 375 | *nbytes = n - lzeros; |
