Инструкция mulx
была введена с набором команд BMI2, начиная с процессора Haswell.
Согласно документации Intel, для mulx
unsigned __int64 umul128(unsigned __int64 a, unsigned __int64 b, unsigned __int64 * hi);
Тем не менее, я не нахожу такого встроенного в встроенного онлайн-руководства Intel под BMI2 или вообще. Тем не менее, я обнаружил, что intrinsics addcarry из набора инструкций ADX.
Согласно эта ссылка, intrinsic is mulx_u64
, но я тоже не нахожу его.
MSVC добавила _ umul128 intrinsic в MSVC 2005, но только производит mul
, а не mulx
(и я понятия не имею, как включить BMI2 в MSVC).
Я могу сделать инструкцию mulx
косвенно используя __int128
в GCC с помощью -mbmi2
(или -march=haswell
), но я бы предпочел сделать это более непосредственно с помощью встроенного.
Почему существуют встроенные функции ADX, но не для mulx
, как определено в документации Intel?