Bonjour,
Je suis en train de migrer une boucle C++ en assembleur MMX.
L'algo est une différence d'image Y8. Voici mon code :
En gros, je fais une différence absolue entre 2 × 8 pixels, puis je détecte tous les pixels > 0xCC (mon threshold). L'instruction d'après passe tous les pixels supérieurs au threshold à la valeur 0xFF, puis à 0x01. J'aimerais récupérer le nombre de pixels supérieurs au threshold. En gros, comment faire une addition de tous les bytes d'un registre MMX 64 bits ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 __int64 t = 0xCCCCCCCCCCCCCCCC; __int64 zer = 0x0; __int64 tCount = 0x0101010101010101; myloop: movq mm0, [eax] ;//Chargement de 8 pxl movq mm1, [ebx] ;//Chargement de 8 pxl bkg //Compute the absolute difference of 2 unsigned numbers. movq mm2, mm0 ; //make a copy of MM0 psubusb mm0, mm1 ; //compute difference one way psubusb mm1, mm2 ; //compute difference the over way por mm0, mm1 ; // OR them together //Calcul threshold movq mm2, t ; psubusb mm0, t ; pCMPGTb mm0, zer ; pand mm0, tCount ; add eax, 8 add ebx, 8 dec ecx jnz myloop
Merci d'avance.





Répondre avec citation



Partager