ios - 使用 NEON 内在函数存储非相邻 d 寄存器的最快方法

标签 ios neon

我正在将 32 位 NEON asm 代码移植到 NEON 内在函数,我想知道是否可以使用内在函数以简洁的方式编写此代码:

vst4.32 {d0[0], d2[0], d4[0], d6[0]}, [%[v1]]!

1) 前面的代码是对q寄存器进行操作的,但是涉及到存储的时候,没有使用q0, q1, q2q3,它必须重新创建向量,每个部分都在 d 寄存器之一中,例如v1[0] = d0[0], v1[1] = d2[0] ... v2[0] = d0[1], v2[1] = d2[1] ... v3[0 ] = d1[0], v3[1] = d3[0] ...

此操作是 asm 中的单行操作,但如果不首先拆分高位和低位并构建新的 float32x4x4_t 变量以提供给 vst4_f32

这可能吗?

2) 我不完全确定 [%[v1]]! 做了什么(是的,我用谷歌搜索了很多):它应该是对名为 的变量的引用v1 和感叹号将执行writeback,这应该意味着指针增加了与同一行上的指令写入的相同数量。

对吗?有什么方法可以用内在函数复制它?

最佳答案

经过更多调查后,我发现了这条针对 store a specific lane of an array of 4 vectors 的具体说明,所以不需要拆分成高位和低位变量:

float32x4x4_t u = { q0, q1, q2, q3 };
vst4q_lane_f32(v1, u, 0);
v1 += 4;

正如@charlesbaylis 所写,Writeback 只是一个增加的指针。

关于ios - 使用 NEON 内在函数存储非相邻 d 寄存器的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28752533/

相关文章:

ios - 如何让应用程序在连接的设备上运行

ios - Swift: fatal error :在初始化 UIlabel 值时展开可选值时意外发现 nil

c++ - 为什么编译器没有定义 __ARM_FEATURE_CRC32?

ios - 添加和删​​除 UIStackViews 搞乱了我的 UIScrollView

ios - 主线程执行耗时操作如何影响UI刷新

ios - 在 iOS 6 中更改方向后 UITableViewCell contentView 按钮消失

c++ - ARM NEON C : Wrong answer

android - 在 Android 上构建 ffmpeg。使用 NEON (Tegra3) 和 Cygwin

c++ - Cortex A9 NEON 与 VFP 使用混淆

arm - 裁剪的高效 NEON 实现