Assembly VST/VLD实际上做什么?

Assembly VST/VLD实际上做什么?,assembly,arm,neon,Assembly,Arm,Neon,下面两行代码会发生什么 vst1.64 {d8, d9, d10, d11}, [r4:128]! vst1.64 {d12, d13, d14, d15}, [r4:128] 更一般地说,我想知道VST和VLD在以下方面做了什么: 这对我来说并不清楚 vst1.64 {d8, d9, d10, d11}, [r4:128]! 该指令将寄存器d8、d9、d10和d11的内容存储在r4所指的位置。该位置暗示与128位边界对齐。之后,r4将按存储的字节数递增。在您的情况下,这将是32(4乘以8字

下面两行代码会发生什么

vst1.64 {d8, d9, d10, d11}, [r4:128]!
vst1.64 {d12, d13, d14, d15}, [r4:128]
更一般地说,我想知道VST和VLD在以下方面做了什么: 这对我来说并不清楚

vst1.64 {d8, d9, d10, d11}, [r4:128]!
该指令将寄存器d8、d9、d10和d11的内容存储在r4所指的位置。该位置暗示与128位边界对齐。之后,r4将按存储的字节数递增。在您的情况下,这将是32(4乘以8字节)

vst1.64 {d12, d13, d14, d15}, [r4:128]

此指令与上述指令相同,但存储d12、d13、d14和d15。R4不会递增,而是保持不变。

值得一提的是,寄存器列表的有效模式受到严格限制。从链接的文档中,它们必须是4个连续的寄存器,或者跨距为2。所以你不能用像
vst1.64{d9,d8,d11,d10},[dst]
这样的存储免费洗牌。我假设机器编码只是对第一个寄存器进行编码,对于stride=1或2,再加上一位。@Nils pipenbrich,谢谢。但请你说清楚一点好吗?例如:如何使用d8、d9、d10、d11中的内容存储到r4,以及.64后跟vst1的含义是什么?这不会存储到
r4
,而是存储到地址
r4
处的内存位置
.64
是元素大小。对于
vst1
而言,它没有太大的影响(除了在某些情况下对齐和endianism),但在存储到内存之前对结构进行解交织时,它会对
vst2
vst3
vst4
产生更大的影响。