, .
paddb | paddw | paddd , , , . , -. -, 64- . . .
paddsb | paddsw , . , -. -, 64- . .
paddusb | paddusw , . , -. -, 64- .
psubb | psubw | psubd , , , . , -. -, 64- . , , sub sbb . , , .
psubusb | psubusw , . , -. -, 64- . , 00h (0000h), ( 00h (0000h)).
MMX- 1024- . , t1 t2 1024- , nmax=1023. , :
asm
mov ecx,nmax+1
xor esi,esi
@l:
mov al, byte ptr t1+[esi];
add al, byte ptr t2+[esi];
mov byte ptr t3+[esi],al
inc esi
loop @l
end;
MMX- t1,t2 t3 :
c:=(nmax div 8)+1;
asm
mov ecx,c
xor esi,esi
@l:
movq mm0, qword ptr t1+[esi];
paddb mm0, qword ptr t2+[esi];
movq qword ptr t3+[esi],mm0
add esi,8
loop @l
emms; .
; Delphi C++ Builder
end;
- 16- , . , . MMX- :
|
|
4 ;
( ) pmulhw pmullw. , , . punpckhwd punpcklwd.
pmulhw , . , -. -, 64- . 32 , 16 . 16 , pmullw.
pmullw , . , -. -, 64- . 32 , 16 . 16 , pmulhw.
.
.data; mem dw 5h df 7ffb22223382hmem1 dw 8008h df 7ffe0f7d0ffahmem2 dw 0 df 0mem3 dw 0 df 0.code......... movq rmmx0, mem;rmmx0=7ffb 2222 3382 0005;mem1 =7ffe 0f7d 0ffa 8008; pmullw rmmx0, mem1;rmmx0=800a ab9a eaf4 8028 movq rmmx1, mem;rmmx1=7ffb 2222 3382 0005;mem1 =7ffe 0f7d 0ffa 8003; pmulhw rmmx1, mem1;rmmx1=3ffc 0210 0336 fffd; rmmx0 movq rmmx2, rmmx0;rmmx2=800a ab9a eaf4 8028; mem2 ; punpcklwd rmmx0, rmmx1;rmmx0=0336 eaf4 fffd 8028 movq mem2, rmmx0;mem2=0336 eaf4 fffd 8028; mem3 ; punpckhwd rmmx2, rmmx1;rmmx2=3ffc 800a 0210 a89a movq mem3, rmmx2;mem3=3ffc 800a 0210 a89a.........- Windows . 7ffb*7ffe = 3ffc 800. mem3. .
pmaddwd , . , -. -, 64- . , . 2.5.
pmaddwd . . (. 2.5) pmaddwd.
.data; mem dw 5h df 7ffb22223382hmem1 dw 8008h df 7ffe0f7d0ffahmem2 dw 0 df 0mem3 dw 0 df 0.code.........movq rmmx0, mem;rmmx0=7ffb 2222 3382 0005;mem =7ffe 0f7d 0ffa 8008 pmaddwd rmmx0, mem1;rmmx0=420d 28a4 0334 6b1c.......... 2.5. pmaddwd
MMX- :
|
|
pcmpeqb | pcmpeqw | pcmpeqd. , - ;
cmpgtb | pcmpgtw | pcmpgtd. .
pcmpeqb | pcmpeqw | pcmpeqd _1,_2 , . _ 1, -. _2 -, 64- . , . , , , . , , , , .
.data; mem dw 5h df 7fff22223382hmem1 dw 5h df 7ffe0f7d0ffah.code.........movq rmmx0, mem;rmmx0=7fff 2222 3382 0005;mem1 =7ffe 0f7d 0ffa 0005pcmpeqw rmmx0, mem1;rmmx0=0000 0000 0000 ffff.........pcmpgtb | pcmpgtw | pcmpgtd _1,_2 , . _ 1, -. _2 -, 64- . , . , , , , _1 , _2. , .
, , ( --) .
.data; mem dw 5h df 7fff22223382hmem1 dw 5h df 7ffe0f7d0ffah. code.........movq rmmx0, mem;rmmx0=7fff 2222 3382 0005;mem1 =7ffe 0f7d f0fa 0005 pcmpgtw rmmx0, mem1;rmmx0=ffff ffff 0000 0000.........