M4RI 1.0.1
Todo List

Global _mzd_addmul_even (mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff)
make sure not to overwrite crap after ncols and before width * m4ri_radix

Global _mzd_combine8 (word *c, word const *t1, word const *t2, word const *t3, word const *t4, word const *t5, word const *t6, word const *t7, word const *t8, wi_t wide_in)
the non SSE2 version of this code is slow, replace by code from mzd_process_rows8

Global _mzd_mul_even (mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff)
ideally we would use the same Wmk throughout the function but some called function doesn't like that and we end up with a wrong result if we use virtual Wmk matrices. Ideally, this should be fixed not worked around. The check whether the bug has been fixed, use only one Wmk and check if mzd_mul(4096, 3528, 4096, 2124) still returns the correct answer.

Global m4ri_coin_flip ()
Allow user to provide her own random() function.

Global m4ri_die (const char *errormessage,...)
Allow user to register callback which is called on m4ri_die().

Global m4ri_mm_calloc (size_t count, size_t size)
Allow user to register calloc function.

Global m4ri_mm_free (void *condemned,...)
Allow user to register free function.

Global m4ri_mm_malloc (size_t size)
Allow user to register malloc function.

Global m4ri_random_word ()
Allow user to provide her own random() function.

Global mzd_combine (mzd_t *DST, rci_t const row3, wi_t const startblock3, mzd_t const *SC1, rci_t const row1, wi_t const startblock1, mzd_t const *SC2, rci_t const row2, wi_t const startblock2)
respect ncols at the end

Global mzd_randomize (mzd_t *M)
Allow the user to provide a RNG callback.

File xor.h
start counting at 0!