为什么这两个高(64bx64b)函数会产生不同的结果?

时间:2015-07-01 09:44:20

标签: c++ hpc intrinsics avx2 bmi

addeventListener("DOMContentLoaded")

我正在尝试使用AVX2上的MULX内在函数(更具体地说BMI2)编写以下内容。但他们没有给出相同的结果。

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;
}

1 个答案:

答案 0 :(得分:3)

看起来这个功能可能是错误的:

static __inline__ uint64_t mulhilo64(uint64_t  a, uint64_t b, uint64_t *c){
     return _mulx_u64(a, b, &c);
}

应该是:

static __inline__ uint64_t mulhilo64(uint64_t  a, uint64_t b, uint64_t *c){
     return _mulx_u64(a, b, c);
}                        // ^

请注意,启用警告进行编译(例如gcc -Wall ...)有助于捕捉到这样的简单错误。