http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49064
--- Comment #3 from Piotr Wyderski <piotr.wyderski at gmail dot com> 2011-05-20 12:50:49 UTC --- #include <cstdint> #include <emmintrin.h> struct X { __m128i* m_Data; std::size_t m_Len; void xor_all(const X& v1, const X& v2); void xor_all2(const X& v1, const X& v2); }; void X::xor_all(const X& v1, const X& v2) { for(std::size_t i = 0; i != m_Len; ++i) { m_Data[i] = v1.m_Data[i] ^ v2.m_Data[i]; } } void X::xor_all2(const X& v1, const X& v2) { __m128i* p0 = m_Data; __m128i* p1 = v1.m_Data; __m128i* p2 = v2.m_Data; for(std::size_t i = 0; i != m_Len; ++i) { p0[i] = p1[i] ^ p2[i]; } } $ g++ -std=gnu++0x -msse2 -O2 -DNDEBUG testcase.cpp