Разница между инструкциями с одинарной и двойной точностью

Все мы знаем, что MIPS FPU имеет две точности: одинарную или двойную. Когда я просмотрел это в наборе команд, я обнаружил, что для одной и той же операции инструкции для одинарной точности и двойной точности не отличаются.

Например, здесь из Архитектура MIPS для программистов Том II:, инструкция ADD.fmt введите описание изображения здесь

Независимо от того, является ли это двойная или одинарная точность, операнд и код функции одинаковы. Как декодер узнает, что это инструкция одинарной или двойной точности? Или какая-то скрытая информация в 5-битном fmt-регионе? Не могу найти хороших ответов от гугла, может кто-нибудь объяснить, как работает эта инструкция?


person Shuaiyu Jiang    schedule 09.07.2015    source источник


Ответы (1)


Подробная информация об этом содержится в документации MIPS в разделе «Поле формата операнда FPU». Поле fmt содержит эти конкретные данные.

Поле fmt имеет длину 5 бит и может принимать следующие значения:

0-15: reserved
16: single
17: double
18-19: reserved
20: word
21: long
22-31: reserved

Word и Long не реализованы для ADD.S и ADD.D.

person karatedog    schedule 10.07.2015
comment
Область fmt в инструкции ADD.fmt всего 5-битная. Но в вашем ответе fmt содержит полностью 32-битный регистр. Это fmt - отдельный регистр или что-то в этом роде? Когда мы реализуем эту инструкцию, будет ли оборудование двух разной точности одинаковым? Я имею в виду, что если FPU поддерживает двойную точность, то оборудование предназначено для двойной точности, и независимо от того, является ли инструкция одинарной или двойной. - person Shuaiyu Jiang; 10.07.2015
comment
Я написал возможные значения, а не битовые позиции. 5 бит - это 0-31. - person karatedog; 11.07.2015
comment
@ShuaiyuJiang Я обновил ответ, чтобы избежать путаницы. - person karatedog; 11.07.2015