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
32class M64
33{
34protected:
35    __m64 vec;
36public:
37    M64() {}
38    M64(__m64 mm) { vec = mm; }
39    M64(__int64 mm) { _MM_QW = mm; }
40    M64(int i) { vec = _m_from_int(i); }
41
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