| /** | 
 |  * This file has no copyright assigned and is placed in the Public Domain. | 
 |  * This file is part of the mingw-w64 runtime package. | 
 |  * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
 |  */ | 
 | #ifndef _IVEC_H_INCLUDED | 
 | #define _IVEC_H_INCLUDED | 
 | #ifndef RC_INVOKED | 
 |  | 
 | #if !defined __cplusplus | 
 | #error This file is only supported in C++ compilations! | 
 | #endif | 
 |  | 
 | #include <intrin.h> | 
 | #include <assert.h> | 
 | #include <dvec.h> | 
 | #include <crtdefs.h> | 
 |  | 
 | #pragma pack(push,_CRT_PACKING) | 
 |  | 
 | #if defined(_ENABLE_VEC_DEBUG) | 
 | #include <iostream> | 
 | #endif | 
 |  | 
 | #pragma pack(pop) | 
 |  | 
 | #ifdef __SSE__ | 
 |  | 
 | #define _MM_QW (*((__int64*)&vec)) | 
 |  | 
 | #pragma pack(push,16) | 
 |  | 
 | class M64 | 
 | { | 
 | protected: | 
 |     __m64 vec; | 
 | public: | 
 |     M64() {} | 
 |     M64(__m64 mm) { vec = mm; } | 
 |     M64(__int64 mm) { _MM_QW = mm; } | 
 |     M64(int i) { vec = _m_from_int(i); } | 
 |  | 
 |     operator __m64() const { return vec; } | 
 |  | 
 |     M64& operator&=(const M64 &a) { return *this = (M64) _m_pand(vec,a); } | 
 |     M64& operator|=(const M64 &a) { return *this = (M64) _m_por(vec,a); } | 
 |     M64& operator^=(const M64 &a) { return *this = (M64) _m_pxor(vec,a); } | 
 | }; | 
 |  | 
 | #pragma pack(pop) | 
 |  | 
 | #endif /* ifdef __SSE__ */ | 
 |  | 
 | #endif | 
 | #endif | 
 |  |