33 #include <m4ri/m4ri.h>
35 #define __M4RIE_1tF(X) ~((X)-1)
43 static inline word gf2x_mul(const word a, const word b, deg_t d) {
47 case 32: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(31)) >>31) & (b<<31);
48 case 31: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(30)) >>30) & (b<<30);
49 case 30: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(29)) >>29) & (b<<29);
50 case 29: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(28)) >>28) & (b<<28);
51 case 28: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(27)) >>27) & (b<<27);
52 case 27: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(26)) >>26) & (b<<26);
53 case 26: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(25)) >>25) & (b<<25);
54 case 25: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(24)) >>24) & (b<<24);
55 case 24: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(23)) >>23) & (b<<23);
56 case 23: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(22)) >>22) & (b<<22);
57 case 22: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(21)) >>21) & (b<<21);
58 case 21: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(20)) >>20) & (b<<20);
59 case 20: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(19)) >>19) & (b<<19);
60 case 19: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(18)) >>18) & (b<<18);
61 case 18: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(17)) >>17) & (b<<17);
62 case 17: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(16)) >>16) & (b<<16);
63 case 16: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(15)) >>15) & (b<<15);
64 case 15: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(14)) >>14) & (b<<14);
65 case 14: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(13)) >>13) & (b<<13);
66 case 13: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(12)) >>12) & (b<<12);
67 case 12: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(11)) >>11) & (b<<11);
68 case 11: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW(10)) >>10) & (b<<10);
69 case 10: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 9)) >> 9) & (b<< 9);
70 case 9: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 8)) >> 8) & (b<< 8);
71 case 8: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 7)) >> 7) & (b<< 7);
72 case 7: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 6)) >> 6) & (b<< 6);
73 case 6: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 5)) >> 5) & (b<< 5);
74 case 5: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 4)) >> 4) & (b<< 4);
75 case 4: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 3)) >> 3) & (b<< 3);
76 case 3: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 2)) >> 2) & (b<< 2);
77 case 2: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 1)) >> 1) & (b<< 1);
78 case 1: res ^=
__M4RIE_1tF((a & __M4RI_TWOPOW( 0)) >> 0) & (b<< 0);
81 m4ri_die(
"degree %d too big.\n",d);
93 if( (a & 0xffffffff00000000ULL) != 0) { degree += 32; a>>=32; }
94 if( (a & 0xffff0000ULL) != 0) { degree += 16; a>>=16; }
95 if( (a & 0xff00ULL) != 0) { degree += 8; a>>= 8; }
96 if( (a & 0xf0ULL) != 0) { degree += 4; a>>= 4; }
97 if( (a & 0xcULL) != 0) { degree += 2; a>>= 2; }
98 if( (a & 0x2ULL) != 0) { degree += 1; a>>= 1; }
112 res |= mask & __M4RI_TWOPOW(deg_a - deg_b);
113 a ^= mask & b<<(deg_a - deg_b);
140 res |= mask & __M4RI_TWOPOW(deg_a - deg_b);
141 a ^= mask & b<<(deg_a - deg_b);
165 tmp = x; x = lastx ^
gf2x_mul(quo, x, d); lastx = tmp;
166 tmp = y; y = lasty ^
gf2x_mul(quo, y, d); lasty = tmp;
171 #endif //M4RIE_GF2X_H
static deg_t gf2x_deg(word a)
deg(a) in .
Definition: gf2x.h:91
int deg_t
Definition: gf2x.h:37
static word gf2x_mod(word a, word b)
a mod b in .
Definition: gf2x.h:122
static word gf2x_div(word a, word b)
a / b in .
Definition: gf2x.h:106
#define __M4RIE_1tF(X)
Definition: gf2x.h:35
static word gf2x_invmod(word a, word b, const deg_t d)
a^(-1) % b with deg(a), deg(b) <= d.
Definition: gf2x.h:152
static word gf2x_divmod(word a, word b, word *rem)
a / b and a mod b in .
Definition: gf2x.h:134
static word gf2x_mul(const word a, const word b, deg_t d)
a*b in with deg(a) and deg(b) < d.
Definition: gf2x.h:43