2

我对 ARM Neon VLD1 指令的对齐有疑问。以下代码中的对齐如何工作?

DATA            .req r0  
vld1.16         {d16, d17, d18, d19}, [DATA, :128]!  

这条读指令的起始地址是否移动到DATA+一个正整数,使得它是不小于DATA的16的最小倍数(16字节=128位),还是DATA本身变为16的最小倍数?小于数据?

4

1 回答 1

2

这是对 CPU 的提示。我从 ARM 网站上的一篇博文中读到了有关这种提示有用性的唯一内容,声称它使加载速度更快,但没有说明如何或为什么。可能是因为 CPU 可以发出更广泛的负载。

您还可以使用可选的 : 参数为 Rn 中传递的指针指定对齐方式,这通常会加快内存访问速度。

如果您提供提示,则必须确保它DATA与 16 字节对齐,否则您将获得硬件异常。

此硬件行为在ARM ARM的 VLD1 描述中描述为

if ConditionPassed() then
    EncodingSpecificOperations(); CheckAdvSIMDEnabled(); NullCheckIfThumbEE(n);
    address = R[n]; if (address MOD alignment) != 0 then GenerateAlignmentException();
    if wback then R[n] = R[n] + (if register_index then R[m] else ebytes);
    Elem[D[d],index,esize] = MemU[address,ebytes];

主要是这条线

if (address MOD alignment) != 0 then GenerateAlignmentException();

我实际上无法理解为什么 CPU 可以自行检查对齐并应用最佳条件。可能会花费太多的周期。

于 2013-02-05T14:37:33.683 回答