uint32_t res = *num;
std::swap(reinterpret_cast<unsigned char*>(&res)[0],
reinterpret_cast<unsigned char*>(&res)[1]);
return res;
}
Читаю из num uint16 в BE, возвращаю как unit32 LE.
В годбольте видно такой код в кланге с -O2:
movzx eax, word ptr [rdi]
rol ax, 8
movzx eax, ax
ret
Собственно, вопрос, зачем там второй movzx?
а без него ax разве попадет в lo часть eax?
А если march haswell задать?
сейчас — только понять зачем нужен был второй movzx, и во мне или в компиляторе ошибка
Обсуждают сегодня