STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
mmintrin.h
Go to the documentation of this file.
1 /***
2 *** Copyright (C) 1985-2015 Intel Corporation. All rights reserved.
3 ***
4 *** The information and source code contained herein is the exclusive
5 *** property of Intel Corporation and may not be disclosed, examined
6 *** or reproduced in whole or in part without explicit written authorization
7 *** from the company.
8 ***
9 ****/
10 
11 /*
12  * Definitions and declarations for use with compiler intrinsics.
13  */
14 
15 #pragma once
16 #ifndef _MMINTRIN_H_INCLUDED
17 #define _MMINTRIN_H_INCLUDED
18 #ifndef __midl
19 
20 #if !defined _M_IX86 && !defined _M_X64
21  #error This header is specific to X86 and X64 targets
22 #endif
23 
24 #if defined (_M_CEE_PURE)
25  #error ERROR: MM intrinsics not supported in the pure mode!
26 #else /* defined (_M_CEE_PURE) */
27 
28 #if defined __cplusplus
29 extern "C" { /* Begin "C" */
30 /* Intrinsics use C name-mangling.
31  */
32 #endif /* defined __cplusplus */
33 
34 typedef union __declspec(intrin_type) __declspec(align(8)) __m64
35 {
36  unsigned __int64 m64_u64;
37  float m64_f32[2];
38  __int8 m64_i8[8];
39  __int16 m64_i16[4];
40  __int32 m64_i32[2];
41  __int64 m64_i64;
42  unsigned __int8 m64_u8[8];
43  unsigned __int16 m64_u16[4];
44  unsigned __int32 m64_u32[2];
46 
47 #if defined(_M_IX86)
48 /* General support intrinsics */
49 void _m_empty(void);
50 __m64 _m_from_int(int _I);
51 int _m_to_int(__m64 _M);
52 __m64 _m_packsswb(__m64 _MM1, __m64 _MM2);
53 __m64 _m_packssdw(__m64 _MM1, __m64 _MM2);
54 __m64 _m_packuswb(__m64 _MM1, __m64 _MM2);
55 __m64 _m_punpckhbw(__m64 _MM1, __m64 _MM2);
56 __m64 _m_punpckhwd(__m64 _MM1, __m64 _MM2);
57 __m64 _m_punpckhdq(__m64 _MM1, __m64 _MM2);
58 __m64 _m_punpcklbw(__m64 _MM1, __m64 _MM2);
59 __m64 _m_punpcklwd(__m64 _MM1, __m64 _MM2);
60 __m64 _m_punpckldq(__m64 _MM1, __m64 _MM2);
61 
62 /* Packed arithmetic intrinsics */
63 __m64 _m_paddb(__m64 _MM1, __m64 _MM2);
64 __m64 _m_paddw(__m64 _MM1, __m64 _MM2);
65 __m64 _m_paddd(__m64 _MM1, __m64 _MM2);
66 __m64 _m_paddsb(__m64 _MM1, __m64 _MM2);
67 __m64 _m_paddsw(__m64 _MM1, __m64 _MM2);
68 __m64 _m_paddusb(__m64 _MM1, __m64 _MM2);
69 __m64 _m_paddusw(__m64 _MM1, __m64 _MM2);
70 __m64 _m_psubb(__m64 _MM1, __m64 _MM2);
71 __m64 _m_psubw(__m64 _MM1, __m64 _MM2);
72 __m64 _m_psubd(__m64 _MM1, __m64 _MM2);
73 __m64 _m_psubsb(__m64 _MM1, __m64 _MM2);
74 __m64 _m_psubsw(__m64 _MM1, __m64 _MM2);
75 __m64 _m_psubusb(__m64 _MM1, __m64 _MM2);
76 __m64 _m_psubusw(__m64 _MM1, __m64 _MM2);
77 __m64 _m_pmaddwd(__m64 _MM1, __m64 _MM2);
78 __m64 _m_pmulhw(__m64 _MM1, __m64 _MM2);
79 __m64 _m_pmullw(__m64 _MM1, __m64 _MM2);
80 
81 /* Shift intrinsics */
82 __m64 _m_psllw(__m64 _M, __m64 _Count);
83 __m64 _m_psllwi(__m64 _M, int _Count);
84 __m64 _m_pslld(__m64 _M, __m64 _Count);
85 __m64 _m_pslldi(__m64 _M, int _Count);
86 __m64 _m_psllq(__m64 _M, __m64 _Count);
87 __m64 _m_psllqi(__m64 _M, int _Count);
88 __m64 _m_psraw(__m64 _M, __m64 _Count);
89 __m64 _m_psrawi(__m64 _M, int _Count);
90 __m64 _m_psrad(__m64 _M, __m64 _Count);
91 __m64 _m_psradi(__m64 _M, int _Count);
92 __m64 _m_psrlw(__m64 _M, __m64 _Count);
93 __m64 _m_psrlwi(__m64 _M, int _Count);
94 __m64 _m_psrld(__m64 _M, __m64 _Count);
95 __m64 _m_psrldi(__m64 _M, int _Count);
96 __m64 _m_psrlq(__m64 _M, __m64 _Count);
97 __m64 _m_psrlqi(__m64 _M, int _Count);
98 
99 /* Logical intrinsics */
100 __m64 _m_pand(__m64 _MM1, __m64 _MM2);
101 __m64 _m_pandn(__m64 _MM1, __m64 _MM2);
102 __m64 _m_por(__m64 _MM1, __m64 _MM2);
103 __m64 _m_pxor(__m64 _MM1, __m64 _MM2);
104 
105 /* Comparison intrinsics */
106 __m64 _m_pcmpeqb(__m64 _MM1, __m64 _MM2);
107 __m64 _m_pcmpeqw(__m64 _MM1, __m64 _MM2);
108 __m64 _m_pcmpeqd(__m64 _MM1, __m64 _MM2);
109 __m64 _m_pcmpgtb(__m64 _MM1, __m64 _MM2);
110 __m64 _m_pcmpgtw(__m64 _MM1, __m64 _MM2);
111 __m64 _m_pcmpgtd(__m64 _MM1, __m64 _MM2);
112 
113 /* Utility intrinsics */
114 __m64 _mm_setzero_si64(void);
115 __m64 _mm_set_pi32(int _I1, int _I0);
116 __m64 _mm_set_pi16(short _S3, short _S2, short _S1, short _S0);
117 __m64 _mm_set_pi8(char _B7, char _B6, char _B5, char _B4,
118  char _B3, char _B2, char _B1, char _B0);
119 __m64 _mm_set1_pi32(int _I);
120 __m64 _mm_set1_pi16(short _S);
121 __m64 _mm_set1_pi8(char _B);
122 __m64 _mm_setr_pi32(int _I1, int _I0);
123 __m64 _mm_setr_pi16(short _S3, short _S2, short _S1, short _S0);
124 __m64 _mm_setr_pi8(char _B7, char _B6, char _B5, char _B4,
125  char _B3, char _B2, char _B1, char _B0);
126 
127 /* Alternate intrinsic name definitions */
128 #define _mm_empty _m_empty
129 #define _mm_cvtsi32_si64 _m_from_int
130 #define _mm_cvtsi64_si32 _m_to_int
131 #define _mm_packs_pi16 _m_packsswb
132 #define _mm_packs_pi32 _m_packssdw
133 #define _mm_packs_pu16 _m_packuswb
134 #define _mm_unpackhi_pi8 _m_punpckhbw
135 #define _mm_unpackhi_pi16 _m_punpckhwd
136 #define _mm_unpackhi_pi32 _m_punpckhdq
137 #define _mm_unpacklo_pi8 _m_punpcklbw
138 #define _mm_unpacklo_pi16 _m_punpcklwd
139 #define _mm_unpacklo_pi32 _m_punpckldq
140 #define _mm_add_pi8 _m_paddb
141 #define _mm_add_pi16 _m_paddw
142 #define _mm_add_pi32 _m_paddd
143 #define _mm_adds_pi8 _m_paddsb
144 #define _mm_adds_pi16 _m_paddsw
145 #define _mm_adds_pu8 _m_paddusb
146 #define _mm_adds_pu16 _m_paddusw
147 #define _mm_sub_pi8 _m_psubb
148 #define _mm_sub_pi16 _m_psubw
149 #define _mm_sub_pi32 _m_psubd
150 #define _mm_subs_pi8 _m_psubsb
151 #define _mm_subs_pi16 _m_psubsw
152 #define _mm_subs_pu8 _m_psubusb
153 #define _mm_subs_pu16 _m_psubusw
154 #define _mm_madd_pi16 _m_pmaddwd
155 #define _mm_mulhi_pi16 _m_pmulhw
156 #define _mm_mullo_pi16 _m_pmullw
157 #define _mm_sll_pi16 _m_psllw
158 #define _mm_slli_pi16 _m_psllwi
159 #define _mm_sll_pi32 _m_pslld
160 #define _mm_slli_pi32 _m_pslldi
161 #define _mm_sll_si64 _m_psllq
162 #define _mm_slli_si64 _m_psllqi
163 #define _mm_sra_pi16 _m_psraw
164 #define _mm_srai_pi16 _m_psrawi
165 #define _mm_sra_pi32 _m_psrad
166 #define _mm_srai_pi32 _m_psradi
167 #define _mm_srl_pi16 _m_psrlw
168 #define _mm_srli_pi16 _m_psrlwi
169 #define _mm_srl_pi32 _m_psrld
170 #define _mm_srli_pi32 _m_psrldi
171 #define _mm_srl_si64 _m_psrlq
172 #define _mm_srli_si64 _m_psrlqi
173 #define _mm_and_si64 _m_pand
174 #define _mm_andnot_si64 _m_pandn
175 #define _mm_or_si64 _m_por
176 #define _mm_xor_si64 _m_pxor
177 #define _mm_cmpeq_pi8 _m_pcmpeqb
178 #define _mm_cmpeq_pi16 _m_pcmpeqw
179 #define _mm_cmpeq_pi32 _m_pcmpeqd
180 #define _mm_cmpgt_pi8 _m_pcmpgtb
181 #define _mm_cmpgt_pi16 _m_pcmpgtw
182 #define _mm_cmpgt_pi32 _m_pcmpgtd
183 #endif // defined(_M_IX86)
184 
185 #if defined __cplusplus
186 }; /* End "C" */
187 #endif /* defined __cplusplus */
188 
189 #endif /* defined (_M_CEE_PURE) */
190 #endif /* __midl */
191 #endif /* _MMINTRIN_H_INCLUDED */
void * align(size_t _Bound, size_t _Size, void *&_Ptr, size_t &_Space) _NOEXCEPT
Definition: memory:2409
_N wchar_t * _S1
Definition: wchar.h:163
__m64
Definition: mmintrin.h:45
return _S
Definition: wchar.h:262
_Diff _Count
Definition: algorithm:1941
union __declspec(intrin_type) __declspec(align(8)) __m64
Definition: mmintrin.h:34