我有一个简单的 asm 代码,它加载 NEON 的 12 个四元寄存器,并具有并行的成对添加指令以及加载指令(以利用双问题能力)。我在这里验证了代码:
http://pulsar.webshaker.net/ccc/sample-d3a7fe78
可以看到,代码大约需要 13 个周期。但是当我在板上加载代码时,加载指令似乎每次加载需要超过一个周期,我验证并发现 VPADAL 需要 1 个周期,但 VLD1 需要超过一个周期。这是为什么?
我已经处理了以下内容:
- 地址是 16 字节对齐的。
- 在指令中提供了对齐提示
vld1.64 {d0, d1} [r0,:128]!
- 在某些地方尝试了预加载指令
pld [r0, #192]
,但这似乎增加了周期,而不是实际减少了延迟。
有人可以告诉我我做错了什么,为什么会出现这种延迟?
其他详情:
- 参考cortex-a8
- arm-2009q1 交叉编译工具链
- 汇编中的编码