似乎没有vbroadcastsd
的版本使用带有xmm
目的寄存器的64位内存源操作数,这与ymm
和{存在{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位车道内广播版本。也许有时候这实际上是有用的,或者他们可以廉价地做到这一点。
如果vbroadcastsd
用VEX.L= 0
编码(表示128位向量宽度),则手册明确指出它将是#UD。因此,没有未记录的128位版本。