Нормализация числа из двух дополнений - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю на каком-то процессоре Tensilica и не понимаю процесса нормализации.

NSA - нормализованная величина сдвига

NSA при, как

NSA вычисляетвеличина левого сдвига, которая нормализует содержимое дополнения к двум адресам регистра адресов, и записывает эту сумму (в диапазоне от 0 до 31) в регистр адресов.

Если as содержит 0 или -1, NSA возвращает 31. Использование SSL и SLL для сдвига влево в результате результата NSA дает наименьшее значение, для которого биты 31 и 30 отличаются, если только не содержит 0.

enter image description here

Таким образом, в основном АНБ рассчитывает величину сдвига (0 ... 31) и записывает в регистр AT.

Вопрос в том, как он вычисляетчто значит нормализация двух дополнительных значений из AS?

Это не инструкция с плавающей запятой.В AS может быть значение со знаком на 32 бита (31 + знак)

Спасибо за разъяснения,

РЕДАКТИРОВАТЬ: должно быть так (спасибо Питеру Кордесу)

0x00000004 4                         _______  number
                                    |       
0    0    0    0    0    0    0    1| 
0000 0000 0000 0000 0000 0000 0000 0100
<--------------------------------> |
              NSA = 28 bits        |________  sign 


0x00000003 3                          ______  number
                                     |      
0    0    0    0    0    0    0    1 | 
0000 0000 0000 0000 0000 0000 0000 0011
<---------------------------------->|
              NSA = 29 bits         |_______  sign 


0x00000002 2                          ______  number
                                     |      
0    0    0    0    0    0    0    1 | 
0000 0000 0000 0000 0000 0000 0000 0010
<---------------------------------->|
              NSA = 29 bits         |_______  sign 


0x00000001 1                           _____  number
                                      |     
0    0    0    0    0    0    0    1  | 
0000 0000 0000 0000 0000 0000 0000 0001
<----------------------------------->|
              NSA = 30 bits          |______  sign 



0xFFFFFFFF 0    NSA = 31
0xFFFFFFFF -1   NSA = 31


0xFFFFFFFE -2                          _____  number
                                      |     
F    F    F    F    F    F    F    E  | 
1111 1111 1111 1111 1111 1111 1111 1110
<----------------------------------->|
              NSA = 30 bits          |______  sign 



0xFFFFFFFD -3                         ______  number    
                                     |      
F    F    F    F    F    F    F    D | 
1111 1111 1111 1111 1111 1111 1111 1101
<---------------------------------->|
              NSA = 29 bits         |_______  sign  



0xFFFFFFFC -4                         ______  number    
                                     |      
F    F    F    F    F    F    F    C | 
1111 1111 1111 1111 1111 1111 1111 1100
<---------------------------------->|
              NSA = 29 bits         |_______  sign      


0xFFFFFFFB -5                        _______  number    
                                    |       
F    F    F    F    F    F    F    B| 
1111 1111 1111 1111 1111 1111 1111 1011
<--------------------------------> |
              NSA = 28 bits        |________  sign                    

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

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

Обычно операции с плавающей запятой всегда имеютсамый значительный бит их набора мантиссы, фактически этот бит часто не хранится явно.Учитывая необработанный результат какой-либо математической операции, АНБ дает вам сумму, чтобы переместить мантиссу, чтобы вернуть ее в нормальную форму.(Вы также скорректировали бы показатель степени на ту же величину, чтобы плавающее число все еще представляло правильное значение.)

0 голосов
/ 19 февраля 2019

Звучит как инструкция подсчета начальных нулей, за исключением того, что она подсчитывает, сколько всех начальных битов имеют одинаковое значение, и выдает результат этого - 1.

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


Сдвиг влево на эту величину «нормализует» значение для использования всего диапазона -2^31 .. 2^31-1 без переполнения.Таким образом, результат x << NSA(x) будет в одном из 2 диапазонов -2^31 .. -(2^30+1) или 2^30 .. 2^31-1.(Как говорят в документах, сдвиг влево на эту величину приводит к значению, при котором знаковый бит отличается от приведенного ниже бита. За исключением случаев, когда 0 или -1 представляют собой особый случай.)

Предположительнонормальный вариант использования состоит в том, чтобы использовать одно и то же значение сдвига нормализации для нескольких входных значений?

...