Объединение префиксов в SSE

В SSE префиксы 066h (переопределение размера операнда) 0F2H (REPNE) и 0F3h (REPE) являются частью кода операции.

В не-SSE 066h переключатели между 32-разрядным (или 64-разрядный) и 16-разрядной операцией. 0F2h и 0F3h используются для строковых операций. Они могут быть объединены так, чтобы 066h и 0F2h (или 0F3h) может использоваться в той же инструкции, потому что это значимо. Каково поведение в инструкции SSE? Например, мы имеем (игнорирование модификации/комнаты на данный момент):

0f 58      addps
66 0f 58   addpd
f2 0f 58   addsd
f3 0f 58   addss

Но что это?

66 f2 0f 58

Как насчет?

f2 66 0f 58

Не говоря уже о следующем, которое имеет два конфликтующих префикса ЧЛЕНА ПАЛАТЫ ПРЕДСТАВИТЕЛЕЙ:

f2 f3 0f 58

Какова спецификация для них?

9
задан Peter Cordes 4 December 2019 в 03:27
поделиться

1 ответ

SDM Intel vol.2 руководство (ссылка системы команд) называет их [1 127] обязательные префиксы . Думайте о них как о части кода операции.

, Но да, они префиксы и могут быть смешаны с другими префиксами перед фактическим escape-byte+opcode. На самом деле префикс REX должен следовать за другими префиксами.

, Как обычно, использование нескольких конфликтующих префиксов от той же группы, оказывается, декодирует с последней, берущей приоритет на текущих аппаратных средствах Intel. Я думаю, что в руководствах Intel говорится, что выполнение этого может дать непредсказуемое поведение, таким образом, это не гарантировано или соответствующее требованиям завтрашнего дня. Это не значимая вещь сделать; если Вы хотите заполнить инструкцию сделать его дольше по причинам выравнивания, я думаю, повторяясь тот же , префикс пару раз безопасен.

ФОРМАТЫ ИНСТРУКЦИИ SSE B.8 И КОДИРОВКА

инструкции SSE используют формат ModR/M и предшествуются 0FH байтом префикса. В целом операции не дублированы для обеспечения двух направлений (то есть, отдельная загрузка и варианты хранилища).

следующие три таблицы (Таблицы B-22, B-23 и B-24) показывают форматы и кодировку для SIMD SSE, с плавающей точкой, целое число SIMD, и cacheability и инструкции для заказа памяти, соответственно. Некоторые инструкции SSE требуют обязательного префикса (66-й, F2H, F3H) как часть двухбайтового кода операции. Обязательные префиксы включены в таблицы.

<час>

И также

2.1.2 Кодов операций

А основной код операции может быть 1, 2, или 3 байта в длине. Дополнительное 3-разрядное поле кода операции иногда кодируется в байте ModR/M. Меньшие поля могут быть определены в рамках основного кода операции. Такие поля определяют направление операции, размер смещений, кодирования регистра, кодов условий или расширения знака. Кодирование полей, используемых кодом операции, варьируется в зависимости от класса операции.

Двухбайтовые форматы кода операции для инструкций SIMD и общего назначения состоят из одного из следующего:

  • байт кода операции Escape 0FH как основной код операции и второй байт кода операции.
  • А обязательный префикс (66H, F2H, или F3H), байт кода операции Escape и второй байт кода операции (то же как предыдущий маркер).

, Например, CVTDQ2PD состоит из следующей последовательности: F3 0F E6. первый байт является обязательным префиксом (это не рассматривают как повторный префикс) . Трехбайтовые форматы кода операции для инструкций SIMD и общего назначения состоят из одного из следующего:

  • байт кода операции Escape 0FH как основной код операции, плюс два дополнительных байта кода операции.
  • А обязательный префикс (66-й, F2H или F3H), байт кода операции Escape, плюс два дополнительных байта кода операции (то же как предыдущий маркер).

, Например, PHADDW для регистров XMM состоит из следующей последовательности: 66 0F 38 01. Первый байт является обязательным префиксом.

1
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: