-rw-r--r-- 604 libmceliece-20241009/crypto_kem/460896/avx/gf_2m_mul.c raw
// 20240809 djb: split out of gf.c
// linker define gf_mul
#include "gf.h"
#include "crypto_int32.h"
/* field multiplication: returns in0 * in1 */
gf gf_mul(gf in0, gf in1)
{
int i;
uint32_t tmp;
uint32_t t0;
uint32_t t1;
uint32_t t;
t0 = in0;
t1 = in1;
tmp = t0 & crypto_int32_bottombit_mask(t1);
for (i = 1; i < GFBITS; i++) {
t0 <<= 1;
t1 >>= 1;
tmp ^= t0 & crypto_int32_bottombit_mask(t1);
}
//
t = tmp & 0x1FF0000;
tmp ^= (t >> 9) ^ (t >> 10) ^ (t >> 12) ^ (t >> 13);
t = tmp & 0x000E000;
tmp ^= (t >> 9) ^ (t >> 10) ^ (t >> 12) ^ (t >> 13);
return tmp & GFMASK;
}