Здравствуйте, rudzuk, Вы писали:
R>В 2011 вышла XE2, у которой в 64-битном режиме плавучка на SSE2.
там проблема была не в SSE2, а в отвратительном кодогенераторе. Грубо говоря, он все операции с плавучкой проводил через память, включая временные переменные.
То есть код вида S := Sqrt(a*a+b*b+c*c) компилировался в последовательность из
FLD a
FMUL a
FST t1
FLD b
FMUL b
FST t2
FLD t1
FADD t2
FST t1
FLD c
FMUL c
FST t2
FLD t1
FADD t2
FST t1
FLD t1
FSQRT
FST s
Когда вот такое чудо выполняется в цикле, то можно охренеть от тормозов. Поэтому даже самые безрукие разработчики вроде меня, столкнувшись с таким поведением, вкрячивали ассемблерные вставки при работе с плавающей запятой.
Ну, то есть может быть переход на SSE2 у них совпал с более вменяемым распределением локалов по регистрам — тогда, возможно, результат был чуть менее плачевным. А если нет — то увы, вот это вот тасование значений туда-сюда убивает всю производительность.