我試圖將一些ARM NEON代碼移植到AltiVec。我們的NEON代碼有兩個LOAD,一個ROT,一個XOR和一個存儲,所以它看起來像一個簡單的測試案例。根據IBM的vec_rl
文檔:是否有可能在Altivec中旋轉一個128位的值?
結果的每個元素都是通過將左邊的相應元素旋轉b的相應元素指定的位數獲得的。
該文檔繼續說vector unsigned int
是,除非-qarch=power8
最大的數據類型,在這種情況下vector unsigned long long
適用。
我想執行一個128位旋轉,而不是32位或64位旋轉的單個元素。位的位置是19,31,67,97和109.它們不是字節對齊的。 (常數來自ARIA block cipher)。
是4x32和2x64最大的AltiVec數據安排?是否有可能在Altivec中旋轉128位的值?
如果打包旋轉是唯一可用的操作,那麼在C或AltiVec中執行位操作是否是最佳做法?
謝謝保羅。我很難找到有關'vec_sll'和'vec_srl'的信息。它們未在IBM的[Vector內置函數](https://www.ibm.com/support/knowledgecenter/en/SSGH2K_13.1.2/com.ibm.xlc131.aix.doc/compiler_ref/vec_intrin_cpp.html)中記錄。 。你能分享更多的信息嗎? – jww
剛剛在移動設備上,但Google「AltiVec PIM」,您應該在頂部幾個命中中看到一個PDF文件,它記錄了所有內部函數等。伴隨手冊是「AltiVec PEM」,它記錄了實際指令。 –
注意:你的問題被標記爲'PowerPC' - 你真的使用PowerPC/AltiiVec還是IBM POWER/VMX(類似但不同)? –