【发布时间】:2016-07-15 02:12:06
【问题描述】:
下面两行代码究竟会发生什么?
vst1.64 {d8, d9, d10, d11}, [r4:128]!
vst1.64 {d12, d13, d14, d15}, [r4:128]
更一般地说,我想知道 VST 和 VLD 自从 doc 以来做了什么: ARM InfoCenter 对我来说不是很清楚。
【问题讨论】:
下面两行代码究竟会发生什么?
vst1.64 {d8, d9, d10, d11}, [r4:128]!
vst1.64 {d12, d13, d14, d15}, [r4:128]
更一般地说,我想知道 VST 和 VLD 自从 doc 以来做了什么: ARM InfoCenter 对我来说不是很清楚。
【问题讨论】:
vst1.64 {d8, d9, d10, d11}, [r4:128]!
该指令将寄存器 d8、d9、d10 和 d11 的内容存储在 r4 指向的位置。提示此位置与 128 位边界对齐。之后 r4 将增加存储的字节数。在您的情况下,这些将是 32(四乘以 8 个字节)
vst1.64 {d12, d13, d14, d15}, [r4:128]
该指令与上述相同,但存储 d12、d13、d14 和 d15。 R4 不会增加,而是留在原处。
【讨论】:
vst1.64 {d9, d8, d11, d10}, [dst] 这样的商店免费洗牌。我假设机器编码只对第一个寄存器进行编码,并且为 stride=1 或 2 多编码一位。
r4,而是存储到地址r4的内存位置。 .64 是元素大小。对于vst1,它不会产生太大影响(在某些情况下对齐和字节序除外),但它会对vst2、vst3 或vst4 产生更大的影响,同时在存储到内存之前对结构进行解交织。