#include /* * If ctl == 0x00000000, then *d is set to a0 * If ctl == 0xFFFFFFFF, then *d is set to a1 * ctl MUST be either 0x00000000 or 0xFFFFFFFF. */ void fp_select(fp_t *d, const fp_t *a0, const fp_t *a1, uint32_t ctl) { digit_t cw = (int32_t)ctl; for (unsigned int i = 0; i < NWORDS_FIELD; i++) { (*d)[i] = (*a0)[i] ^ (cw & ((*a0)[i] ^ (*a1)[i])); } }