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

Reply via email to