Как установить регистр с плавающей запятой в 0 в MIPS (или очистить его значение).

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

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

Вещи, которые я пытался установить в регистре с плавающей запятой как ноль:

l.s $f3,$0 #loading zero into the register

addi $t0,$t0,$zero #setting a temp register as zero
l.s $f3,($t0)

Я продолжаю получать сообщение об ошибке, указывающее на исключение времени выполнения и адрес вне допустимого диапазона.


person Cain    schedule 31.03.2014    source источник


Ответы (1)


То, что вы делаете, загружает поплавок с адреса 0, следовательно, ошибка. Вместо этого вы хотите загрузить значение 0. Вы можете сделать это mtc1 $zero, $f3. Это работает, потому что все нулевые биты также означают ноль в числах с плавающей запятой. Для других значений вам нужно будет сделать cvt.s.w после этого, чтобы преобразовать целое число в число с плавающей запятой. В качестве альтернативы вы можете вычесть регистр из самого себя с помощью sub.s $f3, $f3, $f3. Не знаю, работает ли это для всех возможных значений (я думаю о NaN, Inf и т. д.) или это быстрее, чем передача из целочисленного нулевого регистра.

person Jester    schedule 31.03.2014