簡體   English   中英

ARMv8 NEON GCC內在函數

[英]ARMv8 NEON GCC intrinsics

針對帶有NDK r10c和64位CPU的Android-21,NEON內在函數在何種程度上類似於32位ARMv7a? 將特定於ARM的C代碼移植到新平台的主要注意事項是什么?

C中的NEON內在函數應該基本相同-Linaro將手寫匯編轉換為內在函數(顯然會導致一定程度的性能損失,因為編譯器在這方面並不完美),以便將NEON支持移植到某些庫中(例如libvpx)到64位。 有一些新的東西(例如對64位浮點數的支持),但是據我所知(實際上是全部?),現有的內在函數應該工作相同。

指令的大多數實際更改(例如vzip-> zip1 / zip2)和寄存器集(已更改SIMD寄存器別名的方式)都隱藏在內在函數級別上。

要記住的主要警告不是將舊代碼移植到AArch64,而是關於現有二進制文件和運行32位代碼。

您很可能需要更新NEON運行時檢測(例如cpufeatures庫)以在新的ARMv8設備上正確檢測它,即使在32位模式下運行時也是如此。 如果您使用NDK中的cpufeatures庫,則即使您不打算將其實際移植到AArch64上,也需要使用NDK r10或更高版本重建代碼以在ARMv8設備上正確地檢測到它-否則最終僅運行后備C代碼。 (長話短說,舊的cpufeatures庫僅解析/ proc / cpuinfo,並且這已更改了ARMv8設備上的格式,因此舊的cpufeatures版本將無法正確檢測功能。)

編輯:事實證明,Android內核最終為/ proc / cpuinfo提供了額外的兼容性選項,因此舊NDK版本的cpufeatures庫將繼續檢測NEON正常。 有關詳細信息,請參見https://android.googlesource.com/kernel/common/+/cba0c6b2913c0d075a7434025f5dc29cd813707f%5E%21/https://android.googlesource.com/kernel/common/+/3868e7f8d47992922756d1aa6590f0d556c669b8%5E%21/額外的兼容性選項(至少在上游linux內核中似乎沒有)。

暫無
暫無

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

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