Hardware - разное



CИСТЕМА КОМАНД IA- - часть 6


Арифметические команды включают операции типа "умножить-и-сложить" и "умножить-и-вычесть", команды вычисления максимума/минимума, а также команды расчета обратной величины и обратного квадратного корня. Применение двух последних вместо команд деления и квадратного корня соответственно упрощает работу с конвейерами. Реализация команды обращения вместо деления была применена, как известно, еще в легендарном Cray-1.

Приведем Пример 2, иллюстрирующий как работу с плавающей запятой, так и организацию циклов со счетчиком - сложение двух массивов чисел с плавающей запятой (DP).

Пример 2.

Фрагмент программы в фортрановском представлении: DO I=1,N C(I)=A(I)+B(I) ENDDO

в ассемблерном: Lbl: ldfd f6=[r6],8 //Загрузка в f6 A(I) ldfd f7=[r7],8;; //Загрузка в f7 B(I) fadd f8=f6, f7;; //Сложение f6 и f7 stfd [r8]=f8,8 //Запись C(I) br.cloop Lbl;; //Переход на метку

В его ассемблерном представлении приведено только собственно тело цикла.

В этом примере предполагается, что в регистре r6 лежит адрес начала массива A, в r7 - начала массива B, а в r8 - начала массива С. После выполнения каждой команды ldfd и команды stfd содержимое регистров r6-8 соответственно увеличивается на 8 (размер элемента массива в байтах), что указывается в последнем аргументе этих команд. Команда fadd складывает регистры f6 и f7, помещая результат в f8. Наконец, br.cloop обеспечивает переход на начало тела цикла. Не правда ли, очень похоже на старый добрый RISC? То ли еще будет...




Содержание  Назад  Вперед