簡體   English   中英

如何將32位NEON程序集轉換為64位?

[英]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特別可以做很多事情,例如使用與您使用內在函數編寫的內容不同的隨機播放指令。


asm級差異:

我一點都不是專家,但是NEON的主要變化之一是Aarch64具有32個128b NEON寄存器( v0 - v31 ),而不是大的reg由一對較小的regs組成。

另請參見有關元素大小語法的一些ARM官方文檔 ,您可以在其中使用.16B表示16字節元素的向量。 (與.8表示每個元素為8位的舊語法相反)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM