SSE3 movddup xmm, xmm/m64
- это трансляция 64-> 128.
Интересно, что 256-битная версия AVX1 (vmovddup ymm, ymm/m256
) выполняет две отдельные трансляции на линии и имеет256-битный источник памяти.Но с источником памяти он все еще работает исключительно на загрузочном порте на процессорах Intel, например широковещательной загрузке.
Как вы говорите, vbroadcastsd ymm, m64
- это AVX1, vbroadcastsd ymm, xmm
- это AVX2и vbroadcastsd
с назначением XMM не существует.
Если бы это не было вещанием AVX1 только с источником памяти, Intel, возможно, только что сделала 256-битную версиюmovddup
be vbroadcastsd
.т. е. 128-битные vmovddup и vbroadcastsd могли бы быть псевдонимами для одного и того же кода операции.
Но разделив их, Intel может сделать трансляцию m64 -> ymm для AVX1, в то же время предоставив vmovddup xmm, xmm/m64
с разрешенным источникомрегистр.Я не знаю, почему была предоставлена 256-битная версия в полосе вещания.Может быть, это иногда полезно, или они могут сделать это дешево.
Если vbroadcastsd
кодируется с VEX.L= 0
(подразумевается 128-битная ширина вектора), руководство явно говорит, что это будет #UD.Так что нет недокументированной 128-битной версии.