Здравствуйте, rm822, Вы писали:
R>Единственное с чем компилятор обязан в данном случае считаться это volatile и получение адреса, но ИМХО либо вы неверно интерпретируете результаты дизассембла.
Во всяком случае выносить из цикла константу — его прямая обязанность, а он заносит. Более пристальный осмотр показал, что в цикле производится 160 умножений (fmul) вместо 16 требуемых (вектор * матрицу 4x4). Причем сбой происходит именно из-за попытки оптимизатора функцию умножения вектора на число сделать inline. Если запретить inline, то скорость с 720 тактов на операцию возрастает до 95. Мораль всего этого такова — доверяй, но проверяй. Так на ровном месте можно терять порядки производительности...