оптимизированный вариант
Такая техника оптимизации называется программной конвейеризацией (software pipelining) и из трех рассматриваемых компиляторов ею не обладает ни один. Только gcc робко пытается ослабить зависимость по sum, используя два регистра при развороте на четыре итерации. Остальные же компиляторы грузят все ячейки в один и тот же регистр, очевидно, руководствуясь принципом экономии. Регистров общего назначения всего семь и их постоянно не хватает. К сожалению, компилятор не отличает ситуацию действительно дефицита регистров от их избытка, вынуждая нас прибегать к ручной оптимизации.
* msvc: программная конвейеризация не поддерживается
* icl: программная конвейеризация не поддерживается
* gcc: программная конвейеризация частично поддерживается