Читайте также: |
|
Основной цикл шифрования на SSE в восемь потоков.
SSE0, SSE1, SSE6, SSE7 содержат поочередно накопители1 и накопители2 (восемь накопителей по 4 байта каждый)
Сначала готовятся индексные регистры для работы коммутатора
- младшие тетрады в байтах маскируются
- старшие тетрады сначала сдвигаются на место младших и затем маскируются той же маской.
Сборка индексных регистров оптимизирована, но суть та же, что и в примере №3
Пример кода не оптимизирован по быстродействию, но максимально удобен для понимания.
Ключи шифрования находятся в ОП.
Use64
macro zxmm kl
{
;/////подготовка блока замен 1 накопитель
vpsrlq xmm3,xmm5,4;
pand xmm5,[esp+080h]; технологическая маска выделения младших тетрад
pand xmm3,[esp+080h]; технологическая маска выделения младших тетрад
;/////замена 1-2байт -м.т. 3-4байт с.т.
vpblendw xmm2,xmm3,xmm5,055h;
;/////замена 1-2байт - с.т. 3-4байт м.т.
pblendw xmm5,xmm3,0aah;
;/////////блок замен 1-2 байты - 1 накопитель
vpshufb xmm15,xmm8,xmm2;
pand xmm15,[esp];
vpshufb xmm14,xmm9,xmm2;
pand xmm14,[esp+20h];
por xmm14,xmm15;
;/////////блок замен 3-4 байты - 1 накопитель
vpshufb xmm12,xmm10,xmm5;
pand xmm12,[esp+40h];
por xmm12,xmm14;
vpshufb xmm13,xmm11,xmm5;
pand xmm13,[esp+60h];
;/////подготовка блока замен -2 накопитель
vpsrlq xmm3,xmm4,4;
pand xmm4,[esp+80h];
pand xmm3,[esp+080h];
;/////замена 1-2байт -м.т. 3-4байт с.т.
vpblendw xmm2,xmm3,xmm4,055h;
;/////замена 1-2байт - с.т. 3-4байт м.т.
pblendw xmm4,xmm3,0aah;
;/////////блок замен 1-2 байты - 2 накопитель
vpshufb xmm14,xmm8,xmm2;
pand xmm14,[esp];
vpshufb xmm15,xmm9,xmm2;
pand xmm15,[esp+20h];
por xmm14,xmm15;
;/////////блок замен 3-4 байты - 2 накопитель
vpshufb xmm3,xmm10,xmm4;
pand xmm3,[esp+40h];
por xmm14,xmm3;
vpshufb xmm15,xmm11,xmm4;
pand xmm15,[esp+60h];
}
;///////////////////////////////тестовый модуль 1 проход
macro c1 kl;
{
zxmm kl;
;/////циклический сдвиг на 11 влево - 1 накопитель
por xmm13,xmm12;
vpslld xmm12,xmm13,11;
psrld xmm13,21;
xorps xmm7,xmm12;
xorps xmm7,xmm13; суммирование заполнение1 1 накопитель
vpaddd xmm5,xmm7,[esp+100h+kl*32]; сложить заполнение с ключом
;/////циклический сдвиг на 11 влево - 2 накопитель
por xmm15,xmm14;
vpslld xmm14,xmm15,11;
psrld xmm15,21;
xorps xmm1,xmm14;
xorps xmm1,xmm15; суммирование заполнение1 2 накопитель
vpaddd xmm4,xmm1,[esp+120h+kl*32]; сложить заполнение с ключом
}
;///////////////////////////////тестовый модуль 2 проход
macro c2 kl;
{
zxmm kl;
;/////циклический сдвиг на 11 влево - 1 накопитель
por xmm13,xmm12;
vpslld xmm12,xmm13,11;
psrld xmm13,21;
xorps xmm6,xmm12;
xorps xmm6,xmm13; суммирование заполнение 0 1 накопитель
vpaddd xmm5,xmm6,[esp+100h+kl*32]; сложить заполнение с ключом
;/////циклический сдвиг на 11 влево - 2 накопитель
por xmm15,xmm14;
vpslld xmm14,xmm15,11;
psrld xmm15,21;
xorps xmm0,xmm14;
xorps xmm0,xmm15; суммирование заполнение 0 2 накопитель
vpaddd xmm4,xmm0,[esp+120h+kl*32]; сложить заполнение с ключом
}
Дата добавления: 2015-07-08; просмотров: 145 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Основной цикл шифрования на SSE в четыре потока. | | | ГЛОМЕРУЛОНЕФРИТ |