Наряду с введением AVX Intel представила схему кодирования VEX в архитектуре Intel 64 и IA-32. Эта схема кодирования используется в основном с инструкциями AVX. Мне было интересно, можно ли смешивать инструкции, закодированные в VEX, и инструкции, которые теперь называются «устаревшими SSE».
Основной причиной, по которой я задаю этот вопрос, является размер кода. Рассмотрим эти две инструкции:
shufps xmm0, xmm0, 0
vshufps xmm0, xmm0, xmm0, 0
Я обычно использую первую, чтобы "рассылать" скалярное значение всем местам в регистре XMM.Теперь набор инструкций говорит, что единственная разница между этими двумя (в данном случае) заключается в том, что закодированный VEX очищает старшие (> = 128) биты регистра YMM. Предположим, что мне это не нужно, в чем преимущество использования версии с кодировкой VEX в этом случае? Первая инструкция занимает 4 байта (0FC6C000
), вторая — 5 (C5F8C6C000
).
Заранее всем спасибо за ответы.