xmm寄存器的vbroadcastsd等效于什么?

时间:2018-08-24 17:05:07

标签: assembly x86 sse avx

似乎没有vbroadcastsd的版本使用带有xmm目的寄存器的64位内存源操作数,这与ymm和{存在{1}}个版本。

所以我想有一些现有的说明可以满足这个目的?

1 个答案:

答案 0 :(得分:2)

SSE3 movddup xmm, xmm/m64是64-> 128广播。

有趣的是,AVX1 256位版本(vmovddup ymm, ymm/m256)进行两个单独的车内广播,并具有256位存储源。但是,有了内存源,它仍然可以完全在Intel CPU的负载端口上运行,例如广播负载。

正如您所说,vbroadcastsd ymm, m64是AVX1,vbroadcastsd ymm, xmm是AVX2,并且没有vbroadcastsd带有XMM目标。


如果不是出于AVX1广播的纯内存源特性,英特尔可能刚刚制作了movddup be vbroadcastsd的256位版本。即128位vmovddup和vbroadcastsd可能是同一操作码的别名。

但是将它们拆分后,英特尔可以为AVX1进行m64-> ymm广播,同时仍为vmovddup xmm, xmm/m64提供允许作为寄存器的源。我不知道为什么提供了256位车道内广播版本。也许有时候这实际上是有用的,或者他们可以廉价地做到这一点。

如果vbroadcastsdVEX.L= 0编码(表示128位向量宽度),则手册明确指出它将是#UD。因此,没有未记录的128位版本。