RFC: 1071
Оригинал: Computing the Internet Checksum
Категория: Не определено
Дата публикации:
Авторы: , ,
Перевод: Николай Малых

RFC 1071, Страница 7 из 9

4.3. Cray

Ниже приводится ассемблерная реализация алгоритма для процессора Cray, которую предложил Charley Kline. Расчет контрольной суммы производится как векторная операция, обеспечивающая одновременное сложение до 512 байтов с базовым блоком суммирования 32 бита. Для простоты из примера исключены фрагменты, обеспечивающие возможность работы с короткими блоками.

Регистр A1 содержит адрес 512-байтового блока памяти для контрольной суммы. Две первых копии данных загружаются в два векторных регистра. Один вектор сдвигается вправо на 32 бита, а для второго используется операция AND с 32-битовой маской. После этого векторы складываются. Поскольку все эти операции связаны в цепочку, они дают один результат на каждый цикл процессора. Далее производится сжатие (collaps) результирующего вектора в цикле, который прибавляет каждый элемент к скалярному регистру. В заключение выполняется перенос и результат помещается в 16 битов.

         EBM
         A0      A1
         VL      64            используются полные векторы
         S1      <32           формируется 32-битовая маска из правой части.
         A2      32
         V1      ,A0,1            загрузка пакета в V1
         V2      S1&V1            формирование "правых" 32 битов в V2.
         V3      V1>A2            формирование "левых" 32 битов в V3.
         V1      V2+V3            Сложение.
         A2      63            Подготовка к сжатию в скаляр.
         S1      0
         S4      <16           Form 16-bit mask from the right.
         A4      16
   CK$LOOP S2    V1,A2
         A2      A2-1
         A0      A2
         S1      S1+S2
         JAN     CK$LOOP
         S2      S1&S4           формирование " правых" 16 битов в S2
         S1      S1>A4           формирование " левых" 16 битов в S1
         S1      S1+S2
         S2      S1&S4           формирование " правых" 16 битов в S2
         S1      S1>A4           формирование " левых" 16 битов в S1
         S1      S1+S2
         S1      #S1            Получение дополнения до 1
         CMR            В этой точке S1 будет содержать контрольную сумму.
2007 - 2017 © Русские переводы RFC, IETF, ISOC.