assembly - xmm 寄存器的 vbroadcastsd 相当于什么?

标签 assembly x86 sse avx

似乎没有 vbroadcastsd 的版本它采用 64 位内存源操作数 xmm目标寄存器,这有点奇怪,因为 ymmzmm版本已存在。

所以我猜有一些现有的指令涵盖了这个目的?

最佳答案

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

有趣的是,AVX1 256 位版本 ( vmovddup ymm, ymm/m256 ) 执行两个单独的 channel 内广播,并具有 256 位内存源。但有了内存源,它仍然纯粹在 Intel CPU 上的负载端口上运行,就像广播负载一样。

正如你所说, vbroadcastsd ymm, m64 是 AVX1,vbroadcastsd ymm, xmm是AVX2,并且没有vbroadcastsd具有 XMM 目的地。

<小时/>

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

但是将它们分开可以让英特尔为 AVX1 制作 m64 -> ymm 广播,同时仍然提供 vmovddup xmm, xmm/m64源允许是寄存器。我不知道为什么提供 256 位 channel 内广播版本。也许这有时确实有用,或者他们可以便宜地做到这一点。

如果vbroadcastsd编码为 VEX.L= 0 (意味着 128 位向量宽度),手册明确表示它将#UD。因此不存在未记录的 128 位版本。

关于assembly - xmm 寄存器的 vbroadcastsd 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008950/

相关文章:

c - Mac OS X使用main和scanf/printf的32位nasm汇编程序?

linux - 在汇编中进行除法时出现浮点异常(核心已转储)

assembly - 为什么 vhaddps 指令会以如此复杂的方式添加?

node.js - 运行 voyage linux 的 ALIX/AMD Geode 上的 nodejs 导致 "invalid machine instruction"

delphi - Delphi 是否支持所有 MMX/SSE 指令?

assembly - 与 dos 下相比,全屏模式下的颜色不一样

assembly - 当您写入标签时,Assembly 是否会创建内存位置?

C++在函数模板中传递函数指针

c++ - 使用和不使用 SSE 的不同结果( float 组乘法)

c++ - 尝试使用 x86 asm SSSE3 将大端转换为小端