2016-03-27 29 views
0

我正在扭轉我的一些舊東西,碰到一個我不太明白的指令。我正在用C++重寫它,以便於閱讀。rlwinm的C++等價物是什麼? (PowerPC)

指令:

rlwinm r4, r4, 2, 0, 29 

做一些研究,我得出的結論,這代表向左旋轉,然後,用面膜。但是因爲我對C++很陌生,所以似乎無法用C++編寫它。

在此先感謝。

+0

你能舉一個例子什麼是旋轉和你在哪裏使用AND操作? –

+0

請不要在此引用我,但從手冊它看起來像'r4 =(4 * r4)&0xfffffffc – infixed

+0

我會幫你翻譯這到可移植的C++如果(並且只有)你提供了一個鏈接該操作碼的文檔以及您是否自己做出了合理的嘗試。否則,這看起來像功課。 –

回答

0

由於是爲C++中的旋轉沒有直接的語言支持,你需要使用兩班:

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

一些編譯器具有旋轉功能,並且優化器可以識別兩個班次的旋轉。這假設r4是無符號的,32位寬。如果簽字,你需要掩蓋正確的轉變。