gpt4 book ai didi

c - NEON 简单 vector 分配内在?

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:02 25 4
gpt4 key购买 nike

uint32x4_t 类型的 r1r3r4 加载到 NEON 寄存器中,我有以下代码:

r3 = veorq_u32(r0,r3);   
r4 = r1;
r1 = vandq_u32(r1,r3);
r4 = veorq_u32(r4,r2);
r1 = veorq_u32(r1,r0);

我只是想知道 GCC 是否真的将 r4 = r1 翻译成 vmov 指令。查看反汇编代码,我并不惊讶它没有。 (此外,我无法弄清楚生成的汇编代码实际上做了什么)

浏览 ARM 的 NEON 内在函数引用,我找不到任何简单的 vector->vector assignment 内在函数。

实现此目标的最简单方法是什么?我不确定内联汇编代码会是什么样子,因为我不知道 vld1q_u32 在哪些寄存器中分配了 r1r4 .我不需要实际的交换,只需要分配。

最佳答案

C有一个抽象机的概念。赋值和其他操作是根据这个抽象机器来描述的。赋值 r4 = r1; 表示将 抽象机中 r1 的值赋给 r4

当编译器为程序生成指令时,它通常不会完全模仿抽象机中发生的一切。它将抽象机器中发生的操作转换为获得相同结果的处理器指令。如果编译器知道没有它们也能得到相同的结果,它会跳过诸如移动指令之类的东西。

特别是,编译器可能不会每次都将 r1 放在同一个地方。它可能会在您第一次需要它时将它从内存加载到某个寄存器 R7 中。但随后它可能会通过将结果放入 R8 同时将 r1 的原始值保留在 R7 中来实现您的语句 r1 = vandq_u32(r1,r3);。然后,当您稍后有 r4 = veorq_u32(r4,r2); 时,编译器可以使用 R7 中的值,因为它仍然包含 r4 将具有的值(来自抽象机中的 r4 = r1; 语句。

即使您显式地编写了一个 vmov 内在函数,编译器也可能不会为其发出指令,只要它发出的指令最终得到相同的结果即可。

关于c - NEON 简单 vector 分配内在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387009/

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