| /** | |
| * This file has no copyright assigned and is placed in the Public Domain. | |
| * This file is part of the w64 mingw-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 <_mingw.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 | |