我正在扭转我的一些旧东西,并且遇到了我不太理解的指示。我用C ++重写它以便于阅读。
指示:
rlwinm r4, r4, 2, 0, 29
进行一些研究我得出结论,这表示左旋转然后用面具旋转。但由于我对C ++很陌生,我似乎无法用C ++编写它。
提前致谢。
答案 0 :(得分:0)
由于C ++中的旋转没有直接语言支持,因此您需要使用两个班次:
r4 = ((r4 << 2) | (r4 >> 30)) & 0x3FFFFFFF;
某些编译器具有旋转功能,优化器可将两个移位识别为旋转。这假设r4
是无符号的,32位宽。如果签名,则需要屏蔽右移。