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;
}
我想在AVX2(更具體地說是BMI2)上面使用MULX intrinsics編寫如下的代碼。但他們沒有給出相同的結果。爲什麼這兩個高(64bx64b)函數會給出不同的結果?
static __inline__ uint64_t mulhilo64(uint64_t a, uint64_t b, uint64_t *c){
return _mulx_u64(a, b, &c);
}
你能提供一個簡單的測試用例和每個實現的結果嗎? –
第一個函數是很長代碼的一部分。我只是用第二個功能替換它,沒有別的。你認爲他們也應該一樣嗎? –
我在第二個函數中看到了一個可能的錯誤(請參閱下面的答案) - 我只是試圖將一個簡單的測試用例放在一起,以查看是否可以複製該問題。 –