Здравствуйте, Sinclair, Вы писали:
S> Ну, то есть может быть переход на SSE2 у них совпал с более вменяемым распределением локалов по регистрам — тогда, возможно, результат был чуть менее плачевным. А если нет — то увы, вот это вот тасование значений туда-сюда убивает всю производительность.
Вот так это выглядит на XE2:
procedure test;
var
S, a,b,c : Double;
begin
S := Sqrt(a*a+b*b+c*c);
end;
Project1.dpr.14: S := Sqrt(a*a+b*b+c*c);
0000000000425968 660F28D8 movapd xmm3,xmm0
000000000042596C F20F59D8 mulsd xmm3,xmm0
0000000000425970 660F28C1 movapd xmm0,xmm1
0000000000425974 F20F59C1 mulsd xmm0,xmm1
0000000000425978 F20F58D8 addsd xmm3,xmm0
000000000042597C 660F28C2 movapd xmm0,xmm2
0000000000425980 F20F59C2 mulsd xmm0,xmm2
0000000000425984 F20F58D8 addsd xmm3,xmm0
0000000000425988 660F29D8 movapd xmm0,xmm3
000000000042598C E88FFBFDFF call Sqrt