blob: 054b66a15925abc890ca59e233fd2a90d6a378a3 [file] [log] [blame]
Anders Carlssona5e2e602008-03-03 19:29:06 +00001/*===---- mmintrin.h - MMX intrinsics --------------------------------------===
2 *
Anders Carlssona5e2e602008-03-03 19:29:06 +00003 * Permission is hereby granted, free of charge, to any person obtaining a copy
4 * of this software and associated documentation files (the "Software"), to deal
5 * in the Software without restriction, including without limitation the rights
6 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 * copies of the Software, and to permit persons to whom the Software is
8 * furnished to do so, subject to the following conditions:
9 *
10 * The above copyright notice and this permission notice shall be included in
11 * all copies or substantial portions of the Software.
12 *
13 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 * THE SOFTWARE.
20 *
21 *===-----------------------------------------------------------------------===
22 */
23
24#ifndef __MMINTRIN_H
25#define __MMINTRIN_H
26
27#ifndef __MMX__
28#error "MMX instruction set not enabled"
29#else
30
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000031typedef long long __m64 __attribute__((__vector_size__(8)));
Anders Carlssona5e2e602008-03-03 19:29:06 +000032
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000033typedef int __v2si __attribute__((__vector_size__(8)));
34typedef short __v4hi __attribute__((__vector_size__(8)));
Anders Carlsson327c8df2009-09-18 19:18:19 +000035typedef char __v8qi __attribute__((__vector_size__(8)));
Anders Carlssona5e2e602008-03-03 19:29:06 +000036
Eric Christopher4d1851682015-06-17 07:09:20 +000037/* Define the default attributes for the functions in this file. */
38#define DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
39
40static __inline__ void DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000041_mm_empty(void)
Anders Carlssona5e2e602008-03-03 19:29:06 +000042{
43 __builtin_ia32_emms();
44}
45
Eric Christopher4d1851682015-06-17 07:09:20 +000046static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000047_mm_cvtsi32_si64(int __i)
Anders Carlssona5e2e602008-03-03 19:29:06 +000048{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +000049 return (__m64)__builtin_ia32_vec_init_v2si(__i, 0);
Anders Carlssona5e2e602008-03-03 19:29:06 +000050}
51
Eric Christopher4d1851682015-06-17 07:09:20 +000052static __inline__ int DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000053_mm_cvtsi64_si32(__m64 __m)
Anders Carlssona5e2e602008-03-03 19:29:06 +000054{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +000055 return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0);
Anders Carlssona5e2e602008-03-03 19:29:06 +000056}
57
Eric Christopher4d1851682015-06-17 07:09:20 +000058static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000059_mm_cvtsi64_m64(long long __i)
Anders Carlssona5e2e602008-03-03 19:29:06 +000060{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000061 return (__m64)__i;
Anders Carlssona5e2e602008-03-03 19:29:06 +000062}
63
Eric Christopher4d1851682015-06-17 07:09:20 +000064static __inline__ long long DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000065_mm_cvtm64_si64(__m64 __m)
Anders Carlssona5e2e602008-03-03 19:29:06 +000066{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000067 return (long long)__m;
Anders Carlssona5e2e602008-03-03 19:29:06 +000068}
69
Eric Christopher4d1851682015-06-17 07:09:20 +000070static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000071_mm_packs_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +000072{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000073 return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +000074}
75
Eric Christopher4d1851682015-06-17 07:09:20 +000076static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000077_mm_packs_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +000078{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000079 return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +000080}
81
Eric Christopher4d1851682015-06-17 07:09:20 +000082static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000083_mm_packs_pu16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +000084{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +000085 return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +000086}
87
Eric Christopher4d1851682015-06-17 07:09:20 +000088static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000089_mm_unpackhi_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +000090{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +000091 return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +000092}
93
Eric Christopher4d1851682015-06-17 07:09:20 +000094static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +000095_mm_unpackhi_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +000096{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +000097 return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +000098}
99
Eric Christopher4d1851682015-06-17 07:09:20 +0000100static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000101_mm_unpackhi_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000102{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000103 return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000104}
105
Eric Christopher4d1851682015-06-17 07:09:20 +0000106static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000107_mm_unpacklo_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000108{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000109 return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000110}
111
Eric Christopher4d1851682015-06-17 07:09:20 +0000112static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000113_mm_unpacklo_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000114{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000115 return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000116}
117
Eric Christopher4d1851682015-06-17 07:09:20 +0000118static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000119_mm_unpacklo_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000120{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000121 return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000122}
123
Eric Christopher4d1851682015-06-17 07:09:20 +0000124static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000125_mm_add_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000126{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000127 return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000128}
129
Eric Christopher4d1851682015-06-17 07:09:20 +0000130static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000131_mm_add_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000132{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000133 return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000134}
135
Eric Christopher4d1851682015-06-17 07:09:20 +0000136static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000137_mm_add_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000138{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000139 return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000140}
141
Eric Christopher4d1851682015-06-17 07:09:20 +0000142static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000143_mm_adds_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000144{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000145 return (__m64)__builtin_ia32_paddsb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000146}
147
Eric Christopher4d1851682015-06-17 07:09:20 +0000148static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000149_mm_adds_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000150{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000151 return (__m64)__builtin_ia32_paddsw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000152}
153
Eric Christopher4d1851682015-06-17 07:09:20 +0000154static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000155_mm_adds_pu8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000156{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000157 return (__m64)__builtin_ia32_paddusb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000158}
159
Eric Christopher4d1851682015-06-17 07:09:20 +0000160static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000161_mm_adds_pu16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000162{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000163 return (__m64)__builtin_ia32_paddusw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000164}
165
Eric Christopher4d1851682015-06-17 07:09:20 +0000166static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000167_mm_sub_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000168{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000169 return (__m64)__builtin_ia32_psubb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000170}
171
Eric Christopher4d1851682015-06-17 07:09:20 +0000172static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000173_mm_sub_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000174{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000175 return (__m64)__builtin_ia32_psubw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000176}
177
Eric Christopher4d1851682015-06-17 07:09:20 +0000178static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000179_mm_sub_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000180{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000181 return (__m64)__builtin_ia32_psubd((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000182}
183
Eric Christopher4d1851682015-06-17 07:09:20 +0000184static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000185_mm_subs_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000186{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000187 return (__m64)__builtin_ia32_psubsb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000188}
189
Eric Christopher4d1851682015-06-17 07:09:20 +0000190static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000191_mm_subs_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000192{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000193 return (__m64)__builtin_ia32_psubsw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000194}
195
Eric Christopher4d1851682015-06-17 07:09:20 +0000196static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000197_mm_subs_pu8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000198{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000199 return (__m64)__builtin_ia32_psubusb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000200}
201
Eric Christopher4d1851682015-06-17 07:09:20 +0000202static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000203_mm_subs_pu16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000204{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000205 return (__m64)__builtin_ia32_psubusw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000206}
207
Eric Christopher4d1851682015-06-17 07:09:20 +0000208static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000209_mm_madd_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000210{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000211 return (__m64)__builtin_ia32_pmaddwd((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000212}
213
Eric Christopher4d1851682015-06-17 07:09:20 +0000214static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000215_mm_mulhi_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000216{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000217 return (__m64)__builtin_ia32_pmulhw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000218}
219
Eric Christopher4d1851682015-06-17 07:09:20 +0000220static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000221_mm_mullo_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000222{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000223 return (__m64)__builtin_ia32_pmullw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000224}
225
Eric Christopher4d1851682015-06-17 07:09:20 +0000226static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000227_mm_sll_pi16(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000228{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000229 return (__m64)__builtin_ia32_psllw((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000230}
231
Eric Christopher4d1851682015-06-17 07:09:20 +0000232static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000233_mm_slli_pi16(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000234{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000235 return (__m64)__builtin_ia32_psllwi((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000236}
237
Eric Christopher4d1851682015-06-17 07:09:20 +0000238static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000239_mm_sll_pi32(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000240{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000241 return (__m64)__builtin_ia32_pslld((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000242}
243
Eric Christopher4d1851682015-06-17 07:09:20 +0000244static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000245_mm_slli_pi32(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000246{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000247 return (__m64)__builtin_ia32_pslldi((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000248}
249
Eric Christopher4d1851682015-06-17 07:09:20 +0000250static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000251_mm_sll_si64(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000252{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000253 return (__m64)__builtin_ia32_psllq(__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000254}
255
Eric Christopher4d1851682015-06-17 07:09:20 +0000256static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000257_mm_slli_si64(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000258{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000259 return (__m64)__builtin_ia32_psllqi(__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000260}
261
Eric Christopher4d1851682015-06-17 07:09:20 +0000262static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000263_mm_sra_pi16(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000264{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000265 return (__m64)__builtin_ia32_psraw((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000266}
267
Eric Christopher4d1851682015-06-17 07:09:20 +0000268static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000269_mm_srai_pi16(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000270{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000271 return (__m64)__builtin_ia32_psrawi((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000272}
273
Eric Christopher4d1851682015-06-17 07:09:20 +0000274static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000275_mm_sra_pi32(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000276{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000277 return (__m64)__builtin_ia32_psrad((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000278}
279
Eric Christopher4d1851682015-06-17 07:09:20 +0000280static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000281_mm_srai_pi32(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000282{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000283 return (__m64)__builtin_ia32_psradi((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000284}
285
Eric Christopher4d1851682015-06-17 07:09:20 +0000286static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000287_mm_srl_pi16(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000288{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000289 return (__m64)__builtin_ia32_psrlw((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000290}
291
Eric Christopher4d1851682015-06-17 07:09:20 +0000292static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000293_mm_srli_pi16(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000294{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000295 return (__m64)__builtin_ia32_psrlwi((__v4hi)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000296}
297
Eric Christopher4d1851682015-06-17 07:09:20 +0000298static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000299_mm_srl_pi32(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000300{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000301 return (__m64)__builtin_ia32_psrld((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000302}
303
Eric Christopher4d1851682015-06-17 07:09:20 +0000304static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000305_mm_srli_pi32(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000306{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000307 return (__m64)__builtin_ia32_psrldi((__v2si)__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000308}
309
Eric Christopher4d1851682015-06-17 07:09:20 +0000310static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000311_mm_srl_si64(__m64 __m, __m64 __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000312{
Eli Friedmanf0d0e9e2008-05-14 20:32:22 +0000313 return (__m64)__builtin_ia32_psrlq(__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000314}
315
Eric Christopher4d1851682015-06-17 07:09:20 +0000316static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000317_mm_srli_si64(__m64 __m, int __count)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000318{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000319 return (__m64)__builtin_ia32_psrlqi(__m, __count);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000320}
321
Eric Christopher4d1851682015-06-17 07:09:20 +0000322static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000323_mm_and_si64(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000324{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000325 return __builtin_ia32_pand(__m1, __m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000326}
327
Eric Christopher4d1851682015-06-17 07:09:20 +0000328static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000329_mm_andnot_si64(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000330{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000331 return __builtin_ia32_pandn(__m1, __m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000332}
333
Eric Christopher4d1851682015-06-17 07:09:20 +0000334static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000335_mm_or_si64(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000336{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000337 return __builtin_ia32_por(__m1, __m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000338}
339
Eric Christopher4d1851682015-06-17 07:09:20 +0000340static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000341_mm_xor_si64(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000342{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000343 return __builtin_ia32_pxor(__m1, __m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000344}
345
Eric Christopher4d1851682015-06-17 07:09:20 +0000346static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000347_mm_cmpeq_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000348{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000349 return (__m64)__builtin_ia32_pcmpeqb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000350}
351
Eric Christopher4d1851682015-06-17 07:09:20 +0000352static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000353_mm_cmpeq_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000354{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000355 return (__m64)__builtin_ia32_pcmpeqw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000356}
357
Eric Christopher4d1851682015-06-17 07:09:20 +0000358static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000359_mm_cmpeq_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000360{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000361 return (__m64)__builtin_ia32_pcmpeqd((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000362}
363
Eric Christopher4d1851682015-06-17 07:09:20 +0000364static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000365_mm_cmpgt_pi8(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000366{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000367 return (__m64)__builtin_ia32_pcmpgtb((__v8qi)__m1, (__v8qi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000368}
369
Eric Christopher4d1851682015-06-17 07:09:20 +0000370static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000371_mm_cmpgt_pi16(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000372{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000373 return (__m64)__builtin_ia32_pcmpgtw((__v4hi)__m1, (__v4hi)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000374}
375
Eric Christopher4d1851682015-06-17 07:09:20 +0000376static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000377_mm_cmpgt_pi32(__m64 __m1, __m64 __m2)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000378{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000379 return (__m64)__builtin_ia32_pcmpgtd((__v2si)__m1, (__v2si)__m2);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000380}
381
Eric Christopher4d1851682015-06-17 07:09:20 +0000382static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000383_mm_setzero_si64(void)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000384{
385 return (__m64){ 0LL };
386}
387
Eric Christopher4d1851682015-06-17 07:09:20 +0000388static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000389_mm_set_pi32(int __i1, int __i0)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000390{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000391 return (__m64)__builtin_ia32_vec_init_v2si(__i0, __i1);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000392}
393
Eric Christopher4d1851682015-06-17 07:09:20 +0000394static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000395_mm_set_pi16(short __s3, short __s2, short __s1, short __s0)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000396{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000397 return (__m64)__builtin_ia32_vec_init_v4hi(__s0, __s1, __s2, __s3);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000398}
399
Eric Christopher4d1851682015-06-17 07:09:20 +0000400static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000401_mm_set_pi8(char __b7, char __b6, char __b5, char __b4, char __b3, char __b2,
402 char __b1, char __b0)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000403{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000404 return (__m64)__builtin_ia32_vec_init_v8qi(__b0, __b1, __b2, __b3,
405 __b4, __b5, __b6, __b7);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000406}
407
Eric Christopher4d1851682015-06-17 07:09:20 +0000408static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000409_mm_set1_pi32(int __i)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000410{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000411 return _mm_set_pi32(__i, __i);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000412}
413
Eric Christopher4d1851682015-06-17 07:09:20 +0000414static __inline__ __m64 DEFAULT_FN_ATTRS
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000415_mm_set1_pi16(short __w)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000416{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000417 return _mm_set_pi16(__w, __w, __w, __w);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000418}
419
Eric Christopher4d1851682015-06-17 07:09:20 +0000420static __inline__ __m64 DEFAULT_FN_ATTRS
Mike Stumpeff0cc92009-02-14 18:02:21 +0000421_mm_set1_pi8(char __b)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000422{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000423 return _mm_set_pi8(__b, __b, __b, __b, __b, __b, __b, __b);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000424}
425
Eric Christopher4d1851682015-06-17 07:09:20 +0000426static __inline__ __m64 DEFAULT_FN_ATTRS
Eli Friedmancb59baa2011-05-05 20:21:54 +0000427_mm_setr_pi32(int __i0, int __i1)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000428{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000429 return _mm_set_pi32(__i1, __i0);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000430}
431
Eric Christopher4d1851682015-06-17 07:09:20 +0000432static __inline__ __m64 DEFAULT_FN_ATTRS
Eli Friedmancb59baa2011-05-05 20:21:54 +0000433_mm_setr_pi16(short __w0, short __w1, short __w2, short __w3)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000434{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000435 return _mm_set_pi16(__w3, __w2, __w1, __w0);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000436}
437
Eric Christopher4d1851682015-06-17 07:09:20 +0000438static __inline__ __m64 DEFAULT_FN_ATTRS
Eli Friedmancb59baa2011-05-05 20:21:54 +0000439_mm_setr_pi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5,
440 char __b6, char __b7)
Anders Carlssona5e2e602008-03-03 19:29:06 +0000441{
Dale Johannesen39d6f4b2010-09-30 23:57:50 +0000442 return _mm_set_pi8(__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0);
Anders Carlssona5e2e602008-03-03 19:29:06 +0000443}
444
Eric Christopher4d1851682015-06-17 07:09:20 +0000445#undef DEFAULT_FN_ATTRS
Chandler Carruth96f2e9e2010-07-22 06:47:28 +0000446
447/* Aliases for compatibility. */
448#define _m_empty _mm_empty
449#define _m_from_int _mm_cvtsi32_si64
450#define _m_to_int _mm_cvtsi64_si32
451#define _m_packsswb _mm_packs_pi16
452#define _m_packssdw _mm_packs_pi32
453#define _m_packuswb _mm_packs_pu16
454#define _m_punpckhbw _mm_unpackhi_pi8
455#define _m_punpckhwd _mm_unpackhi_pi16
456#define _m_punpckhdq _mm_unpackhi_pi32
457#define _m_punpcklbw _mm_unpacklo_pi8
458#define _m_punpcklwd _mm_unpacklo_pi16
459#define _m_punpckldq _mm_unpacklo_pi32
460#define _m_paddb _mm_add_pi8
461#define _m_paddw _mm_add_pi16
462#define _m_paddd _mm_add_pi32
463#define _m_paddsb _mm_adds_pi8
464#define _m_paddsw _mm_adds_pi16
465#define _m_paddusb _mm_adds_pu8
466#define _m_paddusw _mm_adds_pu16
467#define _m_psubb _mm_sub_pi8
468#define _m_psubw _mm_sub_pi16
469#define _m_psubd _mm_sub_pi32
470#define _m_psubsb _mm_subs_pi8
471#define _m_psubsw _mm_subs_pi16
472#define _m_psubusb _mm_subs_pu8
473#define _m_psubusw _mm_subs_pu16
474#define _m_pmaddwd _mm_madd_pi16
475#define _m_pmulhw _mm_mulhi_pi16
476#define _m_pmullw _mm_mullo_pi16
477#define _m_psllw _mm_sll_pi16
478#define _m_psllwi _mm_slli_pi16
479#define _m_pslld _mm_sll_pi32
480#define _m_pslldi _mm_slli_pi32
Chandler Carruth42cf8182010-08-08 08:44:32 +0000481#define _m_psllq _mm_sll_si64
482#define _m_psllqi _mm_slli_si64
Chandler Carruth96f2e9e2010-07-22 06:47:28 +0000483#define _m_psraw _mm_sra_pi16
484#define _m_psrawi _mm_srai_pi16
485#define _m_psrad _mm_sra_pi32
486#define _m_psradi _mm_srai_pi32
487#define _m_psrlw _mm_srl_pi16
488#define _m_psrlwi _mm_srli_pi16
489#define _m_psrld _mm_srl_pi32
490#define _m_psrldi _mm_srli_pi32
Chandler Carruth42cf8182010-08-08 08:44:32 +0000491#define _m_psrlq _mm_srl_si64
492#define _m_psrlqi _mm_srli_si64
Chandler Carruth96f2e9e2010-07-22 06:47:28 +0000493#define _m_pand _mm_and_si64
494#define _m_pandn _mm_andnot_si64
495#define _m_por _mm_or_si64
496#define _m_pxor _mm_xor_si64
497#define _m_pcmpeqb _mm_cmpeq_pi8
498#define _m_pcmpeqw _mm_cmpeq_pi16
499#define _m_pcmpeqd _mm_cmpeq_pi32
500#define _m_pcmpgtb _mm_cmpgt_pi8
501#define _m_pcmpgtw _mm_cmpgt_pi16
502#define _m_pcmpgtd _mm_cmpgt_pi32
503
Anders Carlssona5e2e602008-03-03 19:29:06 +0000504#endif /* __MMX__ */
505
506#endif /* __MMINTRIN_H */
507