Что означает скобка "{" в сборке AT&T
Я использую Intel Xeon Phi. Я компилирую программу как
icpc -mmic -S xxxx.cpp
Есть некоторый синтаксис, который я не понимаю в коде сборки.
vgetmantpd $0, %zmm2, %zmm9{%k3} #85.59 c79
vsubpd %zmm11, %zmm10, %zmm12{%k3} #85.59 c83
vpminsd %zmm14{aaaa}, %zmm12, %zmm13 #85.59 c87
vcvtpd2ps {rz-sae}, %zmm9, %zmm6{%k3} #85.59 c91
vpminud %zmm14{bbbb}, %zmm13, %zmm15 #85.59 c95
Что означает "{"/"}" в%zmm12{%k3}. А что такое%k3? Что такое%zmm14{bbbb}?
1 ответ
Майкл прав во всех трех пунктах:
1) {aaaa} и {bbbb} являются квалификаторами операндов, которые направляют каждую "полосу" входного регистра (zmm14, в обоих случаях) определенным образом "извергнутой" ("{aaaa}" означает элемент младшего разряда) каждой полосы должна быть реплицирована на все четыре "элемента" полосы, так что если zmm14 содержится, от высокого порядка до низкого порядка, 160, 150, 140, 130, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, тогда zmm14{aaaa} будет 130, 130, 130, 130, 90, 90, 90, 90, 50, 50, 50, 50, 10, 10, 10, 10, и zmm14{bbbb} будет 140, 140, 140, 140, 100, 100, 100, 100, 60, 60, 60, 60, 20, 20, 20, 20. zmm14{dcba} является стандартным swizzle, то есть то же самое, что просто сказать zmm14, и это совсем не мошенничество.)
2) квалификатор операнда {k3} означает изменение только тех элементов выходного регистра (zmm9, в самой верхней инструкции), для которых установлен соответствующий бит в регистре маски k3; оставьте все остальные элементы в zmm9 без изменений.
3) И Майкл также полностью нацелен на то, что ты действительно не сможешь разгадать все эти вещи. Вам нужно будет изучить архитектурные документы, потому что архитектура Xeon Phi VPU несколько отличается от MMX и SSE. Введение регистров маски (которые используются в качестве предикатов для управления тем, какие элементы модифицируются), переходы, трансляции и преобразования с повышением и понижением частоты. В связанном с Майклом документе соответствующая глава для ознакомления с этим уровнем архитектуры Xeon Phi - это глава 7. Еще один документ, который вы можете просмотреть, - это: http://software.intel.com/en-us/articles/intel- Xeon-PHI-сопроцессор вектор-микроархитектура
В вашем точном запросе или ответе Майкла не упоминается, что спецификатор инструкции {rz-sae} означает, что эта инструкция должна выполнять округление до нуля и молча обрабатывать арифметические исключения.
С уважением, Брайан Р. Никерсон