Можно ли вызвать x86 `idiv r/m8` из MSVC2022 напрямую с помощью C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли вызвать x86 `idiv r/m8` из MSVC2022 напрямую с помощью C++?

Сообщение Anonymous »

Я пытаюсь вызвать idiv r/m8, используя текущий компилятор Microsoft Visual C++ 17.4.33403.182 MSVC2022 и C++.
Используя самый простой подход:

Код: Выделить всё

struct cdiv_t
{
// char
std::int8_t quot;
std::int8_t rem;
};

cdiv_t idiv(std::int8_t dividend, std::int8_t const divisor)
{
int8_t const quotient = dividend / divisor;
int8_t const remainder = dividend % divisor;
return cdiv_t{quotient, remainder};
}
не получается, так как компилятор перехитрил меня, используя вместо этого 32-битную версию [синтаксис Intel]:

Код: Выделить всё

        IntelIntrinsics!idiv [x86instructions.cpp @ 4]:
3    {
0x7ff63f4d1740                   movsx   eax,cl
4        int8_t const quotient = dividend / divisor;
0x7ff63f4d1743           movsx   ecx,dl
0x7ff63f4d1746           cdq
0x7ff63f4d1747           idiv    eax,ecx
6        return cdiv_t{quotient, remainder};
0x7ff63f4d1749           movzx   r8d,dl
0x7ff63f4d174d           shl     r8w,8
0x7ff63f4d1752           movzx   eax,al
0x7ff63f4d1755           or      ax,r8w
7    }
0x7ff63f4d1759           ret
Встроенная сборка больше не поддерживается, и я не нашел какой-либо полезной функции в intrin.h.
Кто-нибудь знает способ явного вызова 8-битной [и 16-битной] версии idiv?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... c-directly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»