Il tuo nuovo codice, compilato con O3, lo eseguo in:
Codice:
real 0m0,354s
user 0m0,354s
sys 0m0,000s
Utilizza un pò meno il set SSE rispetto alle precedenti versioni; non so se sai di che si tratta, ma nei precedenti codici assembly se noti ci sono XMM0, XMM1... e altri registri analoghi. Fanno parte di SSE, e sono registri a 128bit. Quindi già da qui capirai perchè i tuoi precedenti codici erano così tanto veloci: i nostri sfruttavano 64bit per i calcoli (e 32 le versioni a 32bit), i tuoi 128, quindi venivano calcolati 2 valori alla volta (e nel caso delle variabili a 32bit, nel tuo caso ne venivano calcolati 4).