Я перевернул некоторые свои старые вещи и наткнулся на инструкцию, которую я не совсем понимаю. Я переписываю его на C ++ для удобства чтения.
Инструкция:
rlwinm r4, r4, 2, 0, 29
Проведя некоторые исследования, я пришел к выводу, что это означает вращение влево и с маской. Но так как я довольно новичок в C ++, я не могу написать это на C ++.
Заранее спасибо.
Поскольку в C ++ нет прямой языковой поддержки поворота, вам нужно использовать две смены:
r4 = ((r4 << 2) | (r4 >> 30)) & 0x3FFFFFFF;
Некоторые компиляторы имеют функцию поворота, и оптимизатор может распознавать эти две смены как повороты. Это предполагает, что r4
без знака и шириной 32 бита. Если он подписан, вам нужно скрыть правую смену.
Других решений пока нет …