gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:51:51 26 4
gpt4 key购买 nike

我正在将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com