Возможно xmm0
содержит результат некоторых вычислений, выполненных в целочисленной области (с целочисленной инструкцией SSE). Ожидается, что следующая инструкция, использующая xmm0
, будет находиться в области с плавающей запятой (инструкция SSE с плавающей запятой).
Nehalem может выполнить эту следующую инструкцию быстрее, если xmm0
будет перенесен в область с плавающей запятой с такой инструкцией, как movaps
или movups
. И может быть полезно выполнить эту миграцию до инструкции условного перехода. В этом случае миграция выполняется только один раз. Если инструкция movups
не используется, миграция может быть выполнена дважды (автоматически с помощью первой инструкции FP в этом регистре), первый раз спекулятивно, на неверно предсказанной ветви, и второй раз - на правильной ветви.
Кажется, компилятор заметил, что лучше оптимизировать цепочки зависимостей вычислений, чем оптимизировать размер кода и ресурсы выполнения.