Архитектура Вольта и Тьюринга имеет два основных канала выполнения.
- Канал FMA отвечает за инструкции FFMA, FMUL, FADD, FSWZADD и IMAD.
- Ответственность за канал ALU для целых чисел (кроме IMAD), битовых манипуляций, логических инструкций и команд перемещения данных.
Канал ALU выполняет MOV и IADD3 . Канал FMA выполняет IMAD , включая варианты IMAD.IADD и IMAD.MOV .
Использование IMAD для эмуляции IADD и MOV позволяет компилятору Явно планируйте инструкции для канала FMA вместо канала ALU.
Из выводов компилятора ясно, что компилятор эмулирует двоичные целочисленные добавления и необработанные перемещения с IMAD
, что обобщает оба. Суффикс - это просто дизассемблер, который хорошо сочетается с шаблоном и говорит, что операция семантически эквивалентна более простой операции. Последовательности IMAD.*
умны, используя RZ
(нулевой регистр), 0x0
и 0x1
для достижения sh этого. Когда дизассемблер видит такой шаблон, он добавляет суффикс .MOV
op, чтобы сказать: «Эй, это просто простое движение».
Например,
IMAD.IADD R8, R8, 0x1, R7
- это:
R8 = 1*R8 + R7 = R8 + R7
IADD R8, R8, R7
(если существовало IADD
)
Аналогично для случая MOV
вы видите, что он использует RZ
. Он эмулирует следующее.
MOV R5, 0x0
В Вольте есть операция MOV
, но я почти никогда ее не вижу.
(Есть также версия с левым смещением на К IMAD.SHL
Я думаю, который использует множитель 2 ^ K , где K - величина сдвига.)