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 <crtdefs.h>
17 
18 #pragma pack(push,_CRT_PACKING)
19 
20 #if defined(_ENABLE_VEC_DEBUG)
21 #include <iostream>
22 #endif
23 
24 #pragma pack(pop)
25 
26 #ifdef __SSE__
27 
28 #define _MM_QW (*((__int64*)&vec))
29 
30 #pragma pack(push,16)
31 
32 class M64
33 {
34 protected:
35     __m64 vec;
36 public:
M64()37     M64() {}
M64(__m64 mm)38     M64(__m64 mm) { vec = mm; }
M64(__int64 mm)39     M64(__int64 mm) { _MM_QW = mm; }
M64(int i)40     M64(int i) { vec = _m_from_int(i); }
41 
__m64()42     operator __m64() const { return vec; }
43 
44     M64& operator&=(const M64 &a) { return *this = (M64) _m_pand(vec,a); }
45     M64& operator|=(const M64 &a) { return *this = (M64) _m_por(vec,a); }
46     M64& operator^=(const M64 &a) { return *this = (M64) _m_pxor(vec,a); }
47 };
48 
49 #pragma pack(pop)
50 
51 #endif /* ifdef __SSE__ */
52 
53 #include <dvec.h>
54 
55 #endif
56 #endif
57 
58