2
static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t* hip) {
__uint128_t product = ((__uint128_t)a)*((__uint128_t)b);
*hip = product>>64;
return (uint64_t)product;
}
Я пытаюсь написать следующее, используя MULX intrinsics на AVX2 (точнее, BMI2). Но они не дают одинаковых результатов.Почему эти две функции высокого (64bx64b) дают разные результаты?
static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t *c){
return _mulx_u64(a, b, &c);
}
Можете ли вы предоставить простой тестовый пример и результат для каждой реализации? –
Первая функция является частью очень длинного кода. Я просто заменил его на 2-ю функцию, ничего больше. Считаете ли вы, что они должны быть одинаковыми? –
Я вижу одну вероятную ошибку во второй функции (см. Ответ ниже). Я просто пытаюсь собрать простой тестовый пример, чтобы увидеть, могу ли я воспроизвести проблему. –