4   assert(1 <= N && N <= 8);
 
   15   case 8: T[7] = table[7]->T; E[7] = table[7]->E; B[7] = table[7]->B; bm[7] = 
__M4RI_LEFT_BITMASK(k[7]); sh[7] = k[0] + k[1] + k[2] + k[3] + k[4] + k[5] + k[6];
 
   16   case 7: T[6] = table[6]->T; E[6] = table[6]->E; B[6] = table[6]->B; bm[6] = 
__M4RI_LEFT_BITMASK(k[6]); sh[6] = k[0] + k[1] + k[2] + k[3] + k[4] + k[5];
 
   17   case 6: T[5] = table[5]->T; E[5] = table[5]->E; B[5] = table[5]->B; bm[5] = 
__M4RI_LEFT_BITMASK(k[5]); sh[5] = k[0] + k[1] + k[2] + k[3] + k[4];
 
   18   case 5: T[4] = table[4]->T; E[4] = table[4]->E; B[4] = table[4]->B; bm[4] = 
__M4RI_LEFT_BITMASK(k[4]); sh[4] = k[0] + k[1] + k[2] + k[3];
 
   19   case 4: T[3] = table[3]->T; E[3] = table[3]->E; B[3] = table[3]->B; bm[3] = 
__M4RI_LEFT_BITMASK(k[3]); sh[3] = k[0] + k[1] + k[2];
 
   20   case 3: T[2] = table[2]->T; E[2] = table[2]->E; B[2] = table[2]->B; bm[2] = 
__M4RI_LEFT_BITMASK(k[2]); sh[2] = k[0] + k[1];
 
   21   case 2: T[1] = table[1]->T; E[1] = table[1]->E; B[1] = table[1]->B; bm[1] = 
__M4RI_LEFT_BITMASK(k[1]); sh[1] = k[0];
 
   22   case 1: T[0] = table[0]->T; E[0] = table[0]->E; B[0] = table[0]->B; bm[0] = 
__M4RI_LEFT_BITMASK(k[0]); sh[0] = 0;
 
   26   wi_t const wide = M->width - block;
 
   28   for(
rci_t r = startrow; r < stoprow; ++r) {
 
   30     word   *m = M->rows[r] + block;
 
   33     case 8:   x[ N-8 ] = E[ N-8 ][ (bits>> sh[ N-8 ]) & bm[ N-8 ] ];  bits ^= B[ N-8 ][x[ N-8 ]];  t[ N-8 ] = T[ N-8 ]->
rows[x[ N-8 ]] + block;
 
   34     case 7:   x[ N-7 ] = E[ N-7 ][ (bits>> sh[ N-7 ]) & bm[ N-7 ] ];  bits ^= B[ N-7 ][x[ N-7 ]];  t[ N-7 ] = T[ N-7 ]->
rows[x[ N-7 ]] + block;
 
   35     case 6:   x[ N-6 ] = E[ N-6 ][ (bits>> sh[ N-6 ]) & bm[ N-6 ] ];  bits ^= B[ N-6 ][x[ N-6 ]];  t[ N-6 ] = T[ N-6 ]->
rows[x[ N-6 ]] + block;
 
   36     case 5:   x[ N-5 ] = E[ N-5 ][ (bits>> sh[ N-5 ]) & bm[ N-5 ] ];  bits ^= B[ N-5 ][x[ N-5 ]];  t[ N-5 ] = T[ N-5 ]->
rows[x[ N-5 ]] + block;
 
   37     case 4:   x[ N-4 ] = E[ N-4 ][ (bits>> sh[ N-4 ]) & bm[ N-4 ] ];  bits ^= B[ N-4 ][x[ N-4 ]];  t[ N-4 ] = T[ N-4 ]->
rows[x[ N-4 ]] + block;
 
   38     case 3:   x[ N-3 ] = E[ N-3 ][ (bits>> sh[ N-3 ]) & bm[ N-3 ] ];  bits ^= B[ N-3 ][x[ N-3 ]];  t[ N-3 ] = T[ N-3 ]->
rows[x[ N-3 ]] + block;
 
   39     case 2:   x[ N-2 ] = E[ N-2 ][ (bits>> sh[ N-2 ]) & bm[ N-2 ] ];  bits ^= B[ N-2 ][x[ N-2 ]];  t[ N-2 ] = T[ N-2 ]->
rows[x[ N-2 ]] + block;
 
   40     case 1:   x[ N-1 ] = E[ N-1 ][ (bits>> sh[ N-1 ]) & bm[ N-1 ] ];  bits ^= B[ N-1 ][x[ N-1 ]];  t[ N-1 ] = T[ N-1 ]->
rows[x[ N-1 ]] + block;
 
   43     __M4RI_TEMPLATE_NAME(_mzd_combine)(m, t, wide);
 
   49 void __M4RI_TEMPLATE_NAME(_mzd_ple_a11)(
mzd_t *A,
 
   53   wi_t const wide = A->width - block;
 
   66   case 8: T[7] = table[7]->T; M[7] = table[7]->M; bm[7] = 
__M4RI_LEFT_BITMASK(k[7]); sh[7] = k[0] + k[1] + k[2] + k[3] + k[4] + k[5] + k[6];
 
   67   case 7: T[6] = table[6]->T; M[6] = table[6]->M; bm[6] = 
__M4RI_LEFT_BITMASK(k[6]); sh[6] = k[0] + k[1] + k[2] + k[3] + k[4] + k[5];
 
   68   case 6: T[5] = table[5]->T; M[5] = table[5]->M; bm[5] = 
__M4RI_LEFT_BITMASK(k[5]); sh[5] = k[0] + k[1] + k[2] + k[3] + k[4];
 
   69   case 5: T[4] = table[4]->T; M[4] = table[4]->M; bm[4] = 
__M4RI_LEFT_BITMASK(k[4]); sh[4] = k[0] + k[1] + k[2] + k[3];
 
   70   case 4: T[3] = table[3]->T; M[3] = table[3]->M; bm[3] = 
__M4RI_LEFT_BITMASK(k[3]); sh[3] = k[0] + k[1] + k[2];
 
   71   case 3: T[2] = table[2]->T; M[2] = table[2]->M; bm[2] = 
__M4RI_LEFT_BITMASK(k[2]); sh[2] = k[0] + k[1];
 
   72   case 2: T[1] = table[1]->T; M[1] = table[1]->M; bm[1] = 
__M4RI_LEFT_BITMASK(k[1]); sh[1] = k[0];
 
   73   case 1: T[0] = table[0]->T; M[0] = table[0]->M; bm[0] = 
__M4RI_LEFT_BITMASK(k[0]); sh[0] = 0;
 
   76   const rci_t bits_to_read = sh[N-1] + k[N-1];
 
   78   for(
rci_t i = start_row; i < stop_row; ++i) {
 
   80     word *m = A->rows[i] + block;
 
   83     case 8:   x[ N-8 ] = M[ N-8 ][ (bits>> sh[ N-8 ]) & bm[ N-8 ] ]; t[ N-8 ] = T[ N-8 ]->
rows[ x[ N-8 ] ] + block;
 
   84     case 7:   x[ N-7 ] = M[ N-7 ][ (bits>> sh[ N-7 ]) & bm[ N-7 ] ]; t[ N-7 ] = T[ N-7 ]->
rows[ x[ N-7 ] ] + block;
 
   85     case 6:   x[ N-6 ] = M[ N-6 ][ (bits>> sh[ N-6 ]) & bm[ N-6 ] ]; t[ N-6 ] = T[ N-6 ]->
rows[ x[ N-6 ] ] + block;
 
   86     case 5:   x[ N-5 ] = M[ N-5 ][ (bits>> sh[ N-5 ]) & bm[ N-5 ] ]; t[ N-5 ] = T[ N-5 ]->
rows[ x[ N-5 ] ] + block;
 
   87     case 4:   x[ N-4 ] = M[ N-4 ][ (bits>> sh[ N-4 ]) & bm[ N-4 ] ]; t[ N-4 ] = T[ N-4 ]->
rows[ x[ N-4 ] ] + block;
 
   88     case 3:   x[ N-3 ] = M[ N-3 ][ (bits>> sh[ N-3 ]) & bm[ N-3 ] ]; t[ N-3 ] = T[ N-3 ]->
rows[ x[ N-3 ] ] + block;
 
   89     case 2:   x[ N-2 ] = M[ N-2 ][ (bits>> sh[ N-2 ]) & bm[ N-2 ] ]; t[ N-2 ] = T[ N-2 ]->
rows[ x[ N-2 ] ] + block;
 
   90     case 1:   x[ N-1 ] = M[ N-1 ][ (bits>> sh[ N-1 ]) & bm[ N-1 ] ]; t[ N-1 ] = T[ N-1 ]->
rows[ x[ N-1 ] ] + block;
 
   92     __M4RI_TEMPLATE_NAME(_mzd_combine)(m, t, wide);
 
static word mzd_read_bits(mzd_t const *M, rci_t const x, rci_t const y, int const n)
Definition: mzd.h:1002
 
static int const m4ri_radix
The number of bits in a word. 
Definition: misc.h:141
 
Dense matrices over GF(2). 
Definition: mzd.h:86
 
int rci_t
Type of row and column indexes. 
Definition: misc.h:72
 
PLE Elimination Tables. 
Definition: ple_russian.h:39
 
word ** rows
Definition: mzd.h:138
 
#define __M4RI_LEFT_BITMASK(n)
create a bit mask to zero out all but the (n - 1) % m4ri_radix + 1 leftmost bits. ...
Definition: misc.h:271
 
uint64_t word
A word is the typical packed data structure to represent packed bits. 
Definition: misc.h:87
 
int wi_t
Type of word indexes. 
Definition: misc.h:80