Сборник синтаксиса для ввенных векторных инструкций Intel AVX-512
-
21-12-2019 - |
Вопрос
Для целей тестирования я пишу с короткими сборочными франдами для Xeon Intel Xeon PHI с помощью ACC ICC.Теперь я хотел использовать в маске векторные инструкции, но я не терпию их кормить их на встроенный ассемблер.
для кода, как это:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
.
Я получаю сообщение об ошибке
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
.
Я попробовал много разных комбинаций, но ничего не работал.Версия компилятора - Intel64 / 13.1UP03 под Linux, используя газовый синтаксис.
Редактирование: код выше фактически работает с неэкстраданным ассемблером.Так что это:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
.
работает, а следующее не:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
.
Я думаю, что он имеет отношение к необходимости использовать двойную% до регистра регистра в расширенном режиме.Но нет, один% для K тоже не работает.
Решение
Я задавал тот же вопрос в зоне разработчиков Intel http://software.intel.com/en-us/forums/topic/499145#Comment-1776563 , ответ, что для того, чтобы использовать регистры маски на Xeon Phi в расширенном встроенном ассемблере, вам нужноИспользуйте двойные фигурные скобки вокруг модификатора регистра регистра маски.
vmovapd %%zmm30, (%%r15, %%r10){{%%k1}}
. Другие советы
Я думаю, вам нужно использовать в маске вариант инструкции: vmaskmovpd