Чё то сразу засомневался что MOV'ы медленнее XCHG'ей...
В общем сравнил на Intel Atom:
3×5 тех самых MOV и 3×5 тех самых XCHG — результат тиков на фотке (слева MOV'ы, справа XCHG'ы)
Более того, походу MOV'ы ещё и закешировались(?) после первого прохода, в отличии от XCHG'ей.
Если эти циферки разделить на 3, то получим тики тех самых пяти MOV/XCHG, а не 3×5.
Наверное не стоило делать 3×5, достаточно было бы просто 5.