Справочник B вычислительных операций
Fn = FLOAT Rx BY Ry
Fn = FLOAT Rx
Синтаксис:
Fn = FLOAT Rx BY Ry
Fn = FLOAT Rx
Функция:
Преобразование операнда с фиксированной точкой из Rx в результат с плавающей точкой. Если задан коэффициент масштабирования (Ry), то число из Ry (целое с фиксированной точкой в виде двоичного дополнения) прибавляется к порядку результата с плавающей точкой. Окончательный результат помещается в регистр Fn.
Выполняется округление к ближайшему или усечение (в зависимости от заданного режима округления); граница округления всегда 40 бит, независимо от установки бита границы округления в MODE1. Масштабное смещение порядка может вызывать переполнение и потерю значащих разрядов числа с плавающей точкой. При переполнении возвращается ±∞ (округление к ближайшему) или NORM.MAX (округление к нулю); при потере значащих разрядов возвращается ±0.
Флаги состояния:
AZ |
Установлен, если результат ненормализован (несмещенный порядок < – |
|
126) или нулевой, иначе — сброшен |
AU |
Установлен, если результат после округления ненормализован, иначе — |
|
сброшен |
AN |
Установлен, если результат с плавающей точкой отрицательный, иначе — |
|
сброшен |
AV |
Установлен, если результат переполнен (несмещенный порядок >127) |
AC |
Сброшен |
AS |
Сброшен |
AI |
Сброшен |
В Справочник вычислительных операций
Fn = RECIPS Fx
Синтаксис:
Fn = RECIPS Fx
Функция:
Создание 8 разрядного точного начального числа для 1/Fx. Мантисса начального числа определяется из таблицы ROM, используя 7 старших бит (исключая «скрытый» бит) мантиссы Fx как индекс. Несмещенный порядок начального числа вычисляется как двоичное дополнение несмещенного порядка Fx, уменьшенное на единицу; т. е. если е – несмещенный порядок Fx, то несмещенный порядок Fn равен –e – 1. Знак начального числа является знаком входного операнда. Если результат равен ±0, то возвращается ±∞ и устанавливается флаг переполнения. Если несмещенный порядок Fx больше +125, то результат равен ±0. При вводе NAN возвращается NAN (1 во всех разрядах).
В приведенном ниже коде реализуется деление числа с плавающей точкой с использованием итеративного сходящегося алгоритма.* Результат определяется с точностью до одного младшего бита в любом формате, т.е. 32 разрядном или 40 разрядном (32 разрядный только для ADSP 21010). Требуются следующие входные данные: F0=числитель, F12=знаменатель, F11=2.0. Частное возвращается в F0. (Две выделенные жирным шрифтом команды могут быть удалены только в том случае, если необходим результат с точностью до младшего разряда.)
F0=RECIPS F12, F7 = F0; |
{Получение 8-разрядного начального |
|
|
числа R0=1/D} |
F12=F0*F12; |
{D’ = D*R0} |
F7=F0*F7, |
F0=F11-F12; |
{F0=R1=2-D’, F7=N*R0} |
F12=F0*F12; |
{F12=D’-D’*R1} |
F7=F0*F7, |
F0=F11-F12; |
{F7=N*R0*R1, F0=R2=2-D’} |
F12=F0*F12; |
{F12=D’=D’*R2} |
F7=F0*F7, |
F0=F11-F12; |
{F7=N*R0*R1*R2, F0=R3=2-D’} |
F0=F0*F7; |
|
{F7=N*R0*R1*R2*R3} |
* Заметим, что этот сегмент кода можно преобразовать в подпрограмму, добавив фразу RTS(DB) в третью от конца команду.
Справочник B вычислительных операций
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой равен ±0 (несмещенный |
|
порядок >+125), иначе — сброшен |
AU |
Сброшен |
AN |
Установлен, если входной операнд отрицательный, иначе — сброшен |
AV |
Установлен, если входной операнд ±0, иначе — сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если входной операнд NAN, иначе — сброшен |
В Справочник вычислительных операций
Fn = RSQRTS Fx
Синтаксис:
Fn = RSQRTS Fx
Функция:
Создание 4 разрядного точного начального числа для 1/√Fx. Мантисса начального числа определяется из таблицы ROM, используя в качестве индекса младшие биты смещенного порядка Fx, объединенные с 6 ю старшими битами (за исключением «скрытого» бита) мантиссы Fx. Несмещенный порядок начального числа вычисляется как двоичное дополнение несмещенного порядка Fx, сдвинутое вправо на один бит и уменьшенное на единицу; т. е. если е – несмещенный порядок Fx, то несмещенный порядок Fn=INT[e/2]–1. Знак числа является знаком входного операнда. Если результат равен ±0, то возвращается
±∞ и устанавливается флаг переполнения. Если результат равен +∞, то возвращается +0. При вводе NAN возвращается NAN (1 во всех разрядах).
В приведенном ниже коде реализуется вычисление 1/√х числа с плавающей точкой с использованием итерационного алгоритма Ньютона Рафсона.* Результат определяется с точностью до одного младшего бита в любом формате, т. е. 32 разрядном или 40 разрядном (32 разрядный формат только для ADSP 21010). Для вычисления квадратного корня надо просто перемножить результат и первоначальный входной операнд. Требуются следующие входные данные: F0=входной операнд; F8=3.0, F1=0.5. Результат возвращается в F4. (Четыре выделенные жирным шрифтом команды могут быть удалены только в том случае, если необходим результат с точностью до младшего бита.)
F4=RSQRTS F0; |
{Выборка 4-разрядного начального числа} |
F12=F4*F4; |
{F12=X0^2} |
F12=F12*F0; |
{F12=C*X0^2} |
F4=F1*F4, F12=F8-F12; {F4=.5*X0, F12=3-C*X0^2} |
F4=F4*F12; |
{F4=X1=.5*X0(3-C*X0 ^ 2)} |
F12=F4*F4; |
{F12=X1^2} |
F12=F12*F0; |
{F12=C*X1^2} |
F4=F1*F4, F12=F8-F12; {F4=.5*X1, F12=3-C*X1^2}
F4=F4*F12; {F4=X2=.5*X1(3-C*X1^2)}
F12=F4*F4; {F12=X2^2}
F12=F12*F0; {F12=C*X2^2}
F4=F1*F4, F12=F8-F12; {F4=.5*X2, F12=3-C*X2^2}
F4=F4*F12; {F4=X3=.5*X2(3-C*X2^2)}
Справочник B вычислительных операций
*Заметим, что этот сегмент кода можно преобразовать в подпрограмму добавив фразу RTS(DB) в третью от конца команду.
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой равен +0 (Fx=+∞), иначе — |
|
сброшен |
AU |
Сброшен |
AN |
Установлен, если входной операнд –0, иначе — сброшен |
AV |
Установлен, если входной операнд ±0, иначе — сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если входной операнд отрицательный и ненулевой или NAN, |
|
иначе — сброшен |
В Справочник вычислительных операций
Fn = Fx COPYSIGN Fy
Синтаксис:
Fn = Fx COPYSIGN Fy
Функция:
Копирование знака операнда с плавающей точкой из Fy в операнд с плавающей точкой в Fx без изменения порядка или мантиссы. Результат помещается в регистр Fn. Ненормализованные входные операнды обнуляются. При вводе NAN возвращается NAN (1 во всех разрядах).
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой равен ±0, иначе — |
|
сброшен |
AU |
Сброшен |
AN |
Установлен, если результат с плавающей точкой отрицательный, иначе — |
|
сброшен |
AV |
Сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если любой из входных операндов NAN, иначе — сброшен |
Справочник B вычислительных операций
Fn = MIN (Fx, Fy)
Синтаксис:
Fn = MIN (Fx, Fy)
Функция:
Возвращение меньшего из операндов с плавающей точкой в регистрах Fx и Fy. При вводе NAN возвращается NAN (1 во всех разрядах). Минимальным значением из +0 и –0 является –0. Ненормализованные входные операнды обнуляются.
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой ±0, иначе — сброшен |
AU |
Сброшен |
AN |
Установлен, если результат с плавающей точкой отрицательный, иначе — |
|
сброшен |
AV |
Сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если любой из входных операндов NAN, иначе — сброшен |
В Справочник вычислительных операций
Fn = MAX (Fx, Fy)
Синтаксис:
Fn = MAX (Fx, Fy)
Функция:
Возвращение большего из операндов с плавающей точкой в регистрах Fx и Fy. При вводе NAN возвращается NAN (1 во всех разрядах). Максимальным значением из +0 и –0 является +0. Ненормализованные входные операнды обнуляются.
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой ±0, иначе — сброшен |
AU |
Сброшен |
AN |
Установлен, если результат с плавающей точкой отрицательный, иначе — |
|
сброшен |
AV |
Сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если любой из входных операндов NAN, иначе — сброшен |
Справочник B вычислительных операций
Fn = CLIP Fx BY Fy
Синтаксис:
Fn = CLIP Fx BY Fy
Функция:
Возвращение операнда с плавающей точкой из Fx, если абсолютное значение операнда в Fx меньше абсолютного значения операнда с плавающей точкой в Fy. Иначе, возвращается |Fy|, если значение Fx положительное, и –|Fy|, если значение Fx отрицательное. При вводе NAN возвращается NAN (1 во всех разрядах). Ненормализованные входные операнды обнуляются.
Флаги состояния:
AZ |
Установлен, если результат с плавающей точкой равен ±0, иначе — |
|
сброшен |
AU |
Сброшен |
AN |
Установлен, если результат с плавающей точкой отрицательный, иначе — |
|
сброшен |
AV |
Сброшен |
AC |
Сброшен |
AS |
Сброшен |
AI |
Установлен, если любой из входных операндов NAN, иначе — сброшен |
В Справочник вычислительных операций
В.2.2. Операции умножителя
В этом разделе описываются операции умножителя. В табл. В.3 приведены синтаксис и код операции для операций умножителя с фиксированной и плавающей точкой. Подробное описание каждой операции приведено ниже в этом разделе.
С фиксированной точкой:
Синтаксис |
|
|
Rn |
= Rx * Ry |
mod2* |
MRF = Rx * Ry |
mod2* |
MRB = Rx * Ry |
mod2* |
Rn |
= MRF + Rx * Ry |
mod2* |
Rn |
= MRB + Rx * Ry |
mod2* |
MRF = MRF + Rx * Ry |
mod2* |
MRB = MRB + Rx * Ry |
mod2* |
Rn |
= MRF – Rx * Ry |
mod2* |
Rn |
= MRB – Rx * Ry |
mod2* |
MRF |
= MRF – Rx * Ry |
mod2* |
MRB |
= MRB – Rx * Ry |
mod2* |
Rn |
= SAT MRF |
mod1** |
Rn |
= SAT MRB |
mod1** |
MRF |
= SAT MRF |
mod1** |
MRB |
= SAT MRB |
mod1** |
Rn |
= RND MRF |
mod1** |
Rn |
= RND MRB |
mod1** |
HRF |
= RND MRF |
mod1** |
MRB = RND MRB |
mod1** |
MRF |
= 0 |
|
|
MRB |
= 0 |
|
|
MR |
= Rn |
|
|
Rn |
= MR |
|
|
С плавающей точкой:
Синтаксис
Fn = Fx * Fy * См. табл. В.4
**См. табл. В.5 у у вход; 1=знаковый, 0=беззнаковый
х х вход; 1=знаковый, 0=беззнаковый f формат; 1=дробный, 0=целый
rокругление; 1=есть, 0=нет
Код операции
01yx f00r 01yx f10r 01yx f11r
10yx f00r 10yx f01r 10yx f10r 10yx f11r
11yx f00r 11yx f01r 11yx f10r 11yx f11r
0000 f00x
0000 f01x
0000 f10x
0000 f11x
0001 100x
0001 101x
0001 110x
0001 111x
0001 0100
0001 0110
Код операции
0011 0000
Таблица В.3. Операции умножителя