Selon l'exercice suivant : Écrire une méthode qui calcule et renvoie la somme de deux doubles donnés en paramètres.
En assembleur GAS x64 :
somme:
fldl (%rcx) # Addresse du premier paramètre dans rcx
faddl (%rdx) # Addresse du deuxième dans rdx
fstpl 8(%rsp) # Place la somme en mémoire temporaire
movq 8(%rsp),%rax # Met le résultat dans le registre de retour
ret
En C :
double somme(double x, double y)
{
return x + y;
}
Code assembleur produit par GCC (de la version C) :
movsd %xmm0, 16(%rbp)
movsd %xmm1, 24(%rbp)
movsd 16(%rbp), %xmm0
addsd 24(%rbp), %xmm0
movq %xmm0, %rax
movq %rax, %xmm0
Pourquoi GCC utilise t-il les instructions SSE au lieu d'utiliser le floating point stack?
Quel sont les avantages à utiliser l'un ou l'autre dans ce cas ci?