Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/other/i386-11.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// 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" } }