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 33class M64 34{ 35protected: 36 __m64 vec; 37public: 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 57