M4RI
1.0.1
|
Compute the parity of 64 words in parallel. More...
#include "misc.h"
Go to the source code of this file.
Defines | |
#define | __M4RI_MIX32(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
#define | __M4RI_MIX16(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
#define | __M4RI_MIX8(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
#define | __M4RI_MIX4(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
#define | __M4RI_MIX2(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
#define | __M4RI_MIX1(a, b) |
Step for mixing two 64-bit words to compute their parity. | |
Functions | |
static word | m4ri_parity64_helper (word *buf) |
See parity64. | |
static word | m4ri_parity64 (word *buf) |
Computes parity of each of buf[0], buf[1], ..., buf[63]. Returns single word whose bits are the parities of buf[0], ..., buf[63]. |
Compute the parity of 64 words in parallel.
#define __M4RI_MIX1 | ( | a, | |
b | |||
) |
(((((a) << 1) ^ (a)) & __M4RI_CONVERT_TO_WORD(0xAAAAAAAAAAAAAAAAull)) | \ ((((b) >> 1) ^ (b)) & __M4RI_CONVERT_TO_WORD(0x5555555555555555ull)));
Step for mixing two 64-bit words to compute their parity.
#define __M4RI_MIX16 | ( | a, | |
b | |||
) |
(((((a) << 16) ^ (a)) & __M4RI_CONVERT_TO_WORD(0xFFFF0000FFFF0000ull)) | \ ((((b) >> 16) ^ (b)) & __M4RI_CONVERT_TO_WORD(0x0000FFFF0000FFFFull)));
Step for mixing two 64-bit words to compute their parity.
#define __M4RI_MIX2 | ( | a, | |
b | |||
) |
(((((a) << 2) ^ (a)) & __M4RI_CONVERT_TO_WORD(0xCCCCCCCCCCCCCCCCull)) | \ ((((b) >> 2) ^ (b)) & __M4RI_CONVERT_TO_WORD(0x3333333333333333ull)));
Step for mixing two 64-bit words to compute their parity.
#define __M4RI_MIX32 | ( | a, | |
b | |||
) |
(((((a) >> 32) ^ (a)) << 32) | \ ((((b) << 32) ^ (b)) >> 32))
Step for mixing two 64-bit words to compute their parity.
#define __M4RI_MIX4 | ( | a, | |
b | |||
) |
(((((a) << 4) ^ (a)) & __M4RI_CONVERT_TO_WORD(0xF0F0F0F0F0F0F0F0ull)) | \ ((((b) >> 4) ^ (b)) & __M4RI_CONVERT_TO_WORD(0x0F0F0F0F0F0F0F0Full)));
Step for mixing two 64-bit words to compute their parity.
#define __M4RI_MIX8 | ( | a, | |
b | |||
) |
(((((a) << 8) ^ (a)) & __M4RI_CONVERT_TO_WORD(0xFF00FF00FF00FF00ull)) | \ ((((b) >> 8) ^ (b)) & __M4RI_CONVERT_TO_WORD(0x00FF00FF00FF00FFull)));
Step for mixing two 64-bit words to compute their parity.