Viewing file: i386-11.C (1.07 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR target/80799 // { dg-do compile { target i?86-*-* x86_64-*-* } } // { dg-require-effective-target c++11 } // { dg-options "-O2 -msse2" }
#include <xmmintrin.h> #include <emmintrin.h>
class alignas(16) GSVector4i { public: __m128i m;
explicit GSVector4i(__m128i m) { this->m = m; }
static void storel(void* p, const GSVector4i& v) { _mm_storel_epi64((__m128i*)p, v.m); }
static GSVector4i loadl(const void* p) { return GSVector4i(_mm_loadl_epi64((__m128i*)p)); }
bool eq(const GSVector4i& v) const { return _mm_movemask_epi8(_mm_cmpeq_epi32(m, v.m)) == 0xffff; } };
union GIFRegTRXPOS { unsigned long long u64; void operator = (const GSVector4i& v) {GSVector4i::storel(this, v);} bool operator != (const union GIFRegTRXPOS& r) const {return !((GSVector4i)r).eq(*this);} operator GSVector4i() const {return GSVector4i::loadl(this);} };
extern void dummy_call(); extern GIFRegTRXPOS TRXPOS;
void GIFRegHandlerTRXPOS(const GIFRegTRXPOS& p) { if(p != TRXPOS) { dummy_call(); }
TRXPOS = (GSVector4i)p; }
// { dg-final { scan-assembler-not "%mm" } }
|