mmintrin.h revision 37958ee2750db056dc276f045cc8876f2eab2984
137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson/*===---- mmintrin.h - MMX intrinsics --------------------------------------===
237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *
337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * Copyright (c) 2008 Anders Carlsson
437958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *
537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * Permission is hereby granted, free of charge, to any person obtaining a copy
637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * of this software and associated documentation files (the "Software"), to deal
737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * in the Software without restriction, including without limitation the rights
837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
937958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * copies of the Software, and to permit persons to whom the Software is
1037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * furnished to do so, subject to the following conditions:
1137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *
1237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * The above copyright notice and this permission notice shall be included in
1337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * all copies or substantial portions of the Software.
1437958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *
1537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1937958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson * THE SOFTWARE.
2237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *
2337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson *===-----------------------------------------------------------------------===
2437958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson */
2537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
2637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#ifndef __MMINTRIN_H
2737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#define __MMINTRIN_H
2837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
2937958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#ifndef __MMX__
3037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#error "MMX instruction set not enabled"
3137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#else
3237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
3337958ee2750db056dc276f045cc8876f2eab2984Anders Carlssontypedef long long __m64 __attribute__((vector_size(8)));
3437958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
3537958ee2750db056dc276f045cc8876f2eab2984Anders Carlssontypedef int __v2si __attribute__((vector_size(8)));
3637958ee2750db056dc276f045cc8876f2eab2984Anders Carlssontypedef short __v4hi __attribute__((vector_size(8)));
3737958ee2750db056dc276f045cc8876f2eab2984Anders Carlssontypedef char __v8qi __attribute__((vector_size(8)));
3837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
3937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline void _mm_empty()
4037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
4137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    __builtin_ia32_emms();
4237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
4337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
4437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cvtsi32_si64(int i)
4537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
4637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v2si){i, 0};
4737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
4837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
4937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline int _mm_cvtsi64_si32(__m64 m)
5037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
5137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return ((__v2si)m)[0];
5237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
5337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
5437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cvtsi64_m64(long long i)
5537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
5637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)i;
5737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
5837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
5937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline long long _mm_cvtm64_si64(__m64 m)
6037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
6137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (long long)m;
6237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
6337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
6437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_packs_pi16(__m64 m1, __m64 m2)
6537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
6637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_packsswb((__v4hi)m1, (__v4hi)m2);
6737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
6837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
6937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_packs_pi32(__m64 m1, __m64 m2)
7037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
7137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_packssdw((__v2si)m1, (__v2si)m2);
7237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
7337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
7437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_packs_pu16(__m64 m1, __m64 m2)
7537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
7637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_packuswb((__v4hi)m1, (__v4hi)m2);
7737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
7837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
7937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpackhi_pi8(__m64 m1, __m64 m2)
8037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
8137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
8237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
8337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
8437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpackhi_pi16(__m64 m1, __m64 m2)
8537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
8637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
8737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
8837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
8937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpackhi_pi32(__m64 m1, __m64 m2)
9037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
9137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
9237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
9337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
9437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpacklo_pi8(__m64 m1, __m64 m2)
9537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
9637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
9737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
9837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
9937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpacklo_pi16(__m64 m1, __m64 m2)
10037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
10137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
10237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
10337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
10437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_unpacklo_pi32(__m64 m1, __m64 m2)
10537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
10637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    // FIXME: use __builtin_shuffle_vector
10737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
10837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
10937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_add_pi8(__m64 m1, __m64 m2)
11037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
11137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v8qi)m1 + (__v8qi)m2);
11237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
11337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
11437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_add_pi16(__m64 m1, __m64 m2)
11537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
11637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v4hi)m1 + (__v4hi)m2);
11737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
11837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
11937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_add_pi32(__m64 m1, __m64 m2)
12037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
12137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v2si)m1 + (__v2si)m2);
12237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
12337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
12437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_adds_pi8(__m64 m1, __m64 m2)
12537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
12637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_paddsb((__v8qi)m1, (__v8qi)m2);
12737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
12837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
12937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_adds_pi16(__m64 m1, __m64 m2)
13037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
13137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_paddsw((__v4hi)m1, (__v4hi)m2);
13237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
13337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
13437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_adds_pu8(__m64 m1, __m64 m2)
13537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
13637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_paddusb((__v8qi)m1, (__v8qi)m2);
13737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
13837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
13937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_adds_pu16(__m64 m1, __m64 m2)
14037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
14137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_paddusw((__v4hi)m1, (__v4hi)m2);
14237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
14337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
14437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sub_pi8(__m64 m1, __m64 m2)
14537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
14637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v8qi)m1 - (__v8qi)m2);
14737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
14837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
14937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sub_pi16(__m64 m1, __m64 m2)
15037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
15137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v4hi)m1 - (__v4hi)m2);
15237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
15337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
15437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sub_pi32(__m64 m1, __m64 m2)
15537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
15637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v2si)m1 - (__v2si)m2);
15737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
15837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
15937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_subs_pi8(__m64 m1, __m64 m2)
16037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
16137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psubsb((__v8qi)m1, (__v8qi)m2);
16237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
16337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
16437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_subs_pi16(__m64 m1, __m64 m2)
16537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
16637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psubsw((__v4hi)m1, (__v4hi)m2);
16737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
16837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
16937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_subs_pu8(__m64 m1, __m64 m2)
17037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
17137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psubusb((__v8qi)m1, (__v8qi)m2);
17237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
17337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
17437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_subs_pu16(__m64 m1, __m64 m2)
17537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
17637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psubusw((__v4hi)m1, (__v4hi)m2);
17737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
17837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
17937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_madd_pi16(__m64 m1, __m64 m2)
18037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
18137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pmaddwd((__v4hi)m1, (__v4hi)m2);
18237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
18337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
18437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_mulhi_pi16(__m64 m1, __m64 m2)
18537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
18637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pmulhw((__v4hi)m1, (__v4hi)m2);
18737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
18837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
18937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_mullo_pi16(__m64 m1, __m64 m2)
19037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
19137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)((__v4hi)m1 * (__v4hi)m2);
19237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
19337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
19437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sll_pi16(__m64 m, __m64 count)
19537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
19637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psllw((__v4hi)m, count);
19737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
19837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
19937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_slli_pi16(__m64 m, int count)
20037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
20137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psllwi((__v4hi)m, count);
20237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
20337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
20437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sll_pi32(__m64 m, __m64 count)
20537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
20637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pslld((__v2si)m, count);
20737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
20837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
20937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_slli_pi32(__m64 m, int count)
21037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
21137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pslldi((__v2si)m, count);
21237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
21337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
21437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sll_pi64(__m64 m, __m64 count)
21537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
21637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return __builtin_ia32_psllq(m, count);
21737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
21837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
21937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_slli_pi64(__m64 m, int count)
22037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
22137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return __builtin_ia32_psllqi(m, count);
22237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
22337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
22437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sra_pi16(__m64 m, __m64 count)
22537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
22637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psraw((__v4hi)m, count);
22737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
22837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
22937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srai_pi16(__m64 m, int count)
23037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
23137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrawi((__v4hi)m, count);
23237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
23337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
23437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_sra_pi32(__m64 m, __m64 count)
23537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
23637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrad((__v2si)m, count);
23737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
23837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
23937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srai_pi32(__m64 m, int count)
24037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
24137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psradi((__v2si)m, count);
24237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
24337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
24437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srl_pi16(__m64 m, __m64 count)
24537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
24637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrlw((__v4hi)m, count);
24737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
24837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
24937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srli_pi16(__m64 m, int count)
25037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
25137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrlwi((__v4hi)m, count);
25237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
25337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
25437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srl_pi32(__m64 m, __m64 count)
25537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
25637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrld((__v2si)m, count);
25737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
25837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
25937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srli_pi32(__m64 m, int count)
26037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
26137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrldi((__v2si)m, count);
26237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
26337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
26437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srl_pi64(__m64 m, __m64 count)
26537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
26637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_psrlq(m, count);
26737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
26837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
26937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_srli_pi64(__m64 m, int count)
27037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
27137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return __builtin_ia32_psrlqi(m, count);
27237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
27337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
27437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_and_si64(__m64 m1, __m64 m2)
27537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
27637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return m1 & m2;
27737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
27837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
27937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_andnot_si64(__m64 m1, __m64 m2)
28037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
28137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return ~m1 & m2;
28237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
28337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
28437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_or_si64(__m64 m1, __m64 m2)
28537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
28637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return m1 | m2;
28737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
28837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
28937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_xor_si64(__m64 m1, __m64 m2)
29037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
29137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return m1 ^ m2;
29237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
29337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
29437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpeq_pi8(__m64 m1, __m64 m2)
29537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
29637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpeqb((__v8qi)m1, (__v8qi)m2);
29737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
29837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
29937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpeq_pi16(__m64 m1, __m64 m2)
30037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
30137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpeqw((__v4hi)m1, (__v4hi)m2);
30237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
30337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
30437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpeq_pi32(__m64 m1, __m64 m2)
30537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
30637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpeqd((__v2si)m1, (__v2si)m2);
30737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
30837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
30937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpgt_pi8(__m64 m1, __m64 m2)
31037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
31137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpgtb((__v8qi)m1, (__v8qi)m2);
31237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
31337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
31437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpgt_pi16(__m64 m1, __m64 m2)
31537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
31637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpgtw((__v4hi)m1, (__v4hi)m2);
31737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
31837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
31937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_cmpgt_pi32(__m64 m1, __m64 m2)
32037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
32137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)__builtin_ia32_pcmpgtd((__v2si)m1, (__v2si)m2);
32237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
32337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
32437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_setzero_si64()
32537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
32637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64){ 0LL };
32737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
32837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
32937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set_pi32(int i1, int i0)
33037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
33137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v2si){ i0, i1 };
33237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
33337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
33437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set_pi16(short s3, short s2, short s1, short s0)
33537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
33637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v4hi){ s0, s1, s2, s3 };
33737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
33837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
33937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set_pi8(char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
34037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
34137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v8qi){ b0, b1, b2, b3, b4, b5, b6, b7 };
34237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
34337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
34437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set1_pi32(int i)
34537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
34637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v2si){ i, i };
34737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
34837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
34937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set1_pi16(short s)
35037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
35137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v4hi){ s };
35237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
35337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
35437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_set1_pi8(char b)
35537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
35637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v8qi){ b };
35737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
35837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
35937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_setr_pi32(int i1, int i0)
36037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
36137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v2si){ i1, i0 };
36237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
36337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
36437958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_setr_pi16(short s3, short s2, short s1, short s0)
36537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
36637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v4hi){ s3, s2, s1, s0 };
36737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
36837958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
36937958ee2750db056dc276f045cc8876f2eab2984Anders Carlssoninline __m64 _mm_setr_pi8(char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0)
37037958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson{
37137958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson    return (__m64)(__v8qi){ b7, b6, b5, b4, b3, b2, b1, b0 };
37237958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson}
37337958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
37437958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#endif /* __MMX__ */
37537958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
37637958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson#endif /* __MMINTRIN_H */
37737958ee2750db056dc276f045cc8876f2eab2984Anders Carlsson
378