C++ C++;等效于rlwinm?(PowerPC)

C++ C++;等效于rlwinm?(PowerPC),c++,powerpc,C++,Powerpc,我在倒我的一些旧东西时,遇到了一个我不太懂的指令。我在C++中重写,以便于阅读。< /P> 指示: rlwinm r4, r4, 2, 0, 29 做了一些研究后,我得出结论,这代表了带着面具向左旋转。但由于我对C++非常陌生,所以我似乎不能用C++来编写。 提前感谢。 < P>由于C++中没有旋转的直接语言支持,需要使用两个移位: r4 = ((r4 << 2) | (r4 >> 30)) & 0x3FFFFFFF; r4=((r4>30))&0x3FFFF

我在倒我的一些旧东西时,遇到了一个我不太懂的指令。我在C++中重写,以便于阅读。< /P> 指示:

rlwinm r4, r4, 2, 0, 29
做了一些研究后,我得出结论,这代表了带着面具向左旋转。但由于我对C++非常陌生,所以我似乎不能用C++来编写。

提前感谢。

< P>由于C++中没有旋转的直接语言支持,需要使用两个移位:

r4 = ((r4 << 2) | (r4 >> 30)) & 0x3FFFFFFF;
r4=((r4>30))&0x3FFFFFFF;

某些编译器具有旋转功能,优化器可能会将这两个移位识别为旋转。这假定
r4
为无符号且32位宽。如果它被签署了,你需要屏蔽掉右移。< /P>你能提供一个例子,什么是正在旋转,你在哪里使用和操作?不要引用我在这上面,但是从手册中,它看起来像‘R4=(4 *R4)和0xFFFFFFCI帮助你把这个翻译成可移植的C++(如果只有)。您提供了一个指向该操作码文档的链接,以及您自己是否进行了合理的尝试。否则,这看起来像是家庭作业。