MIPS с плавающей запятой: swc1 против ss

Я выполняю некоторую работу, связанную с MIPS сборкой, и постоянно сталкиваюсь с этими четырьмя псевдоинструкциями загрузки/сохранения с плавающей запятой: l.s, l.d, s.s, s.d. Я нашел документацию в Интернете и выяснил, что есть четыре «настоящих» инструкции, которые делают одно и то же: lwc1, ldc1, swc1 и sdc1.

У меня только вопрос, какая разница? Насколько я могу судить, оба набора инструкций делают одно и то же. Возможно, псевдонимы существуют только потому, что их легче читать?

Заранее спасибо за любую информацию.


person Community    schedule 22.07.2009    source источник


Ответы (2)


У меня только вопрос, какая разница? Насколько я могу судить, оба набора инструкций делают одно и то же.

Да, ты прав. Единственная разница, которая может появиться, это когда псевдоинструкция транслируется более чем в одну "настоящую" инструкцию.

Возможно, псевдонимы существуют только потому, что их легче читать?

Опять же, да. Вот почему они существуют. Они создают иллюзию более выразительного набора инструкций. Quoting Компьютерная организация и дизайн / Patterson & Hennessy:

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

Учитывая ваш пример, более «ясно» сказать:

l.s $f2, 24(t1)       # Load Single contained in 24(t1) to $f2

чем

lwc1 $f2, 24(t1)      # Load Word into Coprocessor 1 from 24(t1) to $f2

как вы можете понять лучше:

move $7, $18        # move contents of $18 to $7

чем

add $7, $18, $0

Мне просто помогает мнемоника, чтобы получить более разборчивый код.

person Eliseo Ocampos    schedule 22.07.2009

На самом деле я думаю,

LWC1 is Load Word to Co-processor 1
LDC1 is Load Double Word to Co-processor 1

так далее...


Угадайте, что я наткнулся на патентную страницу, пытаясь вспомнить их.

Патент США 5555384 – Перепланирование противоречивых инструкций, выданных задержка одной конфликтующей инструкции на той же стадии конвейера, что и третья неконфликтующая инструкция

FPC 20 реализует два типа инструкций загрузки:
LWC1 (сопроцессор загрузки 1 слова, показанный на фиг. 4) и
LDC1 (сопроцессор загрузки двойного слова 1, показанный на фиг. 8).

LWC1 загружает 32-битное слово из подсистемы памяти в регистры общего назначения FPC.
LDC1 загружает 64-битное двойное слово из подсистемы памяти в регистры общего назначения FPC.

что подтверждает это.
(кстати: не утруждайте себя поиском цифр, упомянутых здесь, если у вас нет доступа к сайту).

person nik    schedule 22.07.2009
comment
Спасибо, но я это уже понял (они перечислены в официальной документации). Возможно, я должен был быть более ясным, но мой вопрос заключался в разнице между версией псевдоинструкции каждой инструкции load/store single/double и фактической версией (lwc1 против l.s, ldc1 против l.d и т. д.). - person ; 22.07.2009
comment
Я ожидаю, что причина псевдокода и имени набора инструкций заключается в простоте и переносимости псевдокода между вариантами ISA. - person nik; 22.07.2009