该mulx
指令是从 Haswell 处理器开始的 BMI2 指令集引入的。
根据英特尔的文档,应该有一个内在的mulx
unsigned __int64 umul128(unsigned __int64 a, unsigned __int64 b, unsigned __int64 * hi);
但是,我在 BMI2 下或一般情况下的英特尔内在指南中没有找到这样的内在指南。但是,我确实从 ADX 指令集中找到了 addcarry 内在函数。
根据这个链接,内在是mulx_u64
但我也没有找到那个。
MSVC 在 MSVC 2005 中添加了一个_umul128 内在函数,但这只会产生mul
而不是mulx
(我不知道如何在 MSVC 中启用 BMI2)。
我可以在 GCC 中使用(或)mulx
间接生成指令,但我更愿意使用内在函数更直接地执行此操作。__int128
-mbmi2
-march=haswell
为什么存在 ADX 内在函数,但不存在英特尔文档mulx
中定义的一个?