Я пытаюсь обрабатывать как компиляторы MSVC, так и GCC, обновляя эту базу кода для работы с GCC. Но я точно не знаю, как работает GCC встроенный ASM. Теперь я не очень хорош в переводе ASM на C, иначе я бы просто использовал C вместо ASM.
SLONG Div16(signed long a, signed long b)
{
signed long v;
#ifdef __GNUC__ // GCC doesnt work.
__asm() {
#else // MSVC
__asm {
#endif
mov edx, a
mov ebx, b
mov eax, edx
shl eax, 16
sar edx, 16
idiv ebx
mov v, eax
}
return v;
}
signed long ROR13(signed long val)
{
_asm{
ror val, 13
}
}
Я предполагаю, что ROR13 работает что-то вроде (val << 13) | (val >> (32 - 13))
, но код не производит тот же вывод.
Каков правильный способ перевода этой встроенной ASM в GCC и/или что такое C-перевод этого кода?