clmul 0.8.0

Carry-less multiply for Rust, internally uses llvm or compiler intrinsics, with fallback if the CPU has no clmul instruction
Documentation


//transpose bits

// pub fn transpose64(a[u64;64]) {
// int j, k;
// m, t;
//
// for (j = 32, m = 0x00000000FFFFFFFF; j; j >>= 1, m ^= m << j) {
// for (k = 0; k < 64; k = ((k | j) + 1) & ~j) {
// t = (a[k] ^ (a[k | j] >> j)) & m;
// a[k] ^= t;
// a[k | j] ^= (t << j);
// }
// }
//}

// pub fn printbits(a[u64;64]) {
//
// for (i = 0; i < 64; i++) {
// for (j = 63; j >= 0; j--)
// //printf("%c", (a[i] >> j) & 1 ? '1' : '0');
// //printf("\n");
// }
// }

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_transpose() {
        let logo:[u64;64] = [
            0b0000000000000000000000000000000000000000000100000000000000000000,
            0b0000000000000000000000000000000000000000011100000000000000000000,
            0b0000000000000000000000000000000000000000111110000000000000000000,
            0b0000000000000000000000000000000000000001111111000000000000000000,
            0b0000000000000000000000000000000000000000111111100000000000000000,
            0b0000000000000000000000000000000000000000111111100000000000000000,
            0b0000000000000000000000000000000000000000011111110000000000000000,
            0b0000000000000000000000000000000000000000001111111000000000000000,
            0b0000000000000000000000000000000000000000001111111100000000000000,
            0b0000000000000000000000000000000010000000000111111100000000000000,
            0b0000000000000000000000000000000011100000000011111110000000000000,
            0b0000000000000000000000000000000111110000000001111111000000000000,
            0b0000000000000000000000000000001111111000000001111111100000000000,
            0b0000000000000000000000000000011111111100000000111111100000000000,
            0b0000000000000000000000000000001111111110000000011111110000000000,
            0b0000000000000000000000000000000011111111100000001111111000000000,
            0b0000000000000000000000000000000001111111110000001111111100000000,
            0b0000000000000000000000000000000000111111111000000111111100000000,
            0b0000000000000000000000000000000000011111111100000011111110000000,
            0b0000000000000000000000000000000000001111111110000001111111000000,
            0b0000000000000000000000000000000000000011111111100001111111100000,
            0b0000000000000000000000001100000000000001111111110000111111100000,
            0b0000000000000000000000001111000000000000111111111000011111110000,
            0b0000000000000000000000011111110000000000011111111100001111100000,
            0b0000000000000000000000011111111100000000001111111110001111000000,
            0b0000000000000000000000111111111111000000000011111111100110000000,
            0b0000000000000000000000011111111111110000000001111111110000000000,
            0b0000000000000000000000000111111111111100000000111111111000000000,
            0b0000000000000000000000000001111111111111100000011111110000000000,
            0b0000000000000000000000000000011111111111111000001111100000000000,
            0b0000000000000000000000000000000111111111111110000011000000000000,
            0b0000000000000000000000000000000001111111111111100000000000000000,
            0b0000000000000000000000000000000000001111111111111000000000000000,
            0b0000000000000000000000000000000000000011111111111100000000000000,
            0b0000000000000000000111000000000000000000111111111100000000000000,
            0b0000000000000000000111111110000000000000001111111000000000000000,
            0b0000000000000000000111111111111100000000000011111000000000000000,
            0b0000000000000000000111111111111111110000000000110000000000000000,
            0b0000000000000000001111111111111111111111100000000000000000000000,
            0b0000000000000000001111111111111111111111111111000000000000000000,
            0b0000000000000000000000011111111111111111111111100000000000000000,
            0b0000001111110000000000000001111111111111111111100000111111000000,
            0b0000001111110000000000000000000011111111111111100000111111000000,
            0b0000001111110000000000000000000000000111111111100000111111000000,
            0b0000001111110000000000000000000000000000001111000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000001111111111111111111111111111000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111110000000000000000000000000000000000000000111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
            0b0000001111111111111111111111111111111111111111111111111111000000,
        ];

        // let res=transpose


    }
}