[英]How do I convert 32-bit NEON assembly to 64-bit?
我正在嘗試在64位iOS設備上使用MSFA(谷歌音樂合成器),並且它具有四個用於DSP操作的NEON匯編源文件,這些文件顯然是為32位體系結構編寫的。 最初我被告知,最好將其重寫為NEON內在函數,以使它與體系結構無關。 但是,在閱讀了一些文章(例如http://hilbert-space.de/?p=22 )之后,將其作為純手寫的匯編似乎仍然是理想的。
我的問題是,將其轉換為64位是否簡單? 如果是這樣,我將如何開始這樣做?
.s文件是:
https://github.com/google/music-synthesizer-for-android/blob/master/cpp/src/neon_fir.s
https://github.com/google/music-synthesizer-for-android/blob/master/cpp/src/neon_fm_kernel.s
https://github.com/google/music-synthesizer-for-android/blob/master/cpp/src/neon_iir.s
https://github.com/google/music-synthesizer-for-android/blob/master/cpp/src/neon_ladder.s
TL; DR:使用內部函數
檢查asm輸出以確保它不是愚蠢的不是一個壞主意,但是使用內在函數可以使編譯器進行恆定傳播,並為有序內核進行調度/軟件管道。
如果您從2009年開始閱讀該鏈接上的評論,您會發現NEON內在函數的錯誤代碼是2011年修復的gcc錯誤 。
如今,編譯器非常擅長處理內在函數,並且會不斷改進。
Clang特別可以做很多事情,例如使用與您使用內在函數編寫的內容不同的隨機播放指令。
我一點都不是專家,但是NEON的主要變化之一是Aarch64具有32個128b NEON寄存器( v0 - v31
),而不是大的reg由一對較小的regs組成。
另請參見有關元素大小語法的一些ARM官方文檔 ,您可以在其中使用.16B
表示16字節元素的向量。 (與.8
表示每個元素為8位的舊語法相反)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.