128-битное деление, встроенное в Visual C ++

Мне интересно, действительно ли в Visual C ++ нет встроенной функции 128-битного деления?

Существует встроенная функция умножения 64x64 = 128 бит, называемая _umul128 () , которая хорошо соответствует инструкции ассемблера MUL x64.

Естественно, я предполагал, что будет также внутреннее деление 128/64 = 64 бит (моделирование инструкции DIV ), но, к моему удивлению, ни Visual C ++, ни Intel C ++, похоже, не имеют его, при по крайней мере, его нет в intrin.h.

Кто-нибудь может это подтвердить? Я попытался найти имена функций в исполняемых файлах компилятора с помощью команды grep, но не смог найти _umul128 в первую очередь, поэтому, думаю, я посмотрел не в том месте.

Обновление: по крайней мере, я нашел шаблон umul128 (без ведущего подчеркивания) в c1.dll Visual C ++ 2010. Все остальные встроенные функции перечислены вокруг него, но, к сожалению, нет "udiv128" или тому подобное :( Так что, похоже, они действительно «забыли» его реализовать.

Чтобы уточнить: я ищу не только 128-битный тип данных, но и способ разделить 128-битное скалярное int на 64-битное int в C ++. Либо встроенная функция , либо собственная 128-битная целочисленная поддержка решит мою проблему.

Изменить: Ответ отрицательный, в Visual Studio 2010 до 2017 года нет встроенного _udiv128 , но он доступен в Visual Studio 2019 RTM

10
задан cxxl 10 May 2019 в 09:08
поделиться