24 {
29 mp_size_t n = 1 + (2 * na >= 3 * nb ? (na - 1) / 3 : (nb - 1) >> 1), s = na - 2 * n, t = nb - n;
30 int vm1_neg;
33
34#define a0 numa
35#define a1 (numa + n)
36#define a2 (numa + 2 * n)
37#define b0 numb
38#define b1 (numb + n)
39
40#define bm1 (dst)
41#define bp1 (dst + n)
42#define ap1 (dst + 2 * n + 1)
43#define am1 (dst + 3 * n + 2)
44#define v1 (tp)
45#define vm1 (tp + 2 * n + 1)
46#define r0 (dst)
47#define r1 (dst + n)
48#define r2 (dst + 2 * n)
49#define r3 (dst + 3 * n)
50
51
55 hi = 0;
56 vm1_neg = 1;
57 } else {
59 hi =
ap1[n] - (cy & 1);
61 vm1_neg = 0;
62 }
63
64
65 if (t == n) {
68 vm1_neg ^= 1;
69 } else {
71 }
72 } else {
76 vm1_neg ^= 1;
77 } else {
80 }
82 }
83
84
86
87
89 if (hi)
92
93
94
96 if (s > t)
98 else
100
101
102
103 if (vm1_neg) {
106 } else {
109 }
110
111
112
115
116
121}
#define lmmp_zero(dst, n)
#define lmmp_param_assert(x)
static mp_limb_t lmmp_add_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
大数加法静态内联函数 [dst,na]=[numa,na]+[numb,nb]
mp_limb_t lmmp_shr1add_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
加法后右移1位 [dst,n] = ([numa,n] + [numb,n]) >> 1
static int lmmp_cmp_(mp_srcptr numa, mp_srcptr numb, mp_size_t n)
大数比较函数(内联)
static mp_limb_t lmmp_add_1_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_limb_t x)
大数加单精度数静态内联函数 [dst,na]=[numa,na]+x
void lmmp_mul_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
不等长大数乘法操作 [dst,na+nb] = [numa,na] * [numb,nb]
void lmmp_mul_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
等长大数乘法操作 [dst,2*n] = [numa,n] * [numb,n]
static mp_limb_t lmmp_sub_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
大数减法静态内联函数 [dst,na]=[numa,na]-[numb,nb]
mp_limb_t lmmp_add_n_sub_n_(mp_ptr dsta, mp_ptr dstb, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
同时执行n位加法和减法 ([dsta,n],[dstb,n]) = ([numa,n]+[numb,n],[numa,n]-[numb,n])
static mp_limb_t lmmp_sub_1_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_limb_t x)
大数减单精度数静态内联函数 [dst,na]=[numa,na]-x
mp_limb_t lmmp_sub_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
无借位的n位减法 [dst,n] = [numa,n] - [numb,n]
mp_limb_t lmmp_shr1sub_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
减法后右移1位 [dst,n] = ([numa,n] - [numb,n]) >> 1
#define lmmp_inc_1(p, inc)
大数加指定值宏(预期无进位)
mp_limb_t lmmp_add_n_(mp_ptr dst, mp_srcptr numa, mp_srcptr numb, mp_size_t n)
无进位的n位加法 [dst,n] = [numa,n] + [numb,n]
static int lmmp_zero_q_(mp_srcptr p, mp_size_t n)
大数判零函数(内联)
#define SALLOC_TYPE(n, type)