Il utilise bien les instructions SSE.
Par contre, si je comprend bien, il charge un couple de y1, y2,y3 dans les registres xmm1, xmm2 et xmm4.
Puis met xmm1 dans xmm0
Puis met xmm2 dans xmm1
Puis additionne xmm4 + xmm1 + xmm2.
Dites monsieur gcc, ca sert à quoi ce déplacement des registres 2 et 1 dans 1 et 0 ??
C'est probablement pour cela que tu vois une différence (injustifiable à mon avis) entre le "+=" et les "+" .
Il ne fait pas cette entourloupe pour pour la série de "+" .
[^] # Re: Assembleur
Posté par _Sil_ . En réponse au message Parallelisation d'une boucle (théoriquement) trivialement parallélisable. Évalué à 1.
yvar1[i] += yvar2[i] + yvar3[i];
4007f0: f2 0f 10 09 movsd (%rcx),%xmm1
...
4007f7: f2 0f 10 10 movsd (%rax),%xmm2
4007fb: 66 0f 16 49 08 movhpd 0x8(%rcx),%xmm1
400800: f2 0f 10 22 movsd (%rdx),%xmm4
400804: 66 0f 16 50 08 movhpd 0x8(%rax),%xmm2
400809: 66 0f 16 62 08 movhpd 0x8(%rdx),%xmm4
40080e: 66 0f 28 c1 movapd %xmm1,%xmm0
400812: 66 0f 28 ca movapd %xmm2,%xmm1
400816: 66 0f 58 cc addpd %xmm4,%xmm1
40081a: 66 0f 58 c1 addpd %xmm1,%xmm0
40081e: 66 0f 13 01 movlpd %xmm0,(%rcx)
400822: 66 0f 17 41 08 movhpd %xmm0,0x8(%rcx)
Il utilise bien les instructions SSE.
Par contre, si je comprend bien, il charge un couple de y1, y2,y3 dans les registres xmm1, xmm2 et xmm4.
Puis met xmm1 dans xmm0
Puis met xmm2 dans xmm1
Puis additionne xmm4 + xmm1 + xmm2.
Dites monsieur gcc, ca sert à quoi ce déplacement des registres 2 et 1 dans 1 et 0 ??
C'est probablement pour cela que tu vois une différence (injustifiable à mon avis) entre le "+=" et les "+" .
Il ne fait pas cette entourloupe pour pour la série de "+" .