1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _IVEC_H_INCLUDED 7 #define _IVEC_H_INCLUDED 8 #ifndef RC_INVOKED 9 10 #if !defined __cplusplus 11 #error This file is only supported in C++ compilations! 12 #endif 13 14 #include <intrin.h> 15 #include <assert.h> 16 #include <dvec.h> 17 #include <crtdefs.h> 18 19 #pragma pack(push,_CRT_PACKING) 20 21 #if defined(_ENABLE_VEC_DEBUG) 22 #include <iostream> 23 #endif 24 25 #pragma pack(pop) 26 27 #ifdef __SSE__ 28 29 #define _MM_QW (*((__int64*)&vec)) 30 31 #pragma pack(push,16) 32 33 class M64 34 { 35 protected: 36 __m64 vec; 37 public: 38 M64() {} 39 M64(__m64 mm) { vec = mm; } 40 M64(__int64 mm) { _MM_QW = mm; } 41 M64(int i) { vec = _m_from_int(i); } 42 43 operator __m64() const { return vec; } 44 45 M64& operator&=(const M64 &a) { return *this = (M64) _m_pand(vec,a); } 46 M64& operator|=(const M64 &a) { return *this = (M64) _m_por(vec,a); } 47 M64& operator^=(const M64 &a) { return *this = (M64) _m_pxor(vec,a); } 48 }; 49 50 #pragma pack(pop) 51 52 #endif /* ifdef __SSE__ */ 53 54 #endif 55 #endif 56