diff options
Diffstat (limited to 'lib/mpi/mpi-internal.h')
| -rw-r--r-- | lib/mpi/mpi-internal.h | 75 |
1 files changed, 5 insertions, 70 deletions
diff --git a/lib/mpi/mpi-internal.h b/lib/mpi/mpi-internal.h index 7eceeddb3fb8..c2d6f4efcfbc 100644 --- a/lib/mpi/mpi-internal.h +++ b/lib/mpi/mpi-internal.h | |||
| @@ -65,13 +65,6 @@ | |||
| 65 | typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ | 65 | typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ |
| 66 | typedef int mpi_size_t; /* (must be a signed type) */ | 66 | typedef int mpi_size_t; /* (must be a signed type) */ |
| 67 | 67 | ||
| 68 | static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) | ||
| 69 | { | ||
| 70 | if (a->alloced < b) | ||
| 71 | return mpi_resize(a, b); | ||
| 72 | return 0; | ||
| 73 | } | ||
| 74 | |||
| 75 | /* Copy N limbs from S to D. */ | 68 | /* Copy N limbs from S to D. */ |
| 76 | #define MPN_COPY(d, s, n) \ | 69 | #define MPN_COPY(d, s, n) \ |
| 77 | do { \ | 70 | do { \ |
| @@ -80,13 +73,6 @@ static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) | |||
| 80 | (d)[_i] = (s)[_i]; \ | 73 | (d)[_i] = (s)[_i]; \ |
| 81 | } while (0) | 74 | } while (0) |
| 82 | 75 | ||
| 83 | #define MPN_COPY_INCR(d, s, n) \ | ||
| 84 | do { \ | ||
| 85 | mpi_size_t _i; \ | ||
| 86 | for (_i = 0; _i < (n); _i++) \ | ||
| 87 | (d)[_i] = (s)[_i]; \ | ||
| 88 | } while (0) | ||
| 89 | |||
| 90 | #define MPN_COPY_DECR(d, s, n) \ | 76 | #define MPN_COPY_DECR(d, s, n) \ |
| 91 | do { \ | 77 | do { \ |
| 92 | mpi_size_t _i; \ | 78 | mpi_size_t _i; \ |
| @@ -111,15 +97,6 @@ static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) | |||
| 111 | } \ | 97 | } \ |
| 112 | } while (0) | 98 | } while (0) |
| 113 | 99 | ||
| 114 | #define MPN_NORMALIZE_NOT_ZERO(d, n) \ | ||
| 115 | do { \ | ||
| 116 | for (;;) { \ | ||
| 117 | if ((d)[(n)-1]) \ | ||
| 118 | break; \ | ||
| 119 | (n)--; \ | ||
| 120 | } \ | ||
| 121 | } while (0) | ||
| 122 | |||
| 123 | #define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ | 100 | #define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ |
| 124 | do { \ | 101 | do { \ |
| 125 | if ((size) < KARATSUBA_THRESHOLD) \ | 102 | if ((size) < KARATSUBA_THRESHOLD) \ |
| @@ -128,46 +105,11 @@ static inline int RESIZE_IF_NEEDED(MPI a, unsigned b) | |||
| 128 | mul_n(prodp, up, vp, size, tspace); \ | 105 | mul_n(prodp, up, vp, size, tspace); \ |
| 129 | } while (0); | 106 | } while (0); |
| 130 | 107 | ||
| 131 | /* Divide the two-limb number in (NH,,NL) by D, with DI being the largest | ||
| 132 | * limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB). | ||
| 133 | * If this would yield overflow, DI should be the largest possible number | ||
| 134 | * (i.e., only ones). For correct operation, the most significant bit of D | ||
| 135 | * has to be set. Put the quotient in Q and the remainder in R. | ||
| 136 | */ | ||
| 137 | #define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \ | ||
| 138 | do { \ | ||
| 139 | mpi_limb_t _q, _ql, _r; \ | ||
| 140 | mpi_limb_t _xh, _xl; \ | ||
| 141 | umul_ppmm(_q, _ql, (nh), (di)); \ | ||
| 142 | _q += (nh); /* DI is 2**BITS_PER_MPI_LIMB too small */ \ | ||
| 143 | umul_ppmm(_xh, _xl, _q, (d)); \ | ||
| 144 | sub_ddmmss(_xh, _r, (nh), (nl), _xh, _xl); \ | ||
| 145 | if (_xh) { \ | ||
| 146 | sub_ddmmss(_xh, _r, _xh, _r, 0, (d)); \ | ||
| 147 | _q++; \ | ||
| 148 | if (_xh) { \ | ||
| 149 | sub_ddmmss(_xh, _r, _xh, _r, 0, (d)); \ | ||
| 150 | _q++; \ | ||
| 151 | } \ | ||
| 152 | } \ | ||
| 153 | if (_r >= (d)) { \ | ||
| 154 | _r -= (d); \ | ||
| 155 | _q++; \ | ||
| 156 | } \ | ||
| 157 | (r) = _r; \ | ||
| 158 | (q) = _q; \ | ||
| 159 | } while (0) | ||
| 160 | |||
| 161 | /*-- mpiutil.c --*/ | 108 | /*-- mpiutil.c --*/ |
| 162 | mpi_ptr_t mpi_alloc_limb_space(unsigned nlimbs); | 109 | mpi_ptr_t mpi_alloc_limb_space(unsigned nlimbs); |
| 163 | void mpi_free_limb_space(mpi_ptr_t a); | 110 | void mpi_free_limb_space(mpi_ptr_t a); |
| 164 | void mpi_assign_limb_space(MPI a, mpi_ptr_t ap, unsigned nlimbs); | 111 | void mpi_assign_limb_space(MPI a, mpi_ptr_t ap, unsigned nlimbs); |
| 165 | 112 | ||
| 166 | /*-- mpi-bit.c --*/ | ||
| 167 | void mpi_rshift_limbs(MPI a, unsigned int count); | ||
| 168 | int mpi_lshift_limbs(MPI a, unsigned int count); | ||
| 169 | |||
| 170 | /*-- mpihelp-add.c --*/ | ||
| 171 | static inline mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 113 | 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); | 114 | 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, | 115 | mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| @@ -175,7 +117,6 @@ mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | |||
| 175 | static inline mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, | 117 | 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); | 118 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); |
| 177 | 119 | ||
| 178 | /*-- mpihelp-sub.c --*/ | ||
| 179 | static inline mpi_limb_t mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 120 | 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); | 121 | 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, | 122 | mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| @@ -183,10 +124,10 @@ mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | |||
| 183 | static inline mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, | 124 | 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); | 125 | mpi_ptr_t s2_ptr, mpi_size_t s2_size); |
| 185 | 126 | ||
| 186 | /*-- mpihelp-cmp.c --*/ | 127 | /*-- mpih-cmp.c --*/ |
| 187 | int mpihelp_cmp(mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size); | 128 | int mpihelp_cmp(mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size); |
| 188 | 129 | ||
| 189 | /*-- mpihelp-mul.c --*/ | 130 | /*-- mpih-mul.c --*/ |
| 190 | 131 | ||
| 191 | struct karatsuba_ctx { | 132 | struct karatsuba_ctx { |
| 192 | struct karatsuba_ctx *next; | 133 | struct karatsuba_ctx *next; |
| @@ -202,7 +143,6 @@ mpi_limb_t mpihelp_addmul_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | |||
| 202 | mpi_size_t s1_size, mpi_limb_t s2_limb); | 143 | mpi_size_t s1_size, mpi_limb_t s2_limb); |
| 203 | mpi_limb_t mpihelp_submul_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 144 | mpi_limb_t mpihelp_submul_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 204 | mpi_size_t s1_size, mpi_limb_t s2_limb); | 145 | mpi_size_t s1_size, mpi_limb_t s2_limb); |
| 205 | int mpihelp_mul_n(mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size); | ||
| 206 | int mpihelp_mul(mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, | 146 | int mpihelp_mul(mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, |
| 207 | mpi_ptr_t vp, mpi_size_t vsize, mpi_limb_t *_result); | 147 | mpi_ptr_t vp, mpi_size_t vsize, mpi_limb_t *_result); |
| 208 | void mpih_sqr_n_basecase(mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size); | 148 | void mpih_sqr_n_basecase(mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size); |
| @@ -214,21 +154,16 @@ int mpihelp_mul_karatsuba_case(mpi_ptr_t prodp, | |||
| 214 | mpi_ptr_t vp, mpi_size_t vsize, | 154 | mpi_ptr_t vp, mpi_size_t vsize, |
| 215 | struct karatsuba_ctx *ctx); | 155 | struct karatsuba_ctx *ctx); |
| 216 | 156 | ||
| 217 | /*-- mpihelp-mul_1.c (or xxx/cpu/ *.S) --*/ | 157 | /*-- generic_mpih-mul1.c --*/ |
| 218 | mpi_limb_t mpihelp_mul_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, | 158 | mpi_limb_t mpihelp_mul_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, |
| 219 | mpi_size_t s1_size, mpi_limb_t s2_limb); | 159 | mpi_size_t s1_size, mpi_limb_t s2_limb); |
| 220 | 160 | ||
| 221 | /*-- mpihelp-div.c --*/ | 161 | /*-- mpih-div.c --*/ |
| 222 | mpi_limb_t mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, | ||
| 223 | mpi_limb_t divisor_limb); | ||
| 224 | mpi_limb_t mpihelp_divrem(mpi_ptr_t qp, mpi_size_t qextra_limbs, | 162 | mpi_limb_t mpihelp_divrem(mpi_ptr_t qp, mpi_size_t qextra_limbs, |
| 225 | mpi_ptr_t np, mpi_size_t nsize, | 163 | mpi_ptr_t np, mpi_size_t nsize, |
| 226 | mpi_ptr_t dp, mpi_size_t dsize); | 164 | mpi_ptr_t dp, mpi_size_t dsize); |
| 227 | mpi_limb_t mpihelp_divmod_1(mpi_ptr_t quot_ptr, | ||
| 228 | mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, | ||
| 229 | mpi_limb_t divisor_limb); | ||
| 230 | 165 | ||
| 231 | /*-- mpihelp-shift.c --*/ | 166 | /*-- generic_mpih-[lr]shift.c --*/ |
| 232 | mpi_limb_t mpihelp_lshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, | 167 | mpi_limb_t mpihelp_lshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, |
| 233 | unsigned cnt); | 168 | unsigned cnt); |
| 234 | mpi_limb_t mpihelp_rshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, | 169 | mpi_limb_t mpihelp_rshift(mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, |
