gpt4 book ai didi

memory - ARM NEON : What's the difference between vld4_f32 and vld4q_f32?

转载 作者:行者123 更新时间:2023-12-04 17:41:04 26 4
gpt4 key购买 nike

我无法区分 vld4_f32 之间的区别和 vld4q_f32在 ARM NEON 指令中。

当我提高我的编码水平并开始查看汇编指令而不是信息较少的内在函数时,困惑就开始了。

我需要使用 的原因vld4 这里的变体指令是因为,我想捕获 4 float32_t来自每个 第 4 位 我的大阵列。

alt text
vld4_f32内在函数和相应的汇编指令如下所示 ( From this link )

float32x2x4_t vld4_f32 (const float32_t *) 
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]
vld4q_f32内在函数及其相应的汇编指令如下所示
float32x4x4_t vld4q_f32 (const float32_t *) 
Form of expected instruction(s): vld4.32 {d0, d1, d2, d3}, [r0]

好吧,在内部函数级别 我看到的区别是返回类型 ,但如果我查看汇编指令和寄存器数量,它们看起来都一样。编译器或汇编器如何知道两者之间的区别?

有人可以对此进行更多说明,并解释我如何实现加载 4 float32_t 定位的值 每 4 个内存位置 进入一个单一的寄存器?

最佳答案

是的,我发现了区别。我使用 CodeSourcery 查看所有加载指令的实际寄存器内容。我发布的链接没有提供有关 vld4q_f32 的完整详细信息。

好的,首先是 vld4_f32 ,这会加载 4 天 每个寄存器(例如 d16-19) d 寄存器的长度为 64 位,因此该指令将加载前 8 个值,其间隔为 4,如下图所示。
alt text

在第二种情况下 vld4q_f32 ,这会加载 8 天 寄存器(例如 d16-23)而不是四个。对于此 link 的读者,完全不清楚将加载8个寄存器。当我查看 vld4qf32 的反汇编代码时,它正在使用 8 d 寄存器。

这条指令确实会做我希望它做的事情,即加载 4 float32_t如下图所示,间隔为 4 的值。
alt text

关于memory - ARM NEON : What's the difference between vld4_f32 and vld4q_f32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819778/

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