Что эквивалентно vbroadcastsd для регистров xmm? - PullRequest
0 голосов
/ 24 августа 2018

Кажется, не существует версии vbroadcastsd, которая использует 64-битный операнд источника памяти с xmm целевыми регистрами, что довольно странно, поскольку существуют версии ymm и zmm.

Итак, я думаю, что существует какая-то инструкция, которая охватывает эту цель?

1 Ответ

0 голосов
/ 24 августа 2018

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-битной версии.

...