91 {
95 if (n == 1) {
97 } else if (n == 2) {
99 } else if (n == 3) {
101 } else if (n == 4) {
103 } else if (n % 2 == 0) {
105
106#define k (tp)
107#define alo (numa)
108#define ahi (numa + halfn)
109#define xlo (dst)
110#define xhi (dst + halfn)
111#define xlo_sqr (tp + halfn)
112#define xlo_sqr_mul_ahi (tp + 2 * halfn)
113#define scratch (tp + 3 * halfn)
114
115
116
117
118
127 } else {
130
131#define k (tp)
132#define alo (numa)
133#define ahi (numa + halfn)
134#define xlo (dst)
135#define xhi (dst + halfn)
136#define xlo_sqr (tp + halfn)
137#define xlo_sqr_mul_ahi (tp + 2 * halfn)
138#define scratch (tp + 3 * halfn)
139
140
141
142
143
152 }
153}
void lmmp_binvert_n_dc_(mp_ptr restrict dst, mp_srcptr restrict numa, mp_size_t n, mp_ptr restrict tp)
static void binvert_mulhi_(mp_ptr dst, mp_srcptr xp, mp_srcptr ap, mp_size_t n, mp_ptr tp)
static void lmmp_sqrlo_n_(mp_ptr restrict dst, mp_srcptr restrict numa, mp_size_t n, mp_ptr restrict tp)
static void lmmp_mullo_n_(mp_ptr restrict dst, mp_srcptr restrict numa, mp_srcptr restrict numb, mp_size_t n, mp_ptr restrict tp)
#define lmmp_param_assert(x)
#define lmmp_inc(p)
大数加1宏(预期无进位)
void lmmp_not_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
大数按位取反操作 [dst,na] = ~[numa,na] (对每个limb执行按位非操作)
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]
ulong lmmp_binvert_ulong_(ulong a)
计算 a 在2^64下的逆元
void lmmp_binvert_2_(mp_ptr dst, mp_srcptr numa)
计算 [numa,2] 在B^2下的逆元
void lmmp_binvert_3_(mp_ptr dst, mp_srcptr numa)
计算 [numa,3] 在B^3下的逆元
void lmmp_binvert_4_(mp_ptr dst, mp_srcptr numa)
计算 [numa,4] 在B^4下的逆元