2017-09-02 59 views
1

我試圖將一些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中執行位操作是否是最佳做法?

回答

1

您可以通過8位的倍數使用vsldvec_sld)做旋轉,然後處理的< 8位的任何剩餘轉動你可能需要使用vsl + vsr + vselvec_sll + vec_srl + vec_sel) 。

+0

謝謝保羅。我很難找到有關'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

+0

剛剛在移動設備上,但Google「AltiVec PIM」,您應該在頂部幾個命中中看到一個PDF文件,它記錄了所有內部函數等。伴隨手冊是「AltiVec PEM」,它記錄了實際指令。 –

+0

注意:你的問題被標記爲'PowerPC' - 你真的使用PowerPC/AltiiVec還是IBM POWER/VMX(類似但不同)? –

相關問題