2021-08-08 04:08:33 +00:00
|
|
|
#ifndef CONSTANTS_H
|
|
|
|
#define CONSTANTS_H
|
2021-08-12 07:42:14 +00:00
|
|
|
#include "third_party/python/Modules/_decimal/libmpdec/mpdecimal.h"
|
|
|
|
/* clang-format off */
|
2021-08-08 04:08:33 +00:00
|
|
|
|
2021-09-28 05:58:51 +00:00
|
|
|
#define MULMOD(a, b) x64_mulmod(a, b, umod)
|
|
|
|
#define MULMOD2C(a0, a1, w) x64_mulmod2c(a0, a1, w, umod)
|
|
|
|
#define MULMOD2(a0, b0, a1, b1) x64_mulmod2(a0, b0, a1, b1, umod)
|
|
|
|
#define POWMOD(base, exp) x64_powmod(base, exp, umod)
|
|
|
|
#define SETMODULUS(modnum) std_setmodulus(modnum, &umod)
|
|
|
|
#define SIZE3_NTT(x0, x1, x2, w3table) std_size3_ntt(x0, x1, x2, w3table, umod)
|
2021-08-08 04:08:33 +00:00
|
|
|
|
|
|
|
/* PentiumPro (or later) gcc inline asm */
|
|
|
|
extern const float MPD_TWO63;
|
|
|
|
extern const uint32_t mpd_invmoduli[3][3];
|
|
|
|
|
|
|
|
enum {P1, P2, P3};
|
|
|
|
|
|
|
|
extern const mpd_uint_t mpd_moduli[];
|
|
|
|
extern const mpd_uint_t mpd_roots[];
|
|
|
|
extern const mpd_size_t mpd_bits[];
|
|
|
|
extern const mpd_uint_t mpd_pow10[];
|
|
|
|
|
|
|
|
extern const mpd_uint_t INV_P1_MOD_P2;
|
|
|
|
extern const mpd_uint_t INV_P1P2_MOD_P3;
|
|
|
|
extern const mpd_uint_t LH_P1P2;
|
|
|
|
extern const mpd_uint_t UH_P1P2;
|
|
|
|
|
|
|
|
#endif /* CONSTANTS_H */
|