Читайте также:
|
|
SSE6, SSE7 содержат поочередно накопители1 и накопители2 (четыре накопителя по 4 байта каждый)
Сначала готовятся индексные регистры для работы коммутатора
- младшие тетрады в байтах маскируются
- старшие тетрады сначала сдвигаются на место младших и затем маскируются
Индексный регистр SSE2 содержит индексы младних тетрад 1,2 байта и индексы старших тетрад 3,4 байта.
Индексный регистр SSE3 содержит индексы младних тетрад 3,4 байта и индексы старших тетрад 1,2 байта.
Технологические маски содержатся в ОП. Маска имеет размер 16 байт, в комментариях указана маска только для одного потока, остальные три маски аналогичные.
После выборки через коммутаторы информации с узлов замен (регистры SSE8, SSE9, SSE10, SSE11). С каждого узла замены считывается две актуальные тетрады, остальные мусор.
Чтобы отсечь мусор считанная информация маскируется технологическими масками, отсекающими лишние тетрады. Маски имеют размер 16 байт, в комментарии показана маска для одного потока, остальные три потока имеют аналогичные маски.
Затем производится сборка тетрад в полное 32битное слово для каждого потока.
Собранное слово сдвигается циклически на 11 позиций влево, после чего складывается с накопителем1.
Циклический сдвиг выполнен на командах логического сдвига, поскольку в системе команд AVX отсутствуют команды ротации.
Пример кода не оптимизирован по быстродействию, но максимально удобен для понимания.
Ключи шифрования для каждого потока находятся в ОП.
Use64
macro zxmm kl
{
;/////подготовка блока замен 1-2байт
vpand xmm2,xmm5,[esp+80h]; 000000f0fh; маска м-тетрад 1b,2b
vpsrlq xmm3,xmm5,4;
vpand xmm13,xmm3,[esp+090h]; 00f0f0000h; маска с-тетрад 4b,3b
por xmm2,xmm13;
;/////подготовка блока замен 3-4байт
pand xmm3,[esp+0a0h]; 000000f0fh; маска c-тетрад 1б,2b
pand xmm5,[esp+0b0h]; 00f0f0000h; маска 4b-mт,3b-mt
por xmm3,xmm5;
;/////////блок замен 1-2 байты
vpshufb xmm12,xmm8,xmm2; блок замен замена 1б-мч, 4б-сч
pand xmm12,[esp]; 0f000000fh; маска 1b-мт,4-ct
vpshufb xmm13,xmm9,xmm2; блок замен замена 2б-мч, 3б-сч
pand xmm13,[esp+20h]; 000f00f00h; маска 2б-mt,3b-ct
;/////////блок замен 3-4 байты
vpshufb xmm14,xmm10,xmm3; блок замен замена 3б-мч, 2б-сч
pand xmm14,[esp+40h]; 0000ff000h; маска 2б-ст, 3bmt
vpshufb xmm15,xmm11,xmm3; блок замен замена 4б-мч, 1б-сч
pand xmm15,[esp+60h]; 00f0000f0h; маска 1b -ct, 4b-mt
;///////сборка тетрад
por xmm13,xmm12;
por xmm13,xmm14;
por xmm13,xmm15;
;//////////загрузка следующих ключей
movdqa xmm5,[esp+100h+kl*16];
}
;///////////////////////////////тестовый модуль 1 проход
macro c1 kl;
{
zxmm kl;
;/////циклический сдвиг на 11 влево
vpslld xmm12,xmm13,11; левый сдвиг на 11 позиций
psrld xmm13,21; правый сдвиг на 21 позицию
pxor xmm7,xmm12; суммирование заполнение и накопитель
pxor xmm7,xmm13; суммирование заполнение и накопитель
paddd xmm5,xmm7; сложить с ключом накопитель
}
;///////////////////////////////тестовый модуль 2 проход
macro c2 kl;
{
zxmm kl;
;/////циклический сдвиг на 11 влево
vpslld xmm12,xmm13,11; левый сдвиг на 11 позиций
psrld xmm13,21; правый сдвиг на 21 позицию
pxor xmm6,xmm12; суммирование заполнение и накопитель
pxor xmm6,xmm13; суммирование заполнение и накопитель
paddd xmm5,xmm6; сложить с ключом накопитель
}
Дата добавления: 2015-07-08; просмотров: 137 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Цена вопроса | | | Приложение №4. |