【发布时间】:2016-08-25 20:17:26
【问题描述】:
我试图让我的旧代码运行得更快,因为我发现 RPi 2 处理器支持 NEON 指令。所以我写了这段代码:
__asm__ __volatile__(
"vld1.8 {%%d2, %%d3}, [%1];"
"vld1.8 {%%d4, %%d5}, [%2];"
"vaba.u8 %%q0, %%q1, %%q2;"
"vst1.64 %%d0, [%0];"
: "=r" (address_sad_intermediary)
: "r" (address_big_pic), "r" (address_small_pic)
:
);
然后在 C 中,主要的 sad 变量与 sad_intermediary 相加。
主要目标是计算绝对差的总和,因此我将 big_pic 中的 16 B 加载到 q1 寄存器中,将 small_pic 中的 16 B 加载到 q2 寄存器中,将 SAD 计算到 q0 中,然后将 q0 中的较低 8 B 加载到中介变量。问题是,由此产生的悲伤是零。
我使用 GCC 4.9.2 和 -std=c99 -pthread -O3 -lm -Wall -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard 选项。
您是否发现代码有任何问题?谢谢。
【问题讨论】:
标签: gcc assembly arm raspberry-pi2 neon