Add .gitattributes and .gitignore files and normalize line endings in the repository...
[reactos.git] / sdk / include / crt / ivec.h
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