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