LAMMP 4.2.0
Lamina High-Precision Arithmetic Library
载入中...
搜索中...
未找到
pow_1.c
浏览该文件的文档.
1/**
2 * Copyright (C) 2026 HJimmyK(Jericho Knox)
3 *
4 * This file is part of LAMMP.
5 *
6 * LAMMP is free software: you can redistribute it and/or modify it under
7 * the terms of the GNU Lesser General Public License (LGPL) as published
8 * by the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed WITHOUT ANY WARRANTY.
12 *
13 * See <https://www.gnu.org/licenses/>.
14 */
15
16#include "../../../include/lammp/impl/inlines.h"
17#include "../../../include/lammp/impl/mparam.h"
18#include "../../../include/lammp/impl/tmp_alloc.h"
19#include "../../../include/lammp/lmmpn.h"
20#include "../../../include/lammp/numth.h"
21
22
24 dst[0] = 1;
25 return 1;
26}
27
30 dst[exp / LIMB_BITS] = (1ull << (exp % LIMB_BITS));
31 rn = exp / LIMB_BITS + 1;
32 return rn;
33}
34
36 exp <<= 1;
38 dst[exp / LIMB_BITS] = (1ull << (exp % LIMB_BITS));
39 rn = exp / LIMB_BITS + 1;
40 return rn;
41}
42
44 exp *= 3;
46 dst[exp / LIMB_BITS] = (1ull << (exp % LIMB_BITS));
47 rn = exp / LIMB_BITS + 1;
48 return rn;
49}
50
53 static const mp_limb_t tab[32] = {
54 1, 3, 9, 27, 81, 243, 729, 2187,
55 6561, 19683, 59049, 177147, 531441, 1594323, 4782969, 14348907,
56 43046721, 129140163, 387420489, 1162261467, 3486784401, 10460353203, 31381059609, 94143178827,
57 282429536481,847288609443,2541865828329,7625597484987,22876792454961,68630377364883,205891132094649,617673396283947,
58 };
59
61 rn = 1;
62 sq[0] = 1;
63 int i = 12;
64 while ((exp & (0x1full << ((i--) * 5))) == 0);
65 for (++i; i >= 0; --i) {
66 mp_size_t p = (exp & (0x1full << (i * 5))) >> (i * 5);
67 dst[rn] = lmmp_mul_1_(dst, sq, rn, tab[p]);
68 ++rn;
69 rn -= (dst[rn - 1] == 0) ? 1 : 0;
70 if (i > 0) {
71 lmmp_sqr_(sq, dst, rn);
72 rn <<= 1;
73 rn -= (sq[rn - 1] == 0) ? 1 : 0;
74
75 lmmp_sqr_(dst, sq, rn);
76 rn <<= 1;
77 rn -= (dst[rn - 1] == 0) ? 1 : 0;
78
79 lmmp_sqr_(sq, dst, rn);
80 rn <<= 1;
81 rn -= (sq[rn - 1] == 0) ? 1 : 0;
82
83 lmmp_sqr_(dst, sq, rn);
84 rn <<= 1;
85 rn -= (dst[rn - 1] == 0) ? 1 : 0;
86
87 lmmp_sqr_(sq, dst, rn);
88 rn <<= 1;
89 rn -= (sq[rn - 1] == 0) ? 1 : 0;
90 }
91 }
93 return rn;
94}
95
96#define define_1_npow_1_(_n_) \
97 static mp_size_t lmmp_##_n_##pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp) { \
98 TEMP_DECL; \
99 static const mp_limb_t tab[16] = { \
100 1, \
101 (mp_limb_t)_n_, \
102 (mp_limb_t)_n_ * _n_, \
103 (mp_limb_t)_n_ * _n_ * _n_, \
104 (mp_limb_t)_n_ * _n_ * _n_ * _n_, \
105 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_, \
106 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
107 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
108 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
109 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
110 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
111 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
112 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
113 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
114 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_, \
115 (mp_limb_t)_n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_ * _n_}; \
116 \
117 mp_size_t sqn = (rn + 2) >> 1; \
118 mp_ptr restrict sq = TALLOC_TYPE(sqn, mp_limb_t); \
119 rn = 1; \
120 dst[0] = 1; \
121 int i = 15; \
122 while ((exp & (0xfull << ((i--) * 4))) == 0); \
123 for (++i; i >= 0; --i) { \
124 mp_size_t p = (exp & (0xfull << (i * 4))) >> (i * 4); \
125 dst[rn] = lmmp_mul_1_(dst, dst, rn, tab[p]); \
126 ++rn; \
127 rn -= (dst[rn - 1] == 0) ? 1 : 0; \
128 if (i > 0) { \
129 lmmp_sqr_(sq, dst, rn); \
130 rn <<= 1; \
131 rn -= (sq[rn - 1] == 0) ? 1 : 0; \
132 \
133 lmmp_sqr_(dst, sq, rn); \
134 rn <<= 1; \
135 rn -= (dst[rn - 1] == 0) ? 1 : 0; \
136 \
137 lmmp_sqr_(sq, dst, rn); \
138 rn <<= 1; \
139 rn -= (sq[rn - 1] == 0) ? 1 : 0; \
140 \
141 lmmp_sqr_(dst, sq, rn); \
142 rn <<= 1; \
143 rn -= (dst[rn - 1] == 0) ? 1 : 0; \
144 } \
145 } \
146 TEMP_FREE; \
147 return rn; \
148 }
149
155
158 lmmp_zero(dst, n);
159 rn = lmmp_3pow_1_(dst + n, rn - n, exp);
160 dst[n + rn] = lmmp_shl_(dst + n, dst + n, rn, exp % LIMB_BITS);
161 rn += n;
162 rn -= dst[rn - 1] == 0 ? 1 : 0;
163 return rn;
164}
165
167 TEMP_DECL;
168 mp_ptr restrict tp = TALLOC_TYPE((rn + 1) >> 1, mp_limb_t);
169 rn = lmmp_3pow_1_(tp, (rn + 1) >> 1, exp);
170 lmmp_sqr_(dst, tp, rn);
171 rn <<= 1;
172 rn -= dst[rn - 1] == 0 ? 1 : 0;
173 TEMP_FREE;
174 return rn;
175}
176
179 lmmp_zero(dst, n);
180 rn = lmmp_5pow_1_(dst + n, rn - n, exp);
181 dst[n + rn] = lmmp_shl_(dst + n, dst + n, rn, exp % LIMB_BITS);
182 rn += n + 1;
183 rn -= dst[rn - 1] == 0 ? 1 : 0;
184 return rn;
185}
186
188 mp_size_t n = (2 * exp) / LIMB_BITS;
189 lmmp_zero(dst, n);
190 lmmp_assert(rn > n);
191 rn = lmmp_3pow_1_(dst + n, rn - n, exp);
192 dst[n + rn] = lmmp_shl_(dst + n, dst + n, rn, (2 * exp) % LIMB_BITS);
193 rn += n + 1;
194 rn -= dst[rn - 1] == 0 ? 1 : 0;
195 return rn;
196}
197
200 lmmp_zero(dst, n);
201 rn = lmmp_7pow_1_(dst + n, rn - n, exp);
202 dst[n + rn] = lmmp_shl_(dst + n, dst + n, rn, exp % LIMB_BITS);
203 rn += n + 1;
204 rn -= dst[rn - 1] == 0 ? 1 : 0;
205 return rn;
206}
207
209 switch (base) {
210 case 1:
211 return lmmp_1pow_1_(dst);
212 case 2:
213 return lmmp_2pow_1_(dst, rn, exp);
214 case 3:
215 return lmmp_3pow_1_(dst, rn, exp);
216 case 4:
217 return lmmp_4pow_1_(dst, rn, exp);
218 case 5:
219 return lmmp_5pow_1_(dst, rn, exp);
220 case 6:
221 return lmmp_6pow_1_(dst, rn, exp);
222 case 7:
223 return lmmp_7pow_1_(dst, rn, exp);
224 case 8:
225 return lmmp_8pow_1_(dst, rn, exp);
226 case 9:
227 return lmmp_9pow_1_(dst, rn, exp);
228 case 10:
229 return lmmp_10pow_1_(dst, rn, exp);
230 case 11:
231 return lmmp_11pow_1_(dst, rn, exp);
232 case 12:
233 return lmmp_12pow_1_(dst, rn, exp);
234 case 13:
235 return lmmp_13pow_1_(dst, rn, exp);
236 case 14:
237 return lmmp_14pow_1_(dst, rn, exp);
238 case 15:
239 return lmmp_15pow_1_(dst, rn, exp);
240 default:
242 return 0;
243 }
244}
245
247 lmmp_param_assert(base >= 2);
249 TEMP_DECL;
250 mp_limb_t tab[8];
251 tab[0] = 1;
252 tab[1] = tab[0] * base;
253 tab[2] = tab[1] * base;
254 tab[3] = tab[2] * base;
255 tab[4] = tab[3] * base;
256 tab[5] = tab[4] * base;
257 tab[6] = tab[5] * base;
258 tab[7] = tab[6] * base;
259
261 sq[0] = 1;
262 rn = 1;
263 int i = 21;
264 while ((exp & (0x7ull << ((i--) * 3))) == 0);
265 for (++i; i >= 0; --i) {
266 mp_size_t p = (exp & (0x7ull << (i * 3))) >> (i * 3);
267 dst[rn] = lmmp_mul_1_(dst, sq, rn, tab[p]);
268 ++rn;
269 rn -= (dst[rn - 1] == 0) ? 1 : 0;
270 if (i > 0) {
271 lmmp_sqr_(sq, dst, rn);
272 rn <<= 1;
273 rn -= (sq[rn - 1] == 0) ? 1 : 0;
274 lmmp_sqr_(dst, sq, rn);
275 rn <<= 1;
276 rn -= (dst[rn - 1] == 0) ? 1 : 0;
277 lmmp_sqr_(sq, dst, rn);
278 rn <<= 1;
279 rn -= (sq[rn - 1] == 0) ? 1 : 0;
280 }
281 }
282 TEMP_FREE;
283 return rn;
284}
285
287 lmmp_param_assert(base >= 2);
289 TEMP_DECL;
290 mp_limb_t tab[8][2];
291 tab[0][0] = 1;
292 tab[0][1] = 0;
293 tab[1][0] = base;
294 tab[1][1] = 0;
295 tab[2][0] = tab[1][0] * base;
296 tab[2][1] = 0;
297 tab[3][0] = tab[2][0] * base;
298 tab[3][1] = 0;
299 lmmp_mullh_(tab[2][0], tab[2][0], tab[4]);
300 lmmp_mullh_(tab[3][0], tab[2][0], tab[5]);
301 lmmp_mullh_(tab[3][0], tab[3][0], tab[6]);
302 lmmp_mullh_(tab[3][0], tab[4][0], tab[7]);
303 tab[7][1] += tab[3][0] * tab[4][1];
304
306 rn = 1;
307 sq[0] = 1;
308 int i = 21;
309 while ((exp & (0x7ull << ((i--) * 3))) == 0);
310 for (++i; i >= 0; --i) {
311 mp_size_t p = (exp & (0x7ull << (i * 3))) >> (i * 3);
312 mp_srcptr tap = tab[p];
313 mp_size_t tan = (tap[1] != 0) ? 2 : 1;
314 if (rn >= tan)
316 else
318 rn += tan;
319 rn -= (dst[rn - 1] == 0) ? 1 : 0;
320
321 if (i > 0) {
322 lmmp_sqr_(sq, dst, rn);
323 rn <<= 1;
324 rn -= (sq[rn - 1] == 0) ? 1 : 0;
325 lmmp_sqr_(dst, sq, rn);
326 rn <<= 1;
327 rn -= (dst[rn - 1] == 0) ? 1 : 0;
328 lmmp_sqr_(sq, dst, rn);
329 rn <<= 1;
330 rn -= (sq[rn - 1] == 0) ? 1 : 0;
331 }
332 }
333 TEMP_FREE;
334 return rn;
335}
336
337#define mul_b(i) \
338 if (rn >= b##i##n) \
339 lmmp_mul_basecase_(dst, sq, rn, b##i, b##i##n); \
340 else \
341 lmmp_mul_basecase_(dst, b##i, b##i##n, sq, rn); \
342 rn += b##i##n; \
343 rn -= (dst[rn - 1] == 0) ? 1 : 0;
344
346 lmmp_param_assert(base >= 2);
348 TEMP_DECL;
349 mp_limb_t b1[1] = { base};
350#define b1n 1
351 mp_limb_t b2[1] = { base * base};
352#define b2n 1
353
354 mp_limb_t b3[2];
355#define b3n 2
356 lmmp_mullh_(b2[0], base, b3);
357
358 mp_limb_t b4[2];
359#define b4n 2
360 lmmp_mullh_(b2[0], b2[0], b4);
361
362 mp_limb_t b5[3];
363 b5[2] = lmmp_mul_1_(b5, b4, b4n, base);
364 mp_size_t b5n = b5[2] != 0 ? 3 : 2;
365
366 mp_limb_t b6[3];
368 mp_size_t b6n = b6[2] != 0 ? 3 : 2;
369
370 mp_limb_t b7[4];
371 b7[3] = lmmp_mul_1_(b7, b5, b5n, b2[0]);
372 mp_size_t b7n = 4;
373 while (b7[b7n - 1] == 0) --b7n;
374
376 sq[0] = 1;
377 rn = 1;
378 int i = 21;
379 while ((exp & (0x7ull << ((i--) * 3))) == 0);
380 for (++i; i >= 0; --i) {
381 mp_size_t p = (exp & (0x7ull << (i * 3))) >> (i * 3);
382 switch (p) {
383 case 0:
384 lmmp_copy(dst, sq, rn);
385 break;
386 case 1:
387 mul_b(1);
388 break;
389 case 2:
390 mul_b(2);
391 break;
392 case 3:
393 mul_b(3);
394 break;
395 case 4:
396 mul_b(4);
397 break;
398 case 5:
399 mul_b(5);
400 break;
401 case 6:
402 mul_b(6);
403 break;
404 case 7:
405 mul_b(7);
406 break;
407 }
408 if (i > 0) {
409 lmmp_sqr_(sq, dst, rn);
410 rn <<= 1;
411 rn -= (sq[rn - 1] == 0) ? 1 : 0;
412 lmmp_sqr_(dst, sq, rn);
413 rn <<= 1;
414 rn -= (dst[rn - 1] == 0) ? 1 : 0;
415 lmmp_sqr_(sq, dst, rn);
416 rn <<= 1;
417 rn -= (sq[rn - 1] == 0) ? 1 : 0;
418 }
419 }
420 TEMP_FREE;
421 return rn;
422#undef b1n
423#undef b2n
424#undef b3n
425#undef b4n
426}
427
430 TEMP_DECL;
431
432#define b1n 1
433 mp_limb_t b1[1] = { base};
434#define b2n 2
435 mp_limb_t b2[2];
436 lmmp_mullh_(base, base, b2);
437 mp_limb_t b3[3];
438 b3[2] = lmmp_mul_1_(b3, b2, b2n, base);
439 mp_size_t b3n = b3[2] != 0 ? 3 : 2;
440
441 mp_limb_t b4[4];
443 mp_size_t b4n = b4[3] != 0 ? 4 : 3;
444
445 mp_limb_t b5[5];
446 b5[b4n] = lmmp_mul_1_(b5, b4, b4n, base);
447 mp_size_t b5n = b4n + 1;
448 b5n -= (b5[b5n - 1] == 0) ? 1 : 0;
449
450 mp_limb_t b6[6];
452 mp_size_t b6n = 2 * b3n;
453 b6n -= (b6[b6n - 1] == 0) ? 1 : 0;
454
455 mp_limb_t b7[7];
456 b7[b6n] = lmmp_mul_1_(b7, b6, b6n, b1[0]);
457 mp_size_t b7n = b6n + 1;
458 b7n -= (b7[b7n - 1] == 0) ? 1 : 0;
459
461 sq[0] = 1;
462 rn = 1;
463 int i = 21;
464 while ((exp & (0x7ull << ((i--) * 3))) == 0);
465 for (++i; i >= 0; --i) {
466 mp_size_t p = (exp & (0x7ull << (i * 3))) >> (i * 3);
467 switch (p) {
468 case 0:
469 lmmp_copy(dst, sq, rn);
470 break;
471 case 1:
472 mul_b(1);
473 break;
474 case 2:
475 mul_b(2);
476 break;
477 case 3:
478 mul_b(3);
479 break;
480 case 4:
481 mul_b(4);
482 break;
483 case 5:
484 mul_b(5);
485 break;
486 case 6:
487 mul_b(6);
488 break;
489 case 7:
490 mul_b(7);
491 break;
492 }
493
494 if (i > 0) {
495 lmmp_sqr_(sq, dst, rn);
496 rn <<= 1;
497 rn -= (sq[rn - 1] == 0) ? 1 : 0;
498 lmmp_sqr_(dst, sq, rn);
499 rn <<= 1;
500 rn -= (dst[rn - 1] == 0) ? 1 : 0;
501 lmmp_sqr_(sq, dst, rn);
502 rn <<= 1;
503 rn -= (sq[rn - 1] == 0) ? 1 : 0;
504 }
505 }
506 TEMP_FREE;
507 return rn;
508#undef b1n
509#undef b2n
510#undef mul_b
511}
512
513/*
514 * base ^ exp
515 *
516 * - base <= 15 : 4-bit lmmp_u4_pow_1_
517 * - base <= 255 : 8-bit lmmp_u8_pow_1_
518 * - base <= 65535 : 16-bit lmmp_u16_pow_1_
519 * - base <= 2^32-1 : 32-bit lmmp_u32_pow_1_
520 * - base <= 2^64-1 : 64-bit lmmp_u64_pow_1_
521 */
522
524 lmmp_param_assert(base > 1);
526 if (base <= (mp_limb_t)0xf) {
527 return lmmp_u4_pow_1_(dst, rn, base, exp);
528 } else {
529 int tz = lmmp_tailing_zeros_(base);
530 base >>= tz;
531 mp_size_t shw = (exp * tz) / LIMB_BITS;
532 mp_size_t shl = (exp * tz) % LIMB_BITS;
533
535 lmmp_zero(dst, shw);
536 if (base <= (mp_limb_t)0xf)
537 rn = lmmp_u4_pow_1_(dst + shw, rn - shw, base, exp);
538 else if (base <= (mp_limb_t)MP_UCHAR_MAX)
539 rn = lmmp_u8_pow_1_(dst + shw, rn - shw, base, exp);
540 else if (base <= (mp_limb_t)MP_USHORT_MAX)
541 rn = lmmp_u16_pow_1_(dst + shw, rn - shw, base, exp);
542 else if (base <= (mp_limb_t)MP_UINT_MAX)
543 rn = lmmp_u32_pow_1_(dst + shw, rn - shw, base, exp);
544 else
545 rn = lmmp_u64_pow_1_(dst + shw, rn - shw, base, exp);
546
547 if (shl) {
548 dst[shw + rn] = lmmp_shl_(dst + shw, dst + shw, rn, shl);
549 rn += shw + 1;
550 rn -= (dst[rn - 1] == 0) ? 1 : 0;
551 } else {
552 rn += shw;
553 }
554 return rn;
555 }
556}
#define lmmp_mullh_
Definition inlines.h:164
#define lmmp_sqr_
Definition inlines.h:166
#define lmmp_tailing_zeros_
Definition inlines.h:161
#define tab(i)
Definition lglg.h:28
mp_limb_t * mp_ptr
Definition lmmp.h:80
#define lmmp_copy(dst, src, n)
Definition lmmp.h:367
#define lmmp_zero(dst, n)
Definition lmmp.h:369
uint64_t mp_size_t
Definition lmmp.h:77
const mp_limb_t * mp_srcptr
Definition lmmp.h:81
uint64_t mp_limb_t
Definition lmmp.h:76
#define lmmp_assert(x)
Definition lmmp.h:373
#define LIMB_BITS
Definition lmmp.h:86
#define lmmp_param_assert(x)
Definition lmmp.h:401
void lmmp_sqr_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
基础平方运算 [dst,2*na] = [numa,na]^2
void lmmp_mul_basecase_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
基础乘法运算 [dst,na+nb] = [numa,na] * [numb,nb]
mp_limb_t lmmp_shl_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_size_t shl)
大数左移操作 [dst,na] = [numa,na]<<shl,dst的低shl位填充0
Definition shl.c:19
mp_limb_t lmmp_mul_1_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_limb_t x)
大数乘以单limb操作 [dst,na] = [numa,na] * x
#define MP_UINT_MAX
Definition mparam.h:136
#define MP_UCHAR_MAX
Definition mparam.h:134
#define MP_USHORT_MAX
Definition mparam.h:135
#define b1
#define b2
#define tp
#define n
#define b3
uint64_t ulong
Definition numth.h:32
static mp_size_t lmmp_8pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:43
static mp_size_t lmmp_11pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:152
static mp_size_t lmmp_4pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:35
#define b2n
static mp_size_t lmmp_5pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:150
static mp_size_t lmmp_9pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:166
static mp_size_t lmmp_7pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:151
static mp_size_t lmmp_14pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:198
static mp_size_t lmmp_13pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:153
static mp_size_t lmmp_2pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:28
mp_size_t lmmp_u4_pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong base, ulong exp)
Definition pow_1.c:208
static mp_size_t lmmp_6pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:156
mp_size_t lmmp_u64_pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong base, ulong exp)
Definition pow_1.c:428
#define mul_b(i)
Definition pow_1.c:337
#define define_1_npow_1_(_n_)
Definition pow_1.c:96
static mp_size_t lmmp_3pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:51
static mp_size_t lmmp_10pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:177
#define b4n
static mp_size_t lmmp_15pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:154
mp_size_t lmmp_u16_pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong base, ulong exp)
Definition pow_1.c:286
mp_size_t lmmp_u8_pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong base, ulong exp)
Definition pow_1.c:246
mp_size_t lmmp_pow_1_(mp_ptr restrict dst, mp_size_t rn, mp_limb_t base, ulong exp)
Definition pow_1.c:523
#define b3n
static mp_size_t lmmp_12pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong exp)
Definition pow_1.c:187
static mp_size_t lmmp_1pow_1_(mp_ptr restrict dst)
Copyright (C) 2026 HJimmyK(Jericho Knox)
Definition pow_1.c:23
mp_size_t lmmp_u32_pow_1_(mp_ptr restrict dst, mp_size_t rn, ulong base, ulong exp)
Definition pow_1.c:345
#define TEMP_DECL
Definition tmp_alloc.h:131
#define TEMP_FREE
Definition tmp_alloc.h:150
#define TALLOC_TYPE(n, type)
Definition tmp_alloc.h:148