Home | History | Annotate | Download | only in include
      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
     56 
     57