Разница между rem и mfhi в MIPS - PullRequest
0 голосов
/ 06 ноября 2018

Есть ли разница между этим:

rem $s0, $t0, $t1

и это:

div $t0, $t1
mfhi $s0

Я знаю, что первый работает, но я не уверен насчет второго. Это то же самое?

1 Ответ

0 голосов
/ 06 ноября 2018
У

старых MIPS не было rem, только div, который помещал результаты в специальные регистры, чтобы избежать микроархитектурных проблем с обратной записью в файл регистров из инструкции с высокой задержкой в ​​простом конвейере.

Остаток вычисляется не mfhi, а div (выдаёт результат в специальных регистрах lo=quotient и hi=remainder). mfhi это просто "Двигайся от HI"; он копирует из этого специального регистра в регистр общего назначения.

Имена взяты из инструкции mult (которая, как и div, имеет большую задержку, чем add или любая другая целочисленная инструкция ALU, поддерживаемая оригинальным MIPS I), которая дает результат двойной ширины в LO и HI. ( Получение результата от Mult в MIPS и В MIPS, что такое HI и LO ).

Если пункты назначения mult и div были регистрами общего назначения, то в цикле результаты были готовы, также может быть add или lw или любой другой результат, который необходим конвейеру. запись в файл реестра в том же цикле. И эти инструкции дают результаты в 2 слова каждый. Использование специальных регистров LO / HI позволяет избежать конфликтов обратной записи по обеим причинам.

Также помните, что MIPS расшифровывается как минимально заблокированные этапы конвейера, поэтому основной целью проектирования на ранних этапах MIPS было отсутствие аппаратной проверки даже на наличие зависимостей данных, и оставьте это на усмотрение программного обеспечения, чтобы он не пытался прочитать результат до его готовности , Создание mult / mfhi / mflo специальными также помогает в этом, потому что нет никакой зависимости через обычный регистр GP.


Но более современные процессоры MIPS имеют гораздо больший бюджет транзисторов и могут поддерживать такие команды, как mul и rem, которые помещают свои результаты в регистры GP, даже если они имеют большую задержку, чем обычные инструкции ALU.

Я не уверен, когда они были добавлены в ISA; было ли это в эпоху высокопроизводительных процессоров MIPS с неупорядоченным исполнением, таких как r10000.

...