ARM Neon VLD1指令加载寄存器两次

时间:2014-06-22 22:37:56

标签: xcode assembly arm lldb neon

以下代码将相同的数据加载到D16,D17以及D18,D19:

vld1.16         {d16, d17, d18, d19}, [R1, :128]!

我尝试将负载分开,如此

vld1.16         d16, [R1, :64]!

这也将数据加载到d16和d17两次。

这是在Xcode 5.1.1下,目标是iPad 3(ARMv7)。

不相信IDE中的结果,我在lldb中检查了结果,得到了相同的结果。

在lldb中反汇编代码显示了预期的代码。

1 个答案:

答案 0 :(得分:3)

这似乎是Xcode中的一个错误。负载实际上正常工作。

如果我使用d寄存器转储内容,我会得到重复的值:

(lldb) register read d16 --format int16_t[]
     d16 = {1210 -18 14 -9}
(lldb) register read d17 --format int16_t[]
     d17 = {1210 -18 14 -9}

但是,如果我使用q8寄存器(别名为d16和d17)查看该数据,则值看起来正确:

(lldb) register read q8 --format int16_t[]
     q8 = {1210 -18 14 -9 23 -9 -14 -18}

所以看起来像LLDB的一个错误需要修复,不要相信它告诉你的d寄存器!