1*ec02198aSmrg /* Copyright (C) 2002-2020 Free Software Foundation, Inc.
210d565efSmrg 
310d565efSmrg    This file is part of GCC.
410d565efSmrg 
510d565efSmrg    GCC is free software; you can redistribute it and/or modify it
610d565efSmrg    under the terms of the GNU General Public License as published
710d565efSmrg    by the Free Software Foundation; either version 3, or (at your
810d565efSmrg    option) any later version.
910d565efSmrg 
1010d565efSmrg    GCC is distributed in the hope that it will be useful, but WITHOUT
1110d565efSmrg    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1210d565efSmrg    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
1310d565efSmrg    License for more details.
1410d565efSmrg 
1510d565efSmrg    Under Section 7 of GPL version 3, you are granted additional
1610d565efSmrg    permissions described in the GCC Runtime Library Exception, version
1710d565efSmrg    3.1, as published by the Free Software Foundation.
1810d565efSmrg 
1910d565efSmrg    You should have received a copy of the GNU General Public License and
2010d565efSmrg    a copy of the GCC Runtime Library Exception along with this program;
2110d565efSmrg    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2210d565efSmrg    <http://www.gnu.org/licenses/>.  */
2310d565efSmrg 
2410d565efSmrg #ifndef _MMINTRIN_H_INCLUDED
2510d565efSmrg #define _MMINTRIN_H_INCLUDED
2610d565efSmrg 
2710d565efSmrg #ifndef __IWMMXT__
2810d565efSmrg #error mmintrin.h included without enabling WMMX/WMMX2 instructions (e.g. -march=iwmmxt or -march=iwmmxt2)
2910d565efSmrg #endif
3010d565efSmrg 
3110d565efSmrg 
3210d565efSmrg #if defined __cplusplus
3310d565efSmrg extern "C" {
3410d565efSmrg /* Intrinsics use C name-mangling.  */
3510d565efSmrg #endif /* __cplusplus */
3610d565efSmrg 
3710d565efSmrg /* The data type intended for user use.  */
3810d565efSmrg typedef unsigned long long __m64, __int64;
3910d565efSmrg 
4010d565efSmrg /* Internal data types for implementing the intrinsics.  */
4110d565efSmrg typedef int __v2si __attribute__ ((vector_size (8)));
4210d565efSmrg typedef short __v4hi __attribute__ ((vector_size (8)));
4310d565efSmrg typedef signed char __v8qi __attribute__ ((vector_size (8)));
4410d565efSmrg 
4510d565efSmrg /* Provided for source compatibility with MMX.  */
4610d565efSmrg extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_empty(void)4710d565efSmrg _mm_empty (void)
4810d565efSmrg {
4910d565efSmrg }
5010d565efSmrg 
5110d565efSmrg /* "Convert" __m64 and __int64 into each other.  */
5210d565efSmrg static __inline __m64
_mm_cvtsi64_m64(__int64 __i)5310d565efSmrg _mm_cvtsi64_m64 (__int64 __i)
5410d565efSmrg {
5510d565efSmrg   return __i;
5610d565efSmrg }
5710d565efSmrg 
5810d565efSmrg static __inline __int64
_mm_cvtm64_si64(__m64 __i)5910d565efSmrg _mm_cvtm64_si64 (__m64 __i)
6010d565efSmrg {
6110d565efSmrg   return __i;
6210d565efSmrg }
6310d565efSmrg 
6410d565efSmrg static __inline int
_mm_cvtsi64_si32(__int64 __i)6510d565efSmrg _mm_cvtsi64_si32 (__int64 __i)
6610d565efSmrg {
6710d565efSmrg   return __i;
6810d565efSmrg }
6910d565efSmrg 
7010d565efSmrg static __inline __int64
_mm_cvtsi32_si64(int __i)7110d565efSmrg _mm_cvtsi32_si64 (int __i)
7210d565efSmrg {
7310d565efSmrg   return (__i & 0xffffffff);
7410d565efSmrg }
7510d565efSmrg 
7610d565efSmrg /* Pack the four 16-bit values from M1 into the lower four 8-bit values of
7710d565efSmrg    the result, and the four 16-bit values from M2 into the upper four 8-bit
7810d565efSmrg    values of the result, all with signed saturation.  */
7910d565efSmrg static __inline __m64
_mm_packs_pi16(__m64 __m1,__m64 __m2)8010d565efSmrg _mm_packs_pi16 (__m64 __m1, __m64 __m2)
8110d565efSmrg {
8210d565efSmrg   return (__m64) __builtin_arm_wpackhss ((__v4hi)__m1, (__v4hi)__m2);
8310d565efSmrg }
8410d565efSmrg 
8510d565efSmrg /* Pack the two 32-bit values from M1 in to the lower two 16-bit values of
8610d565efSmrg    the result, and the two 32-bit values from M2 into the upper two 16-bit
8710d565efSmrg    values of the result, all with signed saturation.  */
8810d565efSmrg static __inline __m64
_mm_packs_pi32(__m64 __m1,__m64 __m2)8910d565efSmrg _mm_packs_pi32 (__m64 __m1, __m64 __m2)
9010d565efSmrg {
9110d565efSmrg   return (__m64) __builtin_arm_wpackwss ((__v2si)__m1, (__v2si)__m2);
9210d565efSmrg }
9310d565efSmrg 
9410d565efSmrg /* Copy the 64-bit value from M1 into the lower 32-bits of the result, and
9510d565efSmrg    the 64-bit value from M2 into the upper 32-bits of the result, all with
9610d565efSmrg    signed saturation for values that do not fit exactly into 32-bits.  */
9710d565efSmrg static __inline __m64
_mm_packs_pi64(__m64 __m1,__m64 __m2)9810d565efSmrg _mm_packs_pi64 (__m64 __m1, __m64 __m2)
9910d565efSmrg {
10010d565efSmrg   return (__m64) __builtin_arm_wpackdss ((long long)__m1, (long long)__m2);
10110d565efSmrg }
10210d565efSmrg 
10310d565efSmrg /* Pack the four 16-bit values from M1 into the lower four 8-bit values of
10410d565efSmrg    the result, and the four 16-bit values from M2 into the upper four 8-bit
10510d565efSmrg    values of the result, all with unsigned saturation.  */
10610d565efSmrg static __inline __m64
_mm_packs_pu16(__m64 __m1,__m64 __m2)10710d565efSmrg _mm_packs_pu16 (__m64 __m1, __m64 __m2)
10810d565efSmrg {
10910d565efSmrg   return (__m64) __builtin_arm_wpackhus ((__v4hi)__m1, (__v4hi)__m2);
11010d565efSmrg }
11110d565efSmrg 
11210d565efSmrg /* Pack the two 32-bit values from M1 into the lower two 16-bit values of
11310d565efSmrg    the result, and the two 32-bit values from M2 into the upper two 16-bit
11410d565efSmrg    values of the result, all with unsigned saturation.  */
11510d565efSmrg static __inline __m64
_mm_packs_pu32(__m64 __m1,__m64 __m2)11610d565efSmrg _mm_packs_pu32 (__m64 __m1, __m64 __m2)
11710d565efSmrg {
11810d565efSmrg   return (__m64) __builtin_arm_wpackwus ((__v2si)__m1, (__v2si)__m2);
11910d565efSmrg }
12010d565efSmrg 
12110d565efSmrg /* Copy the 64-bit value from M1 into the lower 32-bits of the result, and
12210d565efSmrg    the 64-bit value from M2 into the upper 32-bits of the result, all with
12310d565efSmrg    unsigned saturation for values that do not fit exactly into 32-bits.  */
12410d565efSmrg static __inline __m64
_mm_packs_pu64(__m64 __m1,__m64 __m2)12510d565efSmrg _mm_packs_pu64 (__m64 __m1, __m64 __m2)
12610d565efSmrg {
12710d565efSmrg   return (__m64) __builtin_arm_wpackdus ((long long)__m1, (long long)__m2);
12810d565efSmrg }
12910d565efSmrg 
13010d565efSmrg /* Interleave the four 8-bit values from the high half of M1 with the four
13110d565efSmrg    8-bit values from the high half of M2.  */
13210d565efSmrg static __inline __m64
_mm_unpackhi_pi8(__m64 __m1,__m64 __m2)13310d565efSmrg _mm_unpackhi_pi8 (__m64 __m1, __m64 __m2)
13410d565efSmrg {
13510d565efSmrg   return (__m64) __builtin_arm_wunpckihb ((__v8qi)__m1, (__v8qi)__m2);
13610d565efSmrg }
13710d565efSmrg 
13810d565efSmrg /* Interleave the two 16-bit values from the high half of M1 with the two
13910d565efSmrg    16-bit values from the high half of M2.  */
14010d565efSmrg static __inline __m64
_mm_unpackhi_pi16(__m64 __m1,__m64 __m2)14110d565efSmrg _mm_unpackhi_pi16 (__m64 __m1, __m64 __m2)
14210d565efSmrg {
14310d565efSmrg   return (__m64) __builtin_arm_wunpckihh ((__v4hi)__m1, (__v4hi)__m2);
14410d565efSmrg }
14510d565efSmrg 
14610d565efSmrg /* Interleave the 32-bit value from the high half of M1 with the 32-bit
14710d565efSmrg    value from the high half of M2.  */
14810d565efSmrg static __inline __m64
_mm_unpackhi_pi32(__m64 __m1,__m64 __m2)14910d565efSmrg _mm_unpackhi_pi32 (__m64 __m1, __m64 __m2)
15010d565efSmrg {
15110d565efSmrg   return (__m64) __builtin_arm_wunpckihw ((__v2si)__m1, (__v2si)__m2);
15210d565efSmrg }
15310d565efSmrg 
15410d565efSmrg /* Interleave the four 8-bit values from the low half of M1 with the four
15510d565efSmrg    8-bit values from the low half of M2.  */
15610d565efSmrg static __inline __m64
_mm_unpacklo_pi8(__m64 __m1,__m64 __m2)15710d565efSmrg _mm_unpacklo_pi8 (__m64 __m1, __m64 __m2)
15810d565efSmrg {
15910d565efSmrg   return (__m64) __builtin_arm_wunpckilb ((__v8qi)__m1, (__v8qi)__m2);
16010d565efSmrg }
16110d565efSmrg 
16210d565efSmrg /* Interleave the two 16-bit values from the low half of M1 with the two
16310d565efSmrg    16-bit values from the low half of M2.  */
16410d565efSmrg static __inline __m64
_mm_unpacklo_pi16(__m64 __m1,__m64 __m2)16510d565efSmrg _mm_unpacklo_pi16 (__m64 __m1, __m64 __m2)
16610d565efSmrg {
16710d565efSmrg   return (__m64) __builtin_arm_wunpckilh ((__v4hi)__m1, (__v4hi)__m2);
16810d565efSmrg }
16910d565efSmrg 
17010d565efSmrg /* Interleave the 32-bit value from the low half of M1 with the 32-bit
17110d565efSmrg    value from the low half of M2.  */
17210d565efSmrg static __inline __m64
_mm_unpacklo_pi32(__m64 __m1,__m64 __m2)17310d565efSmrg _mm_unpacklo_pi32 (__m64 __m1, __m64 __m2)
17410d565efSmrg {
17510d565efSmrg   return (__m64) __builtin_arm_wunpckilw ((__v2si)__m1, (__v2si)__m2);
17610d565efSmrg }
17710d565efSmrg 
17810d565efSmrg /* Take the four 8-bit values from the low half of M1, sign extend them,
17910d565efSmrg    and return the result as a vector of four 16-bit quantities.  */
18010d565efSmrg static __inline __m64
_mm_unpackel_pi8(__m64 __m1)18110d565efSmrg _mm_unpackel_pi8 (__m64 __m1)
18210d565efSmrg {
18310d565efSmrg   return (__m64) __builtin_arm_wunpckelsb ((__v8qi)__m1);
18410d565efSmrg }
18510d565efSmrg 
18610d565efSmrg /* Take the two 16-bit values from the low half of M1, sign extend them,
18710d565efSmrg    and return the result as a vector of two 32-bit quantities.  */
18810d565efSmrg static __inline __m64
_mm_unpackel_pi16(__m64 __m1)18910d565efSmrg _mm_unpackel_pi16 (__m64 __m1)
19010d565efSmrg {
19110d565efSmrg   return (__m64) __builtin_arm_wunpckelsh ((__v4hi)__m1);
19210d565efSmrg }
19310d565efSmrg 
19410d565efSmrg /* Take the 32-bit value from the low half of M1, and return it sign extended
19510d565efSmrg   to 64 bits.  */
19610d565efSmrg static __inline __m64
_mm_unpackel_pi32(__m64 __m1)19710d565efSmrg _mm_unpackel_pi32 (__m64 __m1)
19810d565efSmrg {
19910d565efSmrg   return (__m64) __builtin_arm_wunpckelsw ((__v2si)__m1);
20010d565efSmrg }
20110d565efSmrg 
20210d565efSmrg /* Take the four 8-bit values from the high half of M1, sign extend them,
20310d565efSmrg    and return the result as a vector of four 16-bit quantities.  */
20410d565efSmrg static __inline __m64
_mm_unpackeh_pi8(__m64 __m1)20510d565efSmrg _mm_unpackeh_pi8 (__m64 __m1)
20610d565efSmrg {
20710d565efSmrg   return (__m64) __builtin_arm_wunpckehsb ((__v8qi)__m1);
20810d565efSmrg }
20910d565efSmrg 
21010d565efSmrg /* Take the two 16-bit values from the high half of M1, sign extend them,
21110d565efSmrg    and return the result as a vector of two 32-bit quantities.  */
21210d565efSmrg static __inline __m64
_mm_unpackeh_pi16(__m64 __m1)21310d565efSmrg _mm_unpackeh_pi16 (__m64 __m1)
21410d565efSmrg {
21510d565efSmrg   return (__m64) __builtin_arm_wunpckehsh ((__v4hi)__m1);
21610d565efSmrg }
21710d565efSmrg 
21810d565efSmrg /* Take the 32-bit value from the high half of M1, and return it sign extended
21910d565efSmrg   to 64 bits.  */
22010d565efSmrg static __inline __m64
_mm_unpackeh_pi32(__m64 __m1)22110d565efSmrg _mm_unpackeh_pi32 (__m64 __m1)
22210d565efSmrg {
22310d565efSmrg   return (__m64) __builtin_arm_wunpckehsw ((__v2si)__m1);
22410d565efSmrg }
22510d565efSmrg 
22610d565efSmrg /* Take the four 8-bit values from the low half of M1, zero extend them,
22710d565efSmrg    and return the result as a vector of four 16-bit quantities.  */
22810d565efSmrg static __inline __m64
_mm_unpackel_pu8(__m64 __m1)22910d565efSmrg _mm_unpackel_pu8 (__m64 __m1)
23010d565efSmrg {
23110d565efSmrg   return (__m64) __builtin_arm_wunpckelub ((__v8qi)__m1);
23210d565efSmrg }
23310d565efSmrg 
23410d565efSmrg /* Take the two 16-bit values from the low half of M1, zero extend them,
23510d565efSmrg    and return the result as a vector of two 32-bit quantities.  */
23610d565efSmrg static __inline __m64
_mm_unpackel_pu16(__m64 __m1)23710d565efSmrg _mm_unpackel_pu16 (__m64 __m1)
23810d565efSmrg {
23910d565efSmrg   return (__m64) __builtin_arm_wunpckeluh ((__v4hi)__m1);
24010d565efSmrg }
24110d565efSmrg 
24210d565efSmrg /* Take the 32-bit value from the low half of M1, and return it zero extended
24310d565efSmrg   to 64 bits.  */
24410d565efSmrg static __inline __m64
_mm_unpackel_pu32(__m64 __m1)24510d565efSmrg _mm_unpackel_pu32 (__m64 __m1)
24610d565efSmrg {
24710d565efSmrg   return (__m64) __builtin_arm_wunpckeluw ((__v2si)__m1);
24810d565efSmrg }
24910d565efSmrg 
25010d565efSmrg /* Take the four 8-bit values from the high half of M1, zero extend them,
25110d565efSmrg    and return the result as a vector of four 16-bit quantities.  */
25210d565efSmrg static __inline __m64
_mm_unpackeh_pu8(__m64 __m1)25310d565efSmrg _mm_unpackeh_pu8 (__m64 __m1)
25410d565efSmrg {
25510d565efSmrg   return (__m64) __builtin_arm_wunpckehub ((__v8qi)__m1);
25610d565efSmrg }
25710d565efSmrg 
25810d565efSmrg /* Take the two 16-bit values from the high half of M1, zero extend them,
25910d565efSmrg    and return the result as a vector of two 32-bit quantities.  */
26010d565efSmrg static __inline __m64
_mm_unpackeh_pu16(__m64 __m1)26110d565efSmrg _mm_unpackeh_pu16 (__m64 __m1)
26210d565efSmrg {
26310d565efSmrg   return (__m64) __builtin_arm_wunpckehuh ((__v4hi)__m1);
26410d565efSmrg }
26510d565efSmrg 
26610d565efSmrg /* Take the 32-bit value from the high half of M1, and return it zero extended
26710d565efSmrg   to 64 bits.  */
26810d565efSmrg static __inline __m64
_mm_unpackeh_pu32(__m64 __m1)26910d565efSmrg _mm_unpackeh_pu32 (__m64 __m1)
27010d565efSmrg {
27110d565efSmrg   return (__m64) __builtin_arm_wunpckehuw ((__v2si)__m1);
27210d565efSmrg }
27310d565efSmrg 
27410d565efSmrg /* Add the 8-bit values in M1 to the 8-bit values in M2.  */
27510d565efSmrg static __inline __m64
_mm_add_pi8(__m64 __m1,__m64 __m2)27610d565efSmrg _mm_add_pi8 (__m64 __m1, __m64 __m2)
27710d565efSmrg {
27810d565efSmrg   return (__m64) __builtin_arm_waddb ((__v8qi)__m1, (__v8qi)__m2);
27910d565efSmrg }
28010d565efSmrg 
28110d565efSmrg /* Add the 16-bit values in M1 to the 16-bit values in M2.  */
28210d565efSmrg static __inline __m64
_mm_add_pi16(__m64 __m1,__m64 __m2)28310d565efSmrg _mm_add_pi16 (__m64 __m1, __m64 __m2)
28410d565efSmrg {
28510d565efSmrg   return (__m64) __builtin_arm_waddh ((__v4hi)__m1, (__v4hi)__m2);
28610d565efSmrg }
28710d565efSmrg 
28810d565efSmrg /* Add the 32-bit values in M1 to the 32-bit values in M2.  */
28910d565efSmrg static __inline __m64
_mm_add_pi32(__m64 __m1,__m64 __m2)29010d565efSmrg _mm_add_pi32 (__m64 __m1, __m64 __m2)
29110d565efSmrg {
29210d565efSmrg   return (__m64) __builtin_arm_waddw ((__v2si)__m1, (__v2si)__m2);
29310d565efSmrg }
29410d565efSmrg 
29510d565efSmrg /* Add the 8-bit values in M1 to the 8-bit values in M2 using signed
29610d565efSmrg    saturated arithmetic.  */
29710d565efSmrg static __inline __m64
_mm_adds_pi8(__m64 __m1,__m64 __m2)29810d565efSmrg _mm_adds_pi8 (__m64 __m1, __m64 __m2)
29910d565efSmrg {
30010d565efSmrg   return (__m64) __builtin_arm_waddbss ((__v8qi)__m1, (__v8qi)__m2);
30110d565efSmrg }
30210d565efSmrg 
30310d565efSmrg /* Add the 16-bit values in M1 to the 16-bit values in M2 using signed
30410d565efSmrg    saturated arithmetic.  */
30510d565efSmrg static __inline __m64
_mm_adds_pi16(__m64 __m1,__m64 __m2)30610d565efSmrg _mm_adds_pi16 (__m64 __m1, __m64 __m2)
30710d565efSmrg {
30810d565efSmrg   return (__m64) __builtin_arm_waddhss ((__v4hi)__m1, (__v4hi)__m2);
30910d565efSmrg }
31010d565efSmrg 
31110d565efSmrg /* Add the 32-bit values in M1 to the 32-bit values in M2 using signed
31210d565efSmrg    saturated arithmetic.  */
31310d565efSmrg static __inline __m64
_mm_adds_pi32(__m64 __m1,__m64 __m2)31410d565efSmrg _mm_adds_pi32 (__m64 __m1, __m64 __m2)
31510d565efSmrg {
31610d565efSmrg   return (__m64) __builtin_arm_waddwss ((__v2si)__m1, (__v2si)__m2);
31710d565efSmrg }
31810d565efSmrg 
31910d565efSmrg /* Add the 8-bit values in M1 to the 8-bit values in M2 using unsigned
32010d565efSmrg    saturated arithmetic.  */
32110d565efSmrg static __inline __m64
_mm_adds_pu8(__m64 __m1,__m64 __m2)32210d565efSmrg _mm_adds_pu8 (__m64 __m1, __m64 __m2)
32310d565efSmrg {
32410d565efSmrg   return (__m64) __builtin_arm_waddbus ((__v8qi)__m1, (__v8qi)__m2);
32510d565efSmrg }
32610d565efSmrg 
32710d565efSmrg /* Add the 16-bit values in M1 to the 16-bit values in M2 using unsigned
32810d565efSmrg    saturated arithmetic.  */
32910d565efSmrg static __inline __m64
_mm_adds_pu16(__m64 __m1,__m64 __m2)33010d565efSmrg _mm_adds_pu16 (__m64 __m1, __m64 __m2)
33110d565efSmrg {
33210d565efSmrg   return (__m64) __builtin_arm_waddhus ((__v4hi)__m1, (__v4hi)__m2);
33310d565efSmrg }
33410d565efSmrg 
33510d565efSmrg /* Add the 32-bit values in M1 to the 32-bit values in M2 using unsigned
33610d565efSmrg    saturated arithmetic.  */
33710d565efSmrg static __inline __m64
_mm_adds_pu32(__m64 __m1,__m64 __m2)33810d565efSmrg _mm_adds_pu32 (__m64 __m1, __m64 __m2)
33910d565efSmrg {
34010d565efSmrg   return (__m64) __builtin_arm_waddwus ((__v2si)__m1, (__v2si)__m2);
34110d565efSmrg }
34210d565efSmrg 
34310d565efSmrg /* Subtract the 8-bit values in M2 from the 8-bit values in M1.  */
34410d565efSmrg static __inline __m64
_mm_sub_pi8(__m64 __m1,__m64 __m2)34510d565efSmrg _mm_sub_pi8 (__m64 __m1, __m64 __m2)
34610d565efSmrg {
34710d565efSmrg   return (__m64) __builtin_arm_wsubb ((__v8qi)__m1, (__v8qi)__m2);
34810d565efSmrg }
34910d565efSmrg 
35010d565efSmrg /* Subtract the 16-bit values in M2 from the 16-bit values in M1.  */
35110d565efSmrg static __inline __m64
_mm_sub_pi16(__m64 __m1,__m64 __m2)35210d565efSmrg _mm_sub_pi16 (__m64 __m1, __m64 __m2)
35310d565efSmrg {
35410d565efSmrg   return (__m64) __builtin_arm_wsubh ((__v4hi)__m1, (__v4hi)__m2);
35510d565efSmrg }
35610d565efSmrg 
35710d565efSmrg /* Subtract the 32-bit values in M2 from the 32-bit values in M1.  */
35810d565efSmrg static __inline __m64
_mm_sub_pi32(__m64 __m1,__m64 __m2)35910d565efSmrg _mm_sub_pi32 (__m64 __m1, __m64 __m2)
36010d565efSmrg {
36110d565efSmrg   return (__m64) __builtin_arm_wsubw ((__v2si)__m1, (__v2si)__m2);
36210d565efSmrg }
36310d565efSmrg 
36410d565efSmrg /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using signed
36510d565efSmrg    saturating arithmetic.  */
36610d565efSmrg static __inline __m64
_mm_subs_pi8(__m64 __m1,__m64 __m2)36710d565efSmrg _mm_subs_pi8 (__m64 __m1, __m64 __m2)
36810d565efSmrg {
36910d565efSmrg   return (__m64) __builtin_arm_wsubbss ((__v8qi)__m1, (__v8qi)__m2);
37010d565efSmrg }
37110d565efSmrg 
37210d565efSmrg /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using
37310d565efSmrg    signed saturating arithmetic.  */
37410d565efSmrg static __inline __m64
_mm_subs_pi16(__m64 __m1,__m64 __m2)37510d565efSmrg _mm_subs_pi16 (__m64 __m1, __m64 __m2)
37610d565efSmrg {
37710d565efSmrg   return (__m64) __builtin_arm_wsubhss ((__v4hi)__m1, (__v4hi)__m2);
37810d565efSmrg }
37910d565efSmrg 
38010d565efSmrg /* Subtract the 32-bit values in M2 from the 32-bit values in M1 using
38110d565efSmrg    signed saturating arithmetic.  */
38210d565efSmrg static __inline __m64
_mm_subs_pi32(__m64 __m1,__m64 __m2)38310d565efSmrg _mm_subs_pi32 (__m64 __m1, __m64 __m2)
38410d565efSmrg {
38510d565efSmrg   return (__m64) __builtin_arm_wsubwss ((__v2si)__m1, (__v2si)__m2);
38610d565efSmrg }
38710d565efSmrg 
38810d565efSmrg /* Subtract the 8-bit values in M2 from the 8-bit values in M1 using
38910d565efSmrg    unsigned saturating arithmetic.  */
39010d565efSmrg static __inline __m64
_mm_subs_pu8(__m64 __m1,__m64 __m2)39110d565efSmrg _mm_subs_pu8 (__m64 __m1, __m64 __m2)
39210d565efSmrg {
39310d565efSmrg   return (__m64) __builtin_arm_wsubbus ((__v8qi)__m1, (__v8qi)__m2);
39410d565efSmrg }
39510d565efSmrg 
39610d565efSmrg /* Subtract the 16-bit values in M2 from the 16-bit values in M1 using
39710d565efSmrg    unsigned saturating arithmetic.  */
39810d565efSmrg static __inline __m64
_mm_subs_pu16(__m64 __m1,__m64 __m2)39910d565efSmrg _mm_subs_pu16 (__m64 __m1, __m64 __m2)
40010d565efSmrg {
40110d565efSmrg   return (__m64) __builtin_arm_wsubhus ((__v4hi)__m1, (__v4hi)__m2);
40210d565efSmrg }
40310d565efSmrg 
40410d565efSmrg /* Subtract the 32-bit values in M2 from the 32-bit values in M1 using
40510d565efSmrg    unsigned saturating arithmetic.  */
40610d565efSmrg static __inline __m64
_mm_subs_pu32(__m64 __m1,__m64 __m2)40710d565efSmrg _mm_subs_pu32 (__m64 __m1, __m64 __m2)
40810d565efSmrg {
40910d565efSmrg   return (__m64) __builtin_arm_wsubwus ((__v2si)__m1, (__v2si)__m2);
41010d565efSmrg }
41110d565efSmrg 
41210d565efSmrg /* Multiply four 16-bit values in M1 by four 16-bit values in M2 producing
41310d565efSmrg    four 32-bit intermediate results, which are then summed by pairs to
41410d565efSmrg    produce two 32-bit results.  */
41510d565efSmrg static __inline __m64
_mm_madd_pi16(__m64 __m1,__m64 __m2)41610d565efSmrg _mm_madd_pi16 (__m64 __m1, __m64 __m2)
41710d565efSmrg {
41810d565efSmrg   return (__m64) __builtin_arm_wmadds ((__v4hi)__m1, (__v4hi)__m2);
41910d565efSmrg }
42010d565efSmrg 
42110d565efSmrg /* Multiply four 16-bit values in M1 by four 16-bit values in M2 producing
42210d565efSmrg    four 32-bit intermediate results, which are then summed by pairs to
42310d565efSmrg    produce two 32-bit results.  */
42410d565efSmrg static __inline __m64
_mm_madd_pu16(__m64 __m1,__m64 __m2)42510d565efSmrg _mm_madd_pu16 (__m64 __m1, __m64 __m2)
42610d565efSmrg {
42710d565efSmrg   return (__m64) __builtin_arm_wmaddu ((__v4hi)__m1, (__v4hi)__m2);
42810d565efSmrg }
42910d565efSmrg 
43010d565efSmrg /* Multiply four signed 16-bit values in M1 by four signed 16-bit values in
43110d565efSmrg    M2 and produce the high 16 bits of the 32-bit results.  */
43210d565efSmrg static __inline __m64
_mm_mulhi_pi16(__m64 __m1,__m64 __m2)43310d565efSmrg _mm_mulhi_pi16 (__m64 __m1, __m64 __m2)
43410d565efSmrg {
43510d565efSmrg   return (__m64) __builtin_arm_wmulsm ((__v4hi)__m1, (__v4hi)__m2);
43610d565efSmrg }
43710d565efSmrg 
43810d565efSmrg /* Multiply four signed 16-bit values in M1 by four signed 16-bit values in
43910d565efSmrg    M2 and produce the high 16 bits of the 32-bit results.  */
44010d565efSmrg static __inline __m64
_mm_mulhi_pu16(__m64 __m1,__m64 __m2)44110d565efSmrg _mm_mulhi_pu16 (__m64 __m1, __m64 __m2)
44210d565efSmrg {
44310d565efSmrg   return (__m64) __builtin_arm_wmulum ((__v4hi)__m1, (__v4hi)__m2);
44410d565efSmrg }
44510d565efSmrg 
44610d565efSmrg /* Multiply four 16-bit values in M1 by four 16-bit values in M2 and produce
44710d565efSmrg    the low 16 bits of the results.  */
44810d565efSmrg static __inline __m64
_mm_mullo_pi16(__m64 __m1,__m64 __m2)44910d565efSmrg _mm_mullo_pi16 (__m64 __m1, __m64 __m2)
45010d565efSmrg {
45110d565efSmrg   return (__m64) __builtin_arm_wmulul ((__v4hi)__m1, (__v4hi)__m2);
45210d565efSmrg }
45310d565efSmrg 
45410d565efSmrg /* Shift four 16-bit values in M left by COUNT.  */
45510d565efSmrg static __inline __m64
_mm_sll_pi16(__m64 __m,__m64 __count)45610d565efSmrg _mm_sll_pi16 (__m64 __m, __m64 __count)
45710d565efSmrg {
45810d565efSmrg   return (__m64) __builtin_arm_wsllh ((__v4hi)__m, __count);
45910d565efSmrg }
46010d565efSmrg 
46110d565efSmrg static __inline __m64
_mm_slli_pi16(__m64 __m,int __count)46210d565efSmrg _mm_slli_pi16 (__m64 __m, int __count)
46310d565efSmrg {
46410d565efSmrg   return (__m64) __builtin_arm_wsllhi ((__v4hi)__m, __count);
46510d565efSmrg }
46610d565efSmrg 
46710d565efSmrg /* Shift two 32-bit values in M left by COUNT.  */
46810d565efSmrg static __inline __m64
_mm_sll_pi32(__m64 __m,__m64 __count)46910d565efSmrg _mm_sll_pi32 (__m64 __m, __m64 __count)
47010d565efSmrg {
47110d565efSmrg   return (__m64) __builtin_arm_wsllw ((__v2si)__m, __count);
47210d565efSmrg }
47310d565efSmrg 
47410d565efSmrg static __inline __m64
_mm_slli_pi32(__m64 __m,int __count)47510d565efSmrg _mm_slli_pi32 (__m64 __m, int __count)
47610d565efSmrg {
47710d565efSmrg   return (__m64) __builtin_arm_wsllwi ((__v2si)__m, __count);
47810d565efSmrg }
47910d565efSmrg 
48010d565efSmrg /* Shift the 64-bit value in M left by COUNT.  */
48110d565efSmrg static __inline __m64
_mm_sll_si64(__m64 __m,__m64 __count)48210d565efSmrg _mm_sll_si64 (__m64 __m, __m64 __count)
48310d565efSmrg {
48410d565efSmrg   return (__m64) __builtin_arm_wslld (__m, __count);
48510d565efSmrg }
48610d565efSmrg 
48710d565efSmrg static __inline __m64
_mm_slli_si64(__m64 __m,int __count)48810d565efSmrg _mm_slli_si64 (__m64 __m, int __count)
48910d565efSmrg {
49010d565efSmrg   return (__m64) __builtin_arm_wslldi (__m, __count);
49110d565efSmrg }
49210d565efSmrg 
49310d565efSmrg /* Shift four 16-bit values in M right by COUNT; shift in the sign bit.  */
49410d565efSmrg static __inline __m64
_mm_sra_pi16(__m64 __m,__m64 __count)49510d565efSmrg _mm_sra_pi16 (__m64 __m, __m64 __count)
49610d565efSmrg {
49710d565efSmrg   return (__m64) __builtin_arm_wsrah ((__v4hi)__m, __count);
49810d565efSmrg }
49910d565efSmrg 
50010d565efSmrg static __inline __m64
_mm_srai_pi16(__m64 __m,int __count)50110d565efSmrg _mm_srai_pi16 (__m64 __m, int __count)
50210d565efSmrg {
50310d565efSmrg   return (__m64) __builtin_arm_wsrahi ((__v4hi)__m, __count);
50410d565efSmrg }
50510d565efSmrg 
50610d565efSmrg /* Shift two 32-bit values in M right by COUNT; shift in the sign bit.  */
50710d565efSmrg static __inline __m64
_mm_sra_pi32(__m64 __m,__m64 __count)50810d565efSmrg _mm_sra_pi32 (__m64 __m, __m64 __count)
50910d565efSmrg {
51010d565efSmrg   return (__m64) __builtin_arm_wsraw ((__v2si)__m, __count);
51110d565efSmrg }
51210d565efSmrg 
51310d565efSmrg static __inline __m64
_mm_srai_pi32(__m64 __m,int __count)51410d565efSmrg _mm_srai_pi32 (__m64 __m, int __count)
51510d565efSmrg {
51610d565efSmrg   return (__m64) __builtin_arm_wsrawi ((__v2si)__m, __count);
51710d565efSmrg }
51810d565efSmrg 
51910d565efSmrg /* Shift the 64-bit value in M right by COUNT; shift in the sign bit.  */
52010d565efSmrg static __inline __m64
_mm_sra_si64(__m64 __m,__m64 __count)52110d565efSmrg _mm_sra_si64 (__m64 __m, __m64 __count)
52210d565efSmrg {
52310d565efSmrg   return (__m64) __builtin_arm_wsrad (__m, __count);
52410d565efSmrg }
52510d565efSmrg 
52610d565efSmrg static __inline __m64
_mm_srai_si64(__m64 __m,int __count)52710d565efSmrg _mm_srai_si64 (__m64 __m, int __count)
52810d565efSmrg {
52910d565efSmrg   return (__m64) __builtin_arm_wsradi (__m, __count);
53010d565efSmrg }
53110d565efSmrg 
53210d565efSmrg /* Shift four 16-bit values in M right by COUNT; shift in zeros.  */
53310d565efSmrg static __inline __m64
_mm_srl_pi16(__m64 __m,__m64 __count)53410d565efSmrg _mm_srl_pi16 (__m64 __m, __m64 __count)
53510d565efSmrg {
53610d565efSmrg   return (__m64) __builtin_arm_wsrlh ((__v4hi)__m, __count);
53710d565efSmrg }
53810d565efSmrg 
53910d565efSmrg static __inline __m64
_mm_srli_pi16(__m64 __m,int __count)54010d565efSmrg _mm_srli_pi16 (__m64 __m, int __count)
54110d565efSmrg {
54210d565efSmrg   return (__m64) __builtin_arm_wsrlhi ((__v4hi)__m, __count);
54310d565efSmrg }
54410d565efSmrg 
54510d565efSmrg /* Shift two 32-bit values in M right by COUNT; shift in zeros.  */
54610d565efSmrg static __inline __m64
_mm_srl_pi32(__m64 __m,__m64 __count)54710d565efSmrg _mm_srl_pi32 (__m64 __m, __m64 __count)
54810d565efSmrg {
54910d565efSmrg   return (__m64) __builtin_arm_wsrlw ((__v2si)__m, __count);
55010d565efSmrg }
55110d565efSmrg 
55210d565efSmrg static __inline __m64
_mm_srli_pi32(__m64 __m,int __count)55310d565efSmrg _mm_srli_pi32 (__m64 __m, int __count)
55410d565efSmrg {
55510d565efSmrg   return (__m64) __builtin_arm_wsrlwi ((__v2si)__m, __count);
55610d565efSmrg }
55710d565efSmrg 
55810d565efSmrg /* Shift the 64-bit value in M left by COUNT; shift in zeros.  */
55910d565efSmrg static __inline __m64
_mm_srl_si64(__m64 __m,__m64 __count)56010d565efSmrg _mm_srl_si64 (__m64 __m, __m64 __count)
56110d565efSmrg {
56210d565efSmrg   return (__m64) __builtin_arm_wsrld (__m, __count);
56310d565efSmrg }
56410d565efSmrg 
56510d565efSmrg static __inline __m64
_mm_srli_si64(__m64 __m,int __count)56610d565efSmrg _mm_srli_si64 (__m64 __m, int __count)
56710d565efSmrg {
56810d565efSmrg   return (__m64) __builtin_arm_wsrldi (__m, __count);
56910d565efSmrg }
57010d565efSmrg 
57110d565efSmrg /* Rotate four 16-bit values in M right by COUNT.  */
57210d565efSmrg static __inline __m64
_mm_ror_pi16(__m64 __m,__m64 __count)57310d565efSmrg _mm_ror_pi16 (__m64 __m, __m64 __count)
57410d565efSmrg {
57510d565efSmrg   return (__m64) __builtin_arm_wrorh ((__v4hi)__m, __count);
57610d565efSmrg }
57710d565efSmrg 
57810d565efSmrg static __inline __m64
_mm_rori_pi16(__m64 __m,int __count)57910d565efSmrg _mm_rori_pi16 (__m64 __m, int __count)
58010d565efSmrg {
58110d565efSmrg   return (__m64) __builtin_arm_wrorhi ((__v4hi)__m, __count);
58210d565efSmrg }
58310d565efSmrg 
58410d565efSmrg /* Rotate two 32-bit values in M right by COUNT.  */
58510d565efSmrg static __inline __m64
_mm_ror_pi32(__m64 __m,__m64 __count)58610d565efSmrg _mm_ror_pi32 (__m64 __m, __m64 __count)
58710d565efSmrg {
58810d565efSmrg   return (__m64) __builtin_arm_wrorw ((__v2si)__m, __count);
58910d565efSmrg }
59010d565efSmrg 
59110d565efSmrg static __inline __m64
_mm_rori_pi32(__m64 __m,int __count)59210d565efSmrg _mm_rori_pi32 (__m64 __m, int __count)
59310d565efSmrg {
59410d565efSmrg   return (__m64) __builtin_arm_wrorwi ((__v2si)__m, __count);
59510d565efSmrg }
59610d565efSmrg 
59710d565efSmrg /* Rotate two 64-bit values in M right by COUNT.  */
59810d565efSmrg static __inline __m64
_mm_ror_si64(__m64 __m,__m64 __count)59910d565efSmrg _mm_ror_si64 (__m64 __m, __m64 __count)
60010d565efSmrg {
60110d565efSmrg   return (__m64) __builtin_arm_wrord (__m, __count);
60210d565efSmrg }
60310d565efSmrg 
60410d565efSmrg static __inline __m64
_mm_rori_si64(__m64 __m,int __count)60510d565efSmrg _mm_rori_si64 (__m64 __m, int __count)
60610d565efSmrg {
60710d565efSmrg   return (__m64) __builtin_arm_wrordi (__m, __count);
60810d565efSmrg }
60910d565efSmrg 
61010d565efSmrg /* Bit-wise AND the 64-bit values in M1 and M2.  */
61110d565efSmrg static __inline __m64
_mm_and_si64(__m64 __m1,__m64 __m2)61210d565efSmrg _mm_and_si64 (__m64 __m1, __m64 __m2)
61310d565efSmrg {
61410d565efSmrg   return __builtin_arm_wand (__m1, __m2);
61510d565efSmrg }
61610d565efSmrg 
61710d565efSmrg /* Bit-wise complement the 64-bit value in M1 and bit-wise AND it with the
61810d565efSmrg    64-bit value in M2.  */
61910d565efSmrg static __inline __m64
_mm_andnot_si64(__m64 __m1,__m64 __m2)62010d565efSmrg _mm_andnot_si64 (__m64 __m1, __m64 __m2)
62110d565efSmrg {
62210d565efSmrg   return __builtin_arm_wandn (__m2, __m1);
62310d565efSmrg }
62410d565efSmrg 
62510d565efSmrg /* Bit-wise inclusive OR the 64-bit values in M1 and M2.  */
62610d565efSmrg static __inline __m64
_mm_or_si64(__m64 __m1,__m64 __m2)62710d565efSmrg _mm_or_si64 (__m64 __m1, __m64 __m2)
62810d565efSmrg {
62910d565efSmrg   return __builtin_arm_wor (__m1, __m2);
63010d565efSmrg }
63110d565efSmrg 
63210d565efSmrg /* Bit-wise exclusive OR the 64-bit values in M1 and M2.  */
63310d565efSmrg static __inline __m64
_mm_xor_si64(__m64 __m1,__m64 __m2)63410d565efSmrg _mm_xor_si64 (__m64 __m1, __m64 __m2)
63510d565efSmrg {
63610d565efSmrg   return __builtin_arm_wxor (__m1, __m2);
63710d565efSmrg }
63810d565efSmrg 
63910d565efSmrg /* Compare eight 8-bit values.  The result of the comparison is 0xFF if the
64010d565efSmrg    test is true and zero if false.  */
64110d565efSmrg static __inline __m64
_mm_cmpeq_pi8(__m64 __m1,__m64 __m2)64210d565efSmrg _mm_cmpeq_pi8 (__m64 __m1, __m64 __m2)
64310d565efSmrg {
64410d565efSmrg   return (__m64) __builtin_arm_wcmpeqb ((__v8qi)__m1, (__v8qi)__m2);
64510d565efSmrg }
64610d565efSmrg 
64710d565efSmrg static __inline __m64
_mm_cmpgt_pi8(__m64 __m1,__m64 __m2)64810d565efSmrg _mm_cmpgt_pi8 (__m64 __m1, __m64 __m2)
64910d565efSmrg {
65010d565efSmrg   return (__m64) __builtin_arm_wcmpgtsb ((__v8qi)__m1, (__v8qi)__m2);
65110d565efSmrg }
65210d565efSmrg 
65310d565efSmrg static __inline __m64
_mm_cmpgt_pu8(__m64 __m1,__m64 __m2)65410d565efSmrg _mm_cmpgt_pu8 (__m64 __m1, __m64 __m2)
65510d565efSmrg {
65610d565efSmrg   return (__m64) __builtin_arm_wcmpgtub ((__v8qi)__m1, (__v8qi)__m2);
65710d565efSmrg }
65810d565efSmrg 
65910d565efSmrg /* Compare four 16-bit values.  The result of the comparison is 0xFFFF if
66010d565efSmrg    the test is true and zero if false.  */
66110d565efSmrg static __inline __m64
_mm_cmpeq_pi16(__m64 __m1,__m64 __m2)66210d565efSmrg _mm_cmpeq_pi16 (__m64 __m1, __m64 __m2)
66310d565efSmrg {
66410d565efSmrg   return (__m64) __builtin_arm_wcmpeqh ((__v4hi)__m1, (__v4hi)__m2);
66510d565efSmrg }
66610d565efSmrg 
66710d565efSmrg static __inline __m64
_mm_cmpgt_pi16(__m64 __m1,__m64 __m2)66810d565efSmrg _mm_cmpgt_pi16 (__m64 __m1, __m64 __m2)
66910d565efSmrg {
67010d565efSmrg   return (__m64) __builtin_arm_wcmpgtsh ((__v4hi)__m1, (__v4hi)__m2);
67110d565efSmrg }
67210d565efSmrg 
67310d565efSmrg static __inline __m64
_mm_cmpgt_pu16(__m64 __m1,__m64 __m2)67410d565efSmrg _mm_cmpgt_pu16 (__m64 __m1, __m64 __m2)
67510d565efSmrg {
67610d565efSmrg   return (__m64) __builtin_arm_wcmpgtuh ((__v4hi)__m1, (__v4hi)__m2);
67710d565efSmrg }
67810d565efSmrg 
67910d565efSmrg /* Compare two 32-bit values.  The result of the comparison is 0xFFFFFFFF if
68010d565efSmrg    the test is true and zero if false.  */
68110d565efSmrg static __inline __m64
_mm_cmpeq_pi32(__m64 __m1,__m64 __m2)68210d565efSmrg _mm_cmpeq_pi32 (__m64 __m1, __m64 __m2)
68310d565efSmrg {
68410d565efSmrg   return (__m64) __builtin_arm_wcmpeqw ((__v2si)__m1, (__v2si)__m2);
68510d565efSmrg }
68610d565efSmrg 
68710d565efSmrg static __inline __m64
_mm_cmpgt_pi32(__m64 __m1,__m64 __m2)68810d565efSmrg _mm_cmpgt_pi32 (__m64 __m1, __m64 __m2)
68910d565efSmrg {
69010d565efSmrg   return (__m64) __builtin_arm_wcmpgtsw ((__v2si)__m1, (__v2si)__m2);
69110d565efSmrg }
69210d565efSmrg 
69310d565efSmrg static __inline __m64
_mm_cmpgt_pu32(__m64 __m1,__m64 __m2)69410d565efSmrg _mm_cmpgt_pu32 (__m64 __m1, __m64 __m2)
69510d565efSmrg {
69610d565efSmrg   return (__m64) __builtin_arm_wcmpgtuw ((__v2si)__m1, (__v2si)__m2);
69710d565efSmrg }
69810d565efSmrg 
69910d565efSmrg /* Element-wise multiplication of unsigned 16-bit values __B and __C, followed
70010d565efSmrg    by accumulate across all elements and __A.  */
70110d565efSmrg static __inline __m64
_mm_mac_pu16(__m64 __A,__m64 __B,__m64 __C)70210d565efSmrg _mm_mac_pu16 (__m64 __A, __m64 __B, __m64 __C)
70310d565efSmrg {
70410d565efSmrg   return __builtin_arm_wmacu (__A, (__v4hi)__B, (__v4hi)__C);
70510d565efSmrg }
70610d565efSmrg 
70710d565efSmrg /* Element-wise multiplication of signed 16-bit values __B and __C, followed
70810d565efSmrg    by accumulate across all elements and __A.  */
70910d565efSmrg static __inline __m64
_mm_mac_pi16(__m64 __A,__m64 __B,__m64 __C)71010d565efSmrg _mm_mac_pi16 (__m64 __A, __m64 __B, __m64 __C)
71110d565efSmrg {
71210d565efSmrg   return __builtin_arm_wmacs (__A, (__v4hi)__B, (__v4hi)__C);
71310d565efSmrg }
71410d565efSmrg 
71510d565efSmrg /* Element-wise multiplication of unsigned 16-bit values __B and __C, followed
71610d565efSmrg    by accumulate across all elements.  */
71710d565efSmrg static __inline __m64
_mm_macz_pu16(__m64 __A,__m64 __B)71810d565efSmrg _mm_macz_pu16 (__m64 __A, __m64 __B)
71910d565efSmrg {
72010d565efSmrg   return __builtin_arm_wmacuz ((__v4hi)__A, (__v4hi)__B);
72110d565efSmrg }
72210d565efSmrg 
72310d565efSmrg /* Element-wise multiplication of signed 16-bit values __B and __C, followed
72410d565efSmrg    by accumulate across all elements.  */
72510d565efSmrg static __inline __m64
_mm_macz_pi16(__m64 __A,__m64 __B)72610d565efSmrg _mm_macz_pi16 (__m64 __A, __m64 __B)
72710d565efSmrg {
72810d565efSmrg   return __builtin_arm_wmacsz ((__v4hi)__A, (__v4hi)__B);
72910d565efSmrg }
73010d565efSmrg 
73110d565efSmrg /* Accumulate across all unsigned 8-bit values in __A.  */
73210d565efSmrg static __inline __m64
_mm_acc_pu8(__m64 __A)73310d565efSmrg _mm_acc_pu8 (__m64 __A)
73410d565efSmrg {
73510d565efSmrg   return __builtin_arm_waccb ((__v8qi)__A);
73610d565efSmrg }
73710d565efSmrg 
73810d565efSmrg /* Accumulate across all unsigned 16-bit values in __A.  */
73910d565efSmrg static __inline __m64
_mm_acc_pu16(__m64 __A)74010d565efSmrg _mm_acc_pu16 (__m64 __A)
74110d565efSmrg {
74210d565efSmrg   return __builtin_arm_wacch ((__v4hi)__A);
74310d565efSmrg }
74410d565efSmrg 
74510d565efSmrg /* Accumulate across all unsigned 32-bit values in __A.  */
74610d565efSmrg static __inline __m64
_mm_acc_pu32(__m64 __A)74710d565efSmrg _mm_acc_pu32 (__m64 __A)
74810d565efSmrg {
74910d565efSmrg   return __builtin_arm_waccw ((__v2si)__A);
75010d565efSmrg }
75110d565efSmrg 
75210d565efSmrg static __inline __m64
_mm_mia_si64(__m64 __A,int __B,int __C)75310d565efSmrg _mm_mia_si64 (__m64 __A, int __B, int __C)
75410d565efSmrg {
75510d565efSmrg   return __builtin_arm_tmia (__A, __B, __C);
75610d565efSmrg }
75710d565efSmrg 
75810d565efSmrg static __inline __m64
_mm_miaph_si64(__m64 __A,int __B,int __C)75910d565efSmrg _mm_miaph_si64 (__m64 __A, int __B, int __C)
76010d565efSmrg {
76110d565efSmrg   return __builtin_arm_tmiaph (__A, __B, __C);
76210d565efSmrg }
76310d565efSmrg 
76410d565efSmrg static __inline __m64
_mm_miabb_si64(__m64 __A,int __B,int __C)76510d565efSmrg _mm_miabb_si64 (__m64 __A, int __B, int __C)
76610d565efSmrg {
76710d565efSmrg   return __builtin_arm_tmiabb (__A, __B, __C);
76810d565efSmrg }
76910d565efSmrg 
77010d565efSmrg static __inline __m64
_mm_miabt_si64(__m64 __A,int __B,int __C)77110d565efSmrg _mm_miabt_si64 (__m64 __A, int __B, int __C)
77210d565efSmrg {
77310d565efSmrg   return __builtin_arm_tmiabt (__A, __B, __C);
77410d565efSmrg }
77510d565efSmrg 
77610d565efSmrg static __inline __m64
_mm_miatb_si64(__m64 __A,int __B,int __C)77710d565efSmrg _mm_miatb_si64 (__m64 __A, int __B, int __C)
77810d565efSmrg {
77910d565efSmrg   return __builtin_arm_tmiatb (__A, __B, __C);
78010d565efSmrg }
78110d565efSmrg 
78210d565efSmrg static __inline __m64
_mm_miatt_si64(__m64 __A,int __B,int __C)78310d565efSmrg _mm_miatt_si64 (__m64 __A, int __B, int __C)
78410d565efSmrg {
78510d565efSmrg   return __builtin_arm_tmiatt (__A, __B, __C);
78610d565efSmrg }
78710d565efSmrg 
78810d565efSmrg /* Extract one of the elements of A and sign extend.  The selector N must
78910d565efSmrg    be immediate.  */
79010d565efSmrg #define _mm_extract_pi8(A, N) __builtin_arm_textrmsb ((__v8qi)(A), (N))
79110d565efSmrg #define _mm_extract_pi16(A, N) __builtin_arm_textrmsh ((__v4hi)(A), (N))
79210d565efSmrg #define _mm_extract_pi32(A, N) __builtin_arm_textrmsw ((__v2si)(A), (N))
79310d565efSmrg 
79410d565efSmrg /* Extract one of the elements of A and zero extend.  The selector N must
79510d565efSmrg    be immediate.  */
79610d565efSmrg #define _mm_extract_pu8(A, N) __builtin_arm_textrmub ((__v8qi)(A), (N))
79710d565efSmrg #define _mm_extract_pu16(A, N) __builtin_arm_textrmuh ((__v4hi)(A), (N))
79810d565efSmrg #define _mm_extract_pu32(A, N) __builtin_arm_textrmuw ((__v2si)(A), (N))
79910d565efSmrg 
80010d565efSmrg /* Inserts word D into one of the elements of A.  The selector N must be
80110d565efSmrg    immediate.  */
80210d565efSmrg #define _mm_insert_pi8(A, D, N) \
80310d565efSmrg   ((__m64) __builtin_arm_tinsrb ((__v8qi)(A), (D), (N)))
80410d565efSmrg #define _mm_insert_pi16(A, D, N) \
80510d565efSmrg   ((__m64) __builtin_arm_tinsrh ((__v4hi)(A), (D), (N)))
80610d565efSmrg #define _mm_insert_pi32(A, D, N) \
80710d565efSmrg   ((__m64) __builtin_arm_tinsrw ((__v2si)(A), (D), (N)))
80810d565efSmrg 
80910d565efSmrg /* Compute the element-wise maximum of signed 8-bit values.  */
81010d565efSmrg static __inline __m64
_mm_max_pi8(__m64 __A,__m64 __B)81110d565efSmrg _mm_max_pi8 (__m64 __A, __m64 __B)
81210d565efSmrg {
81310d565efSmrg   return (__m64) __builtin_arm_wmaxsb ((__v8qi)__A, (__v8qi)__B);
81410d565efSmrg }
81510d565efSmrg 
81610d565efSmrg /* Compute the element-wise maximum of signed 16-bit values.  */
81710d565efSmrg static __inline __m64
_mm_max_pi16(__m64 __A,__m64 __B)81810d565efSmrg _mm_max_pi16 (__m64 __A, __m64 __B)
81910d565efSmrg {
82010d565efSmrg   return (__m64) __builtin_arm_wmaxsh ((__v4hi)__A, (__v4hi)__B);
82110d565efSmrg }
82210d565efSmrg 
82310d565efSmrg /* Compute the element-wise maximum of signed 32-bit values.  */
82410d565efSmrg static __inline __m64
_mm_max_pi32(__m64 __A,__m64 __B)82510d565efSmrg _mm_max_pi32 (__m64 __A, __m64 __B)
82610d565efSmrg {
82710d565efSmrg   return (__m64) __builtin_arm_wmaxsw ((__v2si)__A, (__v2si)__B);
82810d565efSmrg }
82910d565efSmrg 
83010d565efSmrg /* Compute the element-wise maximum of unsigned 8-bit values.  */
83110d565efSmrg static __inline __m64
_mm_max_pu8(__m64 __A,__m64 __B)83210d565efSmrg _mm_max_pu8 (__m64 __A, __m64 __B)
83310d565efSmrg {
83410d565efSmrg   return (__m64) __builtin_arm_wmaxub ((__v8qi)__A, (__v8qi)__B);
83510d565efSmrg }
83610d565efSmrg 
83710d565efSmrg /* Compute the element-wise maximum of unsigned 16-bit values.  */
83810d565efSmrg static __inline __m64
_mm_max_pu16(__m64 __A,__m64 __B)83910d565efSmrg _mm_max_pu16 (__m64 __A, __m64 __B)
84010d565efSmrg {
84110d565efSmrg   return (__m64) __builtin_arm_wmaxuh ((__v4hi)__A, (__v4hi)__B);
84210d565efSmrg }
84310d565efSmrg 
84410d565efSmrg /* Compute the element-wise maximum of unsigned 32-bit values.  */
84510d565efSmrg static __inline __m64
_mm_max_pu32(__m64 __A,__m64 __B)84610d565efSmrg _mm_max_pu32 (__m64 __A, __m64 __B)
84710d565efSmrg {
84810d565efSmrg   return (__m64) __builtin_arm_wmaxuw ((__v2si)__A, (__v2si)__B);
84910d565efSmrg }
85010d565efSmrg 
85110d565efSmrg /* Compute the element-wise minimum of signed 16-bit values.  */
85210d565efSmrg static __inline __m64
_mm_min_pi8(__m64 __A,__m64 __B)85310d565efSmrg _mm_min_pi8 (__m64 __A, __m64 __B)
85410d565efSmrg {
85510d565efSmrg   return (__m64) __builtin_arm_wminsb ((__v8qi)__A, (__v8qi)__B);
85610d565efSmrg }
85710d565efSmrg 
85810d565efSmrg /* Compute the element-wise minimum of signed 16-bit values.  */
85910d565efSmrg static __inline __m64
_mm_min_pi16(__m64 __A,__m64 __B)86010d565efSmrg _mm_min_pi16 (__m64 __A, __m64 __B)
86110d565efSmrg {
86210d565efSmrg   return (__m64) __builtin_arm_wminsh ((__v4hi)__A, (__v4hi)__B);
86310d565efSmrg }
86410d565efSmrg 
86510d565efSmrg /* Compute the element-wise minimum of signed 32-bit values.  */
86610d565efSmrg static __inline __m64
_mm_min_pi32(__m64 __A,__m64 __B)86710d565efSmrg _mm_min_pi32 (__m64 __A, __m64 __B)
86810d565efSmrg {
86910d565efSmrg   return (__m64) __builtin_arm_wminsw ((__v2si)__A, (__v2si)__B);
87010d565efSmrg }
87110d565efSmrg 
87210d565efSmrg /* Compute the element-wise minimum of unsigned 16-bit values.  */
87310d565efSmrg static __inline __m64
_mm_min_pu8(__m64 __A,__m64 __B)87410d565efSmrg _mm_min_pu8 (__m64 __A, __m64 __B)
87510d565efSmrg {
87610d565efSmrg   return (__m64) __builtin_arm_wminub ((__v8qi)__A, (__v8qi)__B);
87710d565efSmrg }
87810d565efSmrg 
87910d565efSmrg /* Compute the element-wise minimum of unsigned 16-bit values.  */
88010d565efSmrg static __inline __m64
_mm_min_pu16(__m64 __A,__m64 __B)88110d565efSmrg _mm_min_pu16 (__m64 __A, __m64 __B)
88210d565efSmrg {
88310d565efSmrg   return (__m64) __builtin_arm_wminuh ((__v4hi)__A, (__v4hi)__B);
88410d565efSmrg }
88510d565efSmrg 
88610d565efSmrg /* Compute the element-wise minimum of unsigned 32-bit values.  */
88710d565efSmrg static __inline __m64
_mm_min_pu32(__m64 __A,__m64 __B)88810d565efSmrg _mm_min_pu32 (__m64 __A, __m64 __B)
88910d565efSmrg {
89010d565efSmrg   return (__m64) __builtin_arm_wminuw ((__v2si)__A, (__v2si)__B);
89110d565efSmrg }
89210d565efSmrg 
89310d565efSmrg /* Create an 8-bit mask of the signs of 8-bit values.  */
89410d565efSmrg static __inline int
_mm_movemask_pi8(__m64 __A)89510d565efSmrg _mm_movemask_pi8 (__m64 __A)
89610d565efSmrg {
89710d565efSmrg   return __builtin_arm_tmovmskb ((__v8qi)__A);
89810d565efSmrg }
89910d565efSmrg 
90010d565efSmrg /* Create an 8-bit mask of the signs of 16-bit values.  */
90110d565efSmrg static __inline int
_mm_movemask_pi16(__m64 __A)90210d565efSmrg _mm_movemask_pi16 (__m64 __A)
90310d565efSmrg {
90410d565efSmrg   return __builtin_arm_tmovmskh ((__v4hi)__A);
90510d565efSmrg }
90610d565efSmrg 
90710d565efSmrg /* Create an 8-bit mask of the signs of 32-bit values.  */
90810d565efSmrg static __inline int
_mm_movemask_pi32(__m64 __A)90910d565efSmrg _mm_movemask_pi32 (__m64 __A)
91010d565efSmrg {
91110d565efSmrg   return __builtin_arm_tmovmskw ((__v2si)__A);
91210d565efSmrg }
91310d565efSmrg 
91410d565efSmrg /* Return a combination of the four 16-bit values in A.  The selector
91510d565efSmrg    must be an immediate.  */
91610d565efSmrg #define _mm_shuffle_pi16(A, N) \
91710d565efSmrg   ((__m64) __builtin_arm_wshufh ((__v4hi)(A), (N)))
91810d565efSmrg 
91910d565efSmrg 
92010d565efSmrg /* Compute the rounded averages of the unsigned 8-bit values in A and B.  */
92110d565efSmrg static __inline __m64
_mm_avg_pu8(__m64 __A,__m64 __B)92210d565efSmrg _mm_avg_pu8 (__m64 __A, __m64 __B)
92310d565efSmrg {
92410d565efSmrg   return (__m64) __builtin_arm_wavg2br ((__v8qi)__A, (__v8qi)__B);
92510d565efSmrg }
92610d565efSmrg 
92710d565efSmrg /* Compute the rounded averages of the unsigned 16-bit values in A and B.  */
92810d565efSmrg static __inline __m64
_mm_avg_pu16(__m64 __A,__m64 __B)92910d565efSmrg _mm_avg_pu16 (__m64 __A, __m64 __B)
93010d565efSmrg {
93110d565efSmrg   return (__m64) __builtin_arm_wavg2hr ((__v4hi)__A, (__v4hi)__B);
93210d565efSmrg }
93310d565efSmrg 
93410d565efSmrg /* Compute the averages of the unsigned 8-bit values in A and B.  */
93510d565efSmrg static __inline __m64
_mm_avg2_pu8(__m64 __A,__m64 __B)93610d565efSmrg _mm_avg2_pu8 (__m64 __A, __m64 __B)
93710d565efSmrg {
93810d565efSmrg   return (__m64) __builtin_arm_wavg2b ((__v8qi)__A, (__v8qi)__B);
93910d565efSmrg }
94010d565efSmrg 
94110d565efSmrg /* Compute the averages of the unsigned 16-bit values in A and B.  */
94210d565efSmrg static __inline __m64
_mm_avg2_pu16(__m64 __A,__m64 __B)94310d565efSmrg _mm_avg2_pu16 (__m64 __A, __m64 __B)
94410d565efSmrg {
94510d565efSmrg   return (__m64) __builtin_arm_wavg2h ((__v4hi)__A, (__v4hi)__B);
94610d565efSmrg }
94710d565efSmrg 
94810d565efSmrg /* Compute the sum of the absolute differences of the unsigned 8-bit
94910d565efSmrg    values in A and B.  Return the value in the lower 16-bit word; the
95010d565efSmrg    upper words are cleared.  */
95110d565efSmrg static __inline __m64
_mm_sad_pu8(__m64 __A,__m64 __B)95210d565efSmrg _mm_sad_pu8 (__m64 __A, __m64 __B)
95310d565efSmrg {
95410d565efSmrg   return (__m64) __builtin_arm_wsadbz ((__v8qi)__A, (__v8qi)__B);
95510d565efSmrg }
95610d565efSmrg 
95710d565efSmrg static __inline __m64
_mm_sada_pu8(__m64 __A,__m64 __B,__m64 __C)95810d565efSmrg _mm_sada_pu8 (__m64 __A, __m64 __B, __m64 __C)
95910d565efSmrg {
96010d565efSmrg   return (__m64) __builtin_arm_wsadb ((__v2si)__A, (__v8qi)__B, (__v8qi)__C);
96110d565efSmrg }
96210d565efSmrg 
96310d565efSmrg /* Compute the sum of the absolute differences of the unsigned 16-bit
96410d565efSmrg    values in A and B.  Return the value in the lower 32-bit word; the
96510d565efSmrg    upper words are cleared.  */
96610d565efSmrg static __inline __m64
_mm_sad_pu16(__m64 __A,__m64 __B)96710d565efSmrg _mm_sad_pu16 (__m64 __A, __m64 __B)
96810d565efSmrg {
96910d565efSmrg   return (__m64) __builtin_arm_wsadhz ((__v4hi)__A, (__v4hi)__B);
97010d565efSmrg }
97110d565efSmrg 
97210d565efSmrg static __inline __m64
_mm_sada_pu16(__m64 __A,__m64 __B,__m64 __C)97310d565efSmrg _mm_sada_pu16 (__m64 __A, __m64 __B, __m64 __C)
97410d565efSmrg {
97510d565efSmrg   return (__m64) __builtin_arm_wsadh ((__v2si)__A, (__v4hi)__B, (__v4hi)__C);
97610d565efSmrg }
97710d565efSmrg 
97810d565efSmrg 
97910d565efSmrg /* Compute the sum of the absolute differences of the unsigned 8-bit
98010d565efSmrg    values in A and B.  Return the value in the lower 16-bit word; the
98110d565efSmrg    upper words are cleared.  */
98210d565efSmrg static __inline __m64
_mm_sadz_pu8(__m64 __A,__m64 __B)98310d565efSmrg _mm_sadz_pu8 (__m64 __A, __m64 __B)
98410d565efSmrg {
98510d565efSmrg   return (__m64) __builtin_arm_wsadbz ((__v8qi)__A, (__v8qi)__B);
98610d565efSmrg }
98710d565efSmrg 
98810d565efSmrg /* Compute the sum of the absolute differences of the unsigned 16-bit
98910d565efSmrg    values in A and B.  Return the value in the lower 32-bit word; the
99010d565efSmrg    upper words are cleared.  */
99110d565efSmrg static __inline __m64
_mm_sadz_pu16(__m64 __A,__m64 __B)99210d565efSmrg _mm_sadz_pu16 (__m64 __A, __m64 __B)
99310d565efSmrg {
99410d565efSmrg   return (__m64) __builtin_arm_wsadhz ((__v4hi)__A, (__v4hi)__B);
99510d565efSmrg }
99610d565efSmrg 
99710d565efSmrg #define _mm_align_si64(__A,__B, N) \
99810d565efSmrg   (__m64) __builtin_arm_walign ((__v8qi) (__A),(__v8qi) (__B), (N))
99910d565efSmrg 
100010d565efSmrg /* Creates a 64-bit zero.  */
100110d565efSmrg static __inline __m64
_mm_setzero_si64(void)100210d565efSmrg _mm_setzero_si64 (void)
100310d565efSmrg {
100410d565efSmrg   return __builtin_arm_wzero ();
100510d565efSmrg }
100610d565efSmrg 
100710d565efSmrg /* Set and Get arbitrary iWMMXt Control registers.
100810d565efSmrg    Note only registers 0-3 and 8-11 are currently defined,
100910d565efSmrg    the rest are reserved.  */
101010d565efSmrg 
101110d565efSmrg static __inline void
_mm_setwcx(const int __value,const int __regno)101210d565efSmrg _mm_setwcx (const int __value, const int __regno)
101310d565efSmrg {
101410d565efSmrg   switch (__regno)
101510d565efSmrg     {
101610d565efSmrg     case 0:
101710d565efSmrg       __asm __volatile ("tmcr wcid, %0" :: "r"(__value));
101810d565efSmrg       break;
101910d565efSmrg     case 1:
102010d565efSmrg       __asm __volatile ("tmcr wcon, %0" :: "r"(__value));
102110d565efSmrg       break;
102210d565efSmrg     case 2:
102310d565efSmrg       __asm __volatile ("tmcr wcssf, %0" :: "r"(__value));
102410d565efSmrg       break;
102510d565efSmrg     case 3:
102610d565efSmrg       __asm __volatile ("tmcr wcasf, %0" :: "r"(__value));
102710d565efSmrg       break;
102810d565efSmrg     case 8:
102910d565efSmrg       __builtin_arm_setwcgr0 (__value);
103010d565efSmrg       break;
103110d565efSmrg     case 9:
103210d565efSmrg       __builtin_arm_setwcgr1 (__value);
103310d565efSmrg       break;
103410d565efSmrg     case 10:
103510d565efSmrg       __builtin_arm_setwcgr2 (__value);
103610d565efSmrg       break;
103710d565efSmrg     case 11:
103810d565efSmrg       __builtin_arm_setwcgr3 (__value);
103910d565efSmrg       break;
104010d565efSmrg     default:
104110d565efSmrg       break;
104210d565efSmrg     }
104310d565efSmrg }
104410d565efSmrg 
104510d565efSmrg static __inline int
_mm_getwcx(const int __regno)104610d565efSmrg _mm_getwcx (const int __regno)
104710d565efSmrg {
104810d565efSmrg   int __value;
104910d565efSmrg   switch (__regno)
105010d565efSmrg     {
105110d565efSmrg     case 0:
105210d565efSmrg       __asm __volatile ("tmrc %0, wcid" : "=r"(__value));
105310d565efSmrg       break;
105410d565efSmrg     case 1:
105510d565efSmrg       __asm __volatile ("tmrc %0, wcon" : "=r"(__value));
105610d565efSmrg       break;
105710d565efSmrg     case 2:
105810d565efSmrg       __asm __volatile ("tmrc %0, wcssf" : "=r"(__value));
105910d565efSmrg       break;
106010d565efSmrg     case 3:
106110d565efSmrg       __asm __volatile ("tmrc %0, wcasf" : "=r"(__value));
106210d565efSmrg       break;
106310d565efSmrg     case 8:
106410d565efSmrg       return __builtin_arm_getwcgr0 ();
106510d565efSmrg     case 9:
106610d565efSmrg       return __builtin_arm_getwcgr1 ();
106710d565efSmrg     case 10:
106810d565efSmrg       return __builtin_arm_getwcgr2 ();
106910d565efSmrg     case 11:
107010d565efSmrg       return __builtin_arm_getwcgr3 ();
107110d565efSmrg     default:
107210d565efSmrg       break;
107310d565efSmrg     }
107410d565efSmrg   return __value;
107510d565efSmrg }
107610d565efSmrg 
107710d565efSmrg /* Creates a vector of two 32-bit values; I0 is least significant.  */
107810d565efSmrg static __inline __m64
_mm_set_pi32(int __i1,int __i0)107910d565efSmrg _mm_set_pi32 (int __i1, int __i0)
108010d565efSmrg {
108110d565efSmrg   union
108210d565efSmrg   {
108310d565efSmrg     __m64 __q;
108410d565efSmrg     struct
108510d565efSmrg     {
108610d565efSmrg       unsigned int __i0;
108710d565efSmrg       unsigned int __i1;
108810d565efSmrg     } __s;
108910d565efSmrg   } __u;
109010d565efSmrg 
109110d565efSmrg   __u.__s.__i0 = __i0;
109210d565efSmrg   __u.__s.__i1 = __i1;
109310d565efSmrg 
109410d565efSmrg   return __u.__q;
109510d565efSmrg }
109610d565efSmrg 
109710d565efSmrg /* Creates a vector of four 16-bit values; W0 is least significant.  */
109810d565efSmrg static __inline __m64
_mm_set_pi16(short __w3,short __w2,short __w1,short __w0)109910d565efSmrg _mm_set_pi16 (short __w3, short __w2, short __w1, short __w0)
110010d565efSmrg {
110110d565efSmrg   unsigned int __i1 = (unsigned short) __w3 << 16 | (unsigned short) __w2;
110210d565efSmrg   unsigned int __i0 = (unsigned short) __w1 << 16 | (unsigned short) __w0;
110310d565efSmrg 
110410d565efSmrg   return _mm_set_pi32 (__i1, __i0);
110510d565efSmrg }
110610d565efSmrg 
110710d565efSmrg /* Creates a vector of eight 8-bit values; B0 is least significant.  */
110810d565efSmrg static __inline __m64
_mm_set_pi8(char __b7,char __b6,char __b5,char __b4,char __b3,char __b2,char __b1,char __b0)110910d565efSmrg _mm_set_pi8 (char __b7, char __b6, char __b5, char __b4,
111010d565efSmrg 	     char __b3, char __b2, char __b1, char __b0)
111110d565efSmrg {
111210d565efSmrg   unsigned int __i1, __i0;
111310d565efSmrg 
111410d565efSmrg   __i1 = (unsigned char)__b7;
111510d565efSmrg   __i1 = __i1 << 8 | (unsigned char)__b6;
111610d565efSmrg   __i1 = __i1 << 8 | (unsigned char)__b5;
111710d565efSmrg   __i1 = __i1 << 8 | (unsigned char)__b4;
111810d565efSmrg 
111910d565efSmrg   __i0 = (unsigned char)__b3;
112010d565efSmrg   __i0 = __i0 << 8 | (unsigned char)__b2;
112110d565efSmrg   __i0 = __i0 << 8 | (unsigned char)__b1;
112210d565efSmrg   __i0 = __i0 << 8 | (unsigned char)__b0;
112310d565efSmrg 
112410d565efSmrg   return _mm_set_pi32 (__i1, __i0);
112510d565efSmrg }
112610d565efSmrg 
112710d565efSmrg /* Similar, but with the arguments in reverse order.  */
112810d565efSmrg static __inline __m64
_mm_setr_pi32(int __i0,int __i1)112910d565efSmrg _mm_setr_pi32 (int __i0, int __i1)
113010d565efSmrg {
113110d565efSmrg   return _mm_set_pi32 (__i1, __i0);
113210d565efSmrg }
113310d565efSmrg 
113410d565efSmrg static __inline __m64
_mm_setr_pi16(short __w0,short __w1,short __w2,short __w3)113510d565efSmrg _mm_setr_pi16 (short __w0, short __w1, short __w2, short __w3)
113610d565efSmrg {
113710d565efSmrg   return _mm_set_pi16 (__w3, __w2, __w1, __w0);
113810d565efSmrg }
113910d565efSmrg 
114010d565efSmrg static __inline __m64
_mm_setr_pi8(char __b0,char __b1,char __b2,char __b3,char __b4,char __b5,char __b6,char __b7)114110d565efSmrg _mm_setr_pi8 (char __b0, char __b1, char __b2, char __b3,
114210d565efSmrg 	      char __b4, char __b5, char __b6, char __b7)
114310d565efSmrg {
114410d565efSmrg   return _mm_set_pi8 (__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0);
114510d565efSmrg }
114610d565efSmrg 
114710d565efSmrg /* Creates a vector of two 32-bit values, both elements containing I.  */
114810d565efSmrg static __inline __m64
_mm_set1_pi32(int __i)114910d565efSmrg _mm_set1_pi32 (int __i)
115010d565efSmrg {
115110d565efSmrg   return _mm_set_pi32 (__i, __i);
115210d565efSmrg }
115310d565efSmrg 
115410d565efSmrg /* Creates a vector of four 16-bit values, all elements containing W.  */
115510d565efSmrg static __inline __m64
_mm_set1_pi16(short __w)115610d565efSmrg _mm_set1_pi16 (short __w)
115710d565efSmrg {
115810d565efSmrg   unsigned int __i = (unsigned short)__w << 16 | (unsigned short)__w;
115910d565efSmrg   return _mm_set1_pi32 (__i);
116010d565efSmrg }
116110d565efSmrg 
116210d565efSmrg /* Creates a vector of four 16-bit values, all elements containing B.  */
116310d565efSmrg static __inline __m64
_mm_set1_pi8(char __b)116410d565efSmrg _mm_set1_pi8 (char __b)
116510d565efSmrg {
116610d565efSmrg   unsigned int __w = (unsigned char)__b << 8 | (unsigned char)__b;
116710d565efSmrg   unsigned int __i = __w << 16 | __w;
116810d565efSmrg   return _mm_set1_pi32 (__i);
116910d565efSmrg }
117010d565efSmrg 
117110d565efSmrg #ifdef __IWMMXT2__
117210d565efSmrg static __inline __m64
_mm_abs_pi8(__m64 m1)117310d565efSmrg _mm_abs_pi8 (__m64 m1)
117410d565efSmrg {
117510d565efSmrg   return (__m64) __builtin_arm_wabsb ((__v8qi)m1);
117610d565efSmrg }
117710d565efSmrg 
117810d565efSmrg static __inline __m64
_mm_abs_pi16(__m64 m1)117910d565efSmrg _mm_abs_pi16 (__m64 m1)
118010d565efSmrg {
118110d565efSmrg   return (__m64) __builtin_arm_wabsh ((__v4hi)m1);
118210d565efSmrg 
118310d565efSmrg }
118410d565efSmrg 
118510d565efSmrg static __inline __m64
_mm_abs_pi32(__m64 m1)118610d565efSmrg _mm_abs_pi32 (__m64 m1)
118710d565efSmrg {
118810d565efSmrg   return (__m64) __builtin_arm_wabsw ((__v2si)m1);
118910d565efSmrg 
119010d565efSmrg }
119110d565efSmrg 
119210d565efSmrg static __inline __m64
_mm_addsubhx_pi16(__m64 a,__m64 b)119310d565efSmrg _mm_addsubhx_pi16 (__m64 a, __m64 b)
119410d565efSmrg {
119510d565efSmrg   return (__m64) __builtin_arm_waddsubhx ((__v4hi)a, (__v4hi)b);
119610d565efSmrg }
119710d565efSmrg 
119810d565efSmrg static __inline __m64
_mm_absdiff_pu8(__m64 a,__m64 b)119910d565efSmrg _mm_absdiff_pu8 (__m64 a, __m64 b)
120010d565efSmrg {
120110d565efSmrg   return (__m64) __builtin_arm_wabsdiffb ((__v8qi)a, (__v8qi)b);
120210d565efSmrg }
120310d565efSmrg 
120410d565efSmrg static __inline __m64
_mm_absdiff_pu16(__m64 a,__m64 b)120510d565efSmrg _mm_absdiff_pu16 (__m64 a, __m64 b)
120610d565efSmrg {
120710d565efSmrg   return (__m64) __builtin_arm_wabsdiffh ((__v4hi)a, (__v4hi)b);
120810d565efSmrg }
120910d565efSmrg 
121010d565efSmrg static __inline __m64
_mm_absdiff_pu32(__m64 a,__m64 b)121110d565efSmrg _mm_absdiff_pu32 (__m64 a, __m64 b)
121210d565efSmrg {
121310d565efSmrg   return (__m64) __builtin_arm_wabsdiffw ((__v2si)a, (__v2si)b);
121410d565efSmrg }
121510d565efSmrg 
121610d565efSmrg static __inline __m64
_mm_addc_pu16(__m64 a,__m64 b)121710d565efSmrg _mm_addc_pu16 (__m64 a, __m64 b)
121810d565efSmrg {
121910d565efSmrg   __m64 result;
122010d565efSmrg   __asm__ __volatile__ ("waddhc	%0, %1, %2" : "=y" (result) : "y" (a),  "y" (b));
122110d565efSmrg   return result;
122210d565efSmrg }
122310d565efSmrg 
122410d565efSmrg static __inline __m64
_mm_addc_pu32(__m64 a,__m64 b)122510d565efSmrg _mm_addc_pu32 (__m64 a, __m64 b)
122610d565efSmrg {
122710d565efSmrg   __m64 result;
122810d565efSmrg   __asm__ __volatile__ ("waddwc	%0, %1, %2" : "=y" (result) : "y" (a),  "y" (b));
122910d565efSmrg   return result;
123010d565efSmrg }
123110d565efSmrg 
123210d565efSmrg static __inline __m64
_mm_avg4_pu8(__m64 a,__m64 b)123310d565efSmrg _mm_avg4_pu8 (__m64 a, __m64 b)
123410d565efSmrg {
123510d565efSmrg   return (__m64) __builtin_arm_wavg4 ((__v8qi)a, (__v8qi)b);
123610d565efSmrg }
123710d565efSmrg 
123810d565efSmrg static __inline __m64
_mm_avg4r_pu8(__m64 a,__m64 b)123910d565efSmrg _mm_avg4r_pu8 (__m64 a, __m64 b)
124010d565efSmrg {
124110d565efSmrg   return (__m64) __builtin_arm_wavg4r ((__v8qi)a, (__v8qi)b);
124210d565efSmrg }
124310d565efSmrg 
124410d565efSmrg static __inline __m64
_mm_maddx_pi16(__m64 a,__m64 b)124510d565efSmrg _mm_maddx_pi16 (__m64 a, __m64 b)
124610d565efSmrg {
124710d565efSmrg   return (__m64) __builtin_arm_wmaddsx ((__v4hi)a, (__v4hi)b);
124810d565efSmrg }
124910d565efSmrg 
125010d565efSmrg static __inline __m64
_mm_maddx_pu16(__m64 a,__m64 b)125110d565efSmrg _mm_maddx_pu16 (__m64 a, __m64 b)
125210d565efSmrg {
125310d565efSmrg   return (__m64) __builtin_arm_wmaddux ((__v4hi)a, (__v4hi)b);
125410d565efSmrg }
125510d565efSmrg 
125610d565efSmrg static __inline __m64
_mm_msub_pi16(__m64 a,__m64 b)125710d565efSmrg _mm_msub_pi16 (__m64 a, __m64 b)
125810d565efSmrg {
125910d565efSmrg   return (__m64) __builtin_arm_wmaddsn ((__v4hi)a, (__v4hi)b);
126010d565efSmrg }
126110d565efSmrg 
126210d565efSmrg static __inline __m64
_mm_msub_pu16(__m64 a,__m64 b)126310d565efSmrg _mm_msub_pu16 (__m64 a, __m64 b)
126410d565efSmrg {
126510d565efSmrg   return (__m64) __builtin_arm_wmaddun ((__v4hi)a, (__v4hi)b);
126610d565efSmrg }
126710d565efSmrg 
126810d565efSmrg static __inline __m64
_mm_mulhi_pi32(__m64 a,__m64 b)126910d565efSmrg _mm_mulhi_pi32 (__m64 a, __m64 b)
127010d565efSmrg {
127110d565efSmrg   return (__m64) __builtin_arm_wmulwsm ((__v2si)a, (__v2si)b);
127210d565efSmrg }
127310d565efSmrg 
127410d565efSmrg static __inline __m64
_mm_mulhi_pu32(__m64 a,__m64 b)127510d565efSmrg _mm_mulhi_pu32 (__m64 a, __m64 b)
127610d565efSmrg {
127710d565efSmrg   return (__m64) __builtin_arm_wmulwum ((__v2si)a, (__v2si)b);
127810d565efSmrg }
127910d565efSmrg 
128010d565efSmrg static __inline __m64
_mm_mulhir_pi16(__m64 a,__m64 b)128110d565efSmrg _mm_mulhir_pi16 (__m64 a, __m64 b)
128210d565efSmrg {
128310d565efSmrg   return (__m64) __builtin_arm_wmulsmr ((__v4hi)a, (__v4hi)b);
128410d565efSmrg }
128510d565efSmrg 
128610d565efSmrg static __inline __m64
_mm_mulhir_pi32(__m64 a,__m64 b)128710d565efSmrg _mm_mulhir_pi32 (__m64 a, __m64 b)
128810d565efSmrg {
128910d565efSmrg   return (__m64) __builtin_arm_wmulwsmr ((__v2si)a, (__v2si)b);
129010d565efSmrg }
129110d565efSmrg 
129210d565efSmrg static __inline __m64
_mm_mulhir_pu16(__m64 a,__m64 b)129310d565efSmrg _mm_mulhir_pu16 (__m64 a, __m64 b)
129410d565efSmrg {
129510d565efSmrg   return (__m64) __builtin_arm_wmulumr ((__v4hi)a, (__v4hi)b);
129610d565efSmrg }
129710d565efSmrg 
129810d565efSmrg static __inline __m64
_mm_mulhir_pu32(__m64 a,__m64 b)129910d565efSmrg _mm_mulhir_pu32 (__m64 a, __m64 b)
130010d565efSmrg {
130110d565efSmrg   return (__m64) __builtin_arm_wmulwumr ((__v2si)a, (__v2si)b);
130210d565efSmrg }
130310d565efSmrg 
130410d565efSmrg static __inline __m64
_mm_mullo_pi32(__m64 a,__m64 b)130510d565efSmrg _mm_mullo_pi32 (__m64 a, __m64 b)
130610d565efSmrg {
130710d565efSmrg   return (__m64) __builtin_arm_wmulwl ((__v2si)a, (__v2si)b);
130810d565efSmrg }
130910d565efSmrg 
131010d565efSmrg static __inline __m64
_mm_qmulm_pi16(__m64 a,__m64 b)131110d565efSmrg _mm_qmulm_pi16 (__m64 a, __m64 b)
131210d565efSmrg {
131310d565efSmrg   return (__m64) __builtin_arm_wqmulm ((__v4hi)a, (__v4hi)b);
131410d565efSmrg }
131510d565efSmrg 
131610d565efSmrg static __inline __m64
_mm_qmulm_pi32(__m64 a,__m64 b)131710d565efSmrg _mm_qmulm_pi32 (__m64 a, __m64 b)
131810d565efSmrg {
131910d565efSmrg   return (__m64) __builtin_arm_wqmulwm ((__v2si)a, (__v2si)b);
132010d565efSmrg }
132110d565efSmrg 
132210d565efSmrg static __inline __m64
_mm_qmulmr_pi16(__m64 a,__m64 b)132310d565efSmrg _mm_qmulmr_pi16 (__m64 a, __m64 b)
132410d565efSmrg {
132510d565efSmrg   return (__m64) __builtin_arm_wqmulmr ((__v4hi)a, (__v4hi)b);
132610d565efSmrg }
132710d565efSmrg 
132810d565efSmrg static __inline __m64
_mm_qmulmr_pi32(__m64 a,__m64 b)132910d565efSmrg _mm_qmulmr_pi32 (__m64 a, __m64 b)
133010d565efSmrg {
133110d565efSmrg   return (__m64) __builtin_arm_wqmulwmr ((__v2si)a, (__v2si)b);
133210d565efSmrg }
133310d565efSmrg 
133410d565efSmrg static __inline __m64
_mm_subaddhx_pi16(__m64 a,__m64 b)133510d565efSmrg _mm_subaddhx_pi16 (__m64 a, __m64 b)
133610d565efSmrg {
133710d565efSmrg   return (__m64) __builtin_arm_wsubaddhx ((__v4hi)a, (__v4hi)b);
133810d565efSmrg }
133910d565efSmrg 
134010d565efSmrg static __inline __m64
_mm_addbhusl_pu8(__m64 a,__m64 b)134110d565efSmrg _mm_addbhusl_pu8 (__m64 a, __m64 b)
134210d565efSmrg {
134310d565efSmrg   return (__m64) __builtin_arm_waddbhusl ((__v4hi)a, (__v8qi)b);
134410d565efSmrg }
134510d565efSmrg 
134610d565efSmrg static __inline __m64
_mm_addbhusm_pu8(__m64 a,__m64 b)134710d565efSmrg _mm_addbhusm_pu8 (__m64 a, __m64 b)
134810d565efSmrg {
134910d565efSmrg   return (__m64) __builtin_arm_waddbhusm ((__v4hi)a, (__v8qi)b);
135010d565efSmrg }
135110d565efSmrg 
135210d565efSmrg #define _mm_qmiabb_pi32(acc, m1, m2) \
135310d565efSmrg   ({\
135410d565efSmrg    __m64 _acc = acc;\
135510d565efSmrg    __m64 _m1 = m1;\
135610d565efSmrg    __m64 _m2 = m2;\
135710d565efSmrg    _acc = (__m64) __builtin_arm_wqmiabb ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
135810d565efSmrg    _acc;\
135910d565efSmrg    })
136010d565efSmrg 
136110d565efSmrg #define _mm_qmiabbn_pi32(acc, m1, m2) \
136210d565efSmrg   ({\
136310d565efSmrg    __m64 _acc = acc;\
136410d565efSmrg    __m64 _m1 = m1;\
136510d565efSmrg    __m64 _m2 = m2;\
136610d565efSmrg    _acc = (__m64) __builtin_arm_wqmiabbn ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
136710d565efSmrg    _acc;\
136810d565efSmrg    })
136910d565efSmrg 
137010d565efSmrg #define _mm_qmiabt_pi32(acc, m1, m2) \
137110d565efSmrg   ({\
137210d565efSmrg    __m64 _acc = acc;\
137310d565efSmrg    __m64 _m1 = m1;\
137410d565efSmrg    __m64 _m2 = m2;\
137510d565efSmrg    _acc = (__m64) __builtin_arm_wqmiabt ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
137610d565efSmrg    _acc;\
137710d565efSmrg    })
137810d565efSmrg 
137910d565efSmrg #define _mm_qmiabtn_pi32(acc, m1, m2) \
138010d565efSmrg   ({\
138110d565efSmrg    __m64 _acc=acc;\
138210d565efSmrg    __m64 _m1=m1;\
138310d565efSmrg    __m64 _m2=m2;\
138410d565efSmrg    _acc = (__m64) __builtin_arm_wqmiabtn ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
138510d565efSmrg    _acc;\
138610d565efSmrg    })
138710d565efSmrg 
138810d565efSmrg #define _mm_qmiatb_pi32(acc, m1, m2) \
138910d565efSmrg   ({\
139010d565efSmrg    __m64 _acc = acc;\
139110d565efSmrg    __m64 _m1 = m1;\
139210d565efSmrg    __m64 _m2 = m2;\
139310d565efSmrg    _acc = (__m64) __builtin_arm_wqmiatb ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
139410d565efSmrg    _acc;\
139510d565efSmrg    })
139610d565efSmrg 
139710d565efSmrg #define _mm_qmiatbn_pi32(acc, m1, m2) \
139810d565efSmrg   ({\
139910d565efSmrg    __m64 _acc = acc;\
140010d565efSmrg    __m64 _m1 = m1;\
140110d565efSmrg    __m64 _m2 = m2;\
140210d565efSmrg    _acc = (__m64) __builtin_arm_wqmiatbn ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
140310d565efSmrg    _acc;\
140410d565efSmrg    })
140510d565efSmrg 
140610d565efSmrg #define _mm_qmiatt_pi32(acc, m1, m2) \
140710d565efSmrg   ({\
140810d565efSmrg    __m64 _acc = acc;\
140910d565efSmrg    __m64 _m1 = m1;\
141010d565efSmrg    __m64 _m2 = m2;\
141110d565efSmrg    _acc = (__m64) __builtin_arm_wqmiatt ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
141210d565efSmrg    _acc;\
141310d565efSmrg    })
141410d565efSmrg 
141510d565efSmrg #define _mm_qmiattn_pi32(acc, m1, m2) \
141610d565efSmrg   ({\
141710d565efSmrg    __m64 _acc = acc;\
141810d565efSmrg    __m64 _m1 = m1;\
141910d565efSmrg    __m64 _m2 = m2;\
142010d565efSmrg    _acc = (__m64) __builtin_arm_wqmiattn ((__v2si)_acc, (__v4hi)_m1, (__v4hi)_m2);\
142110d565efSmrg    _acc;\
142210d565efSmrg    })
142310d565efSmrg 
142410d565efSmrg #define _mm_wmiabb_si64(acc, m1, m2) \
142510d565efSmrg   ({\
142610d565efSmrg    __m64 _acc = acc;\
142710d565efSmrg    __m64 _m1 = m1;\
142810d565efSmrg    __m64 _m2 = m2;\
142910d565efSmrg    _acc = (__m64) __builtin_arm_wmiabb (_acc, (__v4hi)_m1, (__v4hi)_m2);\
143010d565efSmrg    _acc;\
143110d565efSmrg    })
143210d565efSmrg 
143310d565efSmrg #define _mm_wmiabbn_si64(acc, m1, m2) \
143410d565efSmrg   ({\
143510d565efSmrg    __m64 _acc = acc;\
143610d565efSmrg    __m64 _m1 = m1;\
143710d565efSmrg    __m64 _m2 = m2;\
143810d565efSmrg    _acc = (__m64) __builtin_arm_wmiabbn (_acc, (__v4hi)_m1, (__v4hi)_m2);\
143910d565efSmrg    _acc;\
144010d565efSmrg    })
144110d565efSmrg 
144210d565efSmrg #define _mm_wmiabt_si64(acc, m1, m2) \
144310d565efSmrg   ({\
144410d565efSmrg    __m64 _acc = acc;\
144510d565efSmrg    __m64 _m1 = m1;\
144610d565efSmrg    __m64 _m2 = m2;\
144710d565efSmrg    _acc = (__m64) __builtin_arm_wmiabt (_acc, (__v4hi)_m1, (__v4hi)_m2);\
144810d565efSmrg    _acc;\
144910d565efSmrg    })
145010d565efSmrg 
145110d565efSmrg #define _mm_wmiabtn_si64(acc, m1, m2) \
145210d565efSmrg   ({\
145310d565efSmrg    __m64 _acc = acc;\
145410d565efSmrg    __m64 _m1 = m1;\
145510d565efSmrg    __m64 _m2 = m2;\
145610d565efSmrg    _acc = (__m64) __builtin_arm_wmiabtn (_acc, (__v4hi)_m1, (__v4hi)_m2);\
145710d565efSmrg    _acc;\
145810d565efSmrg    })
145910d565efSmrg 
146010d565efSmrg #define _mm_wmiatb_si64(acc, m1, m2) \
146110d565efSmrg   ({\
146210d565efSmrg    __m64 _acc = acc;\
146310d565efSmrg    __m64 _m1 = m1;\
146410d565efSmrg    __m64 _m2 = m2;\
146510d565efSmrg    _acc = (__m64) __builtin_arm_wmiatb (_acc, (__v4hi)_m1, (__v4hi)_m2);\
146610d565efSmrg    _acc;\
146710d565efSmrg    })
146810d565efSmrg 
146910d565efSmrg #define _mm_wmiatbn_si64(acc, m1, m2) \
147010d565efSmrg   ({\
147110d565efSmrg    __m64 _acc = acc;\
147210d565efSmrg    __m64 _m1 = m1;\
147310d565efSmrg    __m64 _m2 = m2;\
147410d565efSmrg    _acc = (__m64) __builtin_arm_wmiatbn (_acc, (__v4hi)_m1, (__v4hi)_m2);\
147510d565efSmrg    _acc;\
147610d565efSmrg    })
147710d565efSmrg 
147810d565efSmrg #define _mm_wmiatt_si64(acc, m1, m2) \
147910d565efSmrg   ({\
148010d565efSmrg    __m64 _acc = acc;\
148110d565efSmrg    __m64 _m1 = m1;\
148210d565efSmrg    __m64 _m2 = m2;\
148310d565efSmrg    _acc = (__m64) __builtin_arm_wmiatt (_acc, (__v4hi)_m1, (__v4hi)_m2);\
148410d565efSmrg    _acc;\
148510d565efSmrg    })
148610d565efSmrg 
148710d565efSmrg #define _mm_wmiattn_si64(acc, m1, m2) \
148810d565efSmrg   ({\
148910d565efSmrg    __m64 _acc = acc;\
149010d565efSmrg    __m64 _m1 = m1;\
149110d565efSmrg    __m64 _m2 = m2;\
149210d565efSmrg    _acc = (__m64) __builtin_arm_wmiattn (_acc, (__v4hi)_m1, (__v4hi)_m2);\
149310d565efSmrg    _acc;\
149410d565efSmrg    })
149510d565efSmrg 
149610d565efSmrg #define _mm_wmiawbb_si64(acc, m1, m2) \
149710d565efSmrg   ({\
149810d565efSmrg    __m64 _acc = acc;\
149910d565efSmrg    __m64 _m1 = m1;\
150010d565efSmrg    __m64 _m2 = m2;\
150110d565efSmrg    _acc = (__m64) __builtin_arm_wmiawbb (_acc, (__v2si)_m1, (__v2si)_m2);\
150210d565efSmrg    _acc;\
150310d565efSmrg    })
150410d565efSmrg 
150510d565efSmrg #define _mm_wmiawbbn_si64(acc, m1, m2) \
150610d565efSmrg   ({\
150710d565efSmrg    __m64 _acc = acc;\
150810d565efSmrg    __m64 _m1 = m1;\
150910d565efSmrg    __m64 _m2 = m2;\
151010d565efSmrg    _acc = (__m64) __builtin_arm_wmiawbbn (_acc, (__v2si)_m1, (__v2si)_m2);\
151110d565efSmrg    _acc;\
151210d565efSmrg    })
151310d565efSmrg 
151410d565efSmrg #define _mm_wmiawbt_si64(acc, m1, m2) \
151510d565efSmrg   ({\
151610d565efSmrg    __m64 _acc = acc;\
151710d565efSmrg    __m64 _m1 = m1;\
151810d565efSmrg    __m64 _m2 = m2;\
151910d565efSmrg    _acc = (__m64) __builtin_arm_wmiawbt (_acc, (__v2si)_m1, (__v2si)_m2);\
152010d565efSmrg    _acc;\
152110d565efSmrg    })
152210d565efSmrg 
152310d565efSmrg #define _mm_wmiawbtn_si64(acc, m1, m2) \
152410d565efSmrg   ({\
152510d565efSmrg    __m64 _acc = acc;\
152610d565efSmrg    __m64 _m1 = m1;\
152710d565efSmrg    __m64 _m2 = m2;\
152810d565efSmrg    _acc = (__m64) __builtin_arm_wmiawbtn (_acc, (__v2si)_m1, (__v2si)_m2);\
152910d565efSmrg    _acc;\
153010d565efSmrg    })
153110d565efSmrg 
153210d565efSmrg #define _mm_wmiawtb_si64(acc, m1, m2) \
153310d565efSmrg   ({\
153410d565efSmrg    __m64 _acc = acc;\
153510d565efSmrg    __m64 _m1 = m1;\
153610d565efSmrg    __m64 _m2 = m2;\
153710d565efSmrg    _acc = (__m64) __builtin_arm_wmiawtb (_acc, (__v2si)_m1, (__v2si)_m2);\
153810d565efSmrg    _acc;\
153910d565efSmrg    })
154010d565efSmrg 
154110d565efSmrg #define _mm_wmiawtbn_si64(acc, m1, m2) \
154210d565efSmrg   ({\
154310d565efSmrg    __m64 _acc = acc;\
154410d565efSmrg    __m64 _m1 = m1;\
154510d565efSmrg    __m64 _m2 = m2;\
154610d565efSmrg    _acc = (__m64) __builtin_arm_wmiawtbn (_acc, (__v2si)_m1, (__v2si)_m2);\
154710d565efSmrg    _acc;\
154810d565efSmrg    })
154910d565efSmrg 
155010d565efSmrg #define _mm_wmiawtt_si64(acc, m1, m2) \
155110d565efSmrg   ({\
155210d565efSmrg    __m64 _acc = acc;\
155310d565efSmrg    __m64 _m1 = m1;\
155410d565efSmrg    __m64 _m2 = m2;\
155510d565efSmrg    _acc = (__m64) __builtin_arm_wmiawtt (_acc, (__v2si)_m1, (__v2si)_m2);\
155610d565efSmrg    _acc;\
155710d565efSmrg    })
155810d565efSmrg 
155910d565efSmrg #define _mm_wmiawttn_si64(acc, m1, m2) \
156010d565efSmrg   ({\
156110d565efSmrg    __m64 _acc = acc;\
156210d565efSmrg    __m64 _m1 = m1;\
156310d565efSmrg    __m64 _m2 = m2;\
156410d565efSmrg    _acc = (__m64) __builtin_arm_wmiawttn (_acc, (__v2si)_m1, (__v2si)_m2);\
156510d565efSmrg    _acc;\
156610d565efSmrg    })
156710d565efSmrg 
156810d565efSmrg /* The third arguments should be an immediate.  */
156910d565efSmrg #define _mm_merge_si64(a, b, n) \
157010d565efSmrg   ({\
157110d565efSmrg    __m64 result;\
157210d565efSmrg    result = (__m64) __builtin_arm_wmerge ((__m64) (a), (__m64) (b), (n));\
157310d565efSmrg    result;\
157410d565efSmrg    })
157510d565efSmrg #endif  /* __IWMMXT2__ */
157610d565efSmrg 
157710d565efSmrg static __inline __m64
_mm_alignr0_si64(__m64 a,__m64 b)157810d565efSmrg _mm_alignr0_si64 (__m64 a, __m64 b)
157910d565efSmrg {
158010d565efSmrg   return (__m64) __builtin_arm_walignr0 ((__v8qi) a, (__v8qi) b);
158110d565efSmrg }
158210d565efSmrg 
158310d565efSmrg static __inline __m64
_mm_alignr1_si64(__m64 a,__m64 b)158410d565efSmrg _mm_alignr1_si64 (__m64 a, __m64 b)
158510d565efSmrg {
158610d565efSmrg   return (__m64) __builtin_arm_walignr1 ((__v8qi) a, (__v8qi) b);
158710d565efSmrg }
158810d565efSmrg 
158910d565efSmrg static __inline __m64
_mm_alignr2_si64(__m64 a,__m64 b)159010d565efSmrg _mm_alignr2_si64 (__m64 a, __m64 b)
159110d565efSmrg {
159210d565efSmrg   return (__m64) __builtin_arm_walignr2 ((__v8qi) a, (__v8qi) b);
159310d565efSmrg }
159410d565efSmrg 
159510d565efSmrg static __inline __m64
_mm_alignr3_si64(__m64 a,__m64 b)159610d565efSmrg _mm_alignr3_si64 (__m64 a, __m64 b)
159710d565efSmrg {
159810d565efSmrg   return (__m64) __builtin_arm_walignr3 ((__v8qi) a, (__v8qi) b);
159910d565efSmrg }
160010d565efSmrg 
160110d565efSmrg static __inline void
_mm_tandcb()160210d565efSmrg _mm_tandcb ()
160310d565efSmrg {
160410d565efSmrg   __asm __volatile ("tandcb r15");
160510d565efSmrg }
160610d565efSmrg 
160710d565efSmrg static __inline void
_mm_tandch()160810d565efSmrg _mm_tandch ()
160910d565efSmrg {
161010d565efSmrg   __asm __volatile ("tandch r15");
161110d565efSmrg }
161210d565efSmrg 
161310d565efSmrg static __inline void
_mm_tandcw()161410d565efSmrg _mm_tandcw ()
161510d565efSmrg {
161610d565efSmrg   __asm __volatile ("tandcw r15");
161710d565efSmrg }
161810d565efSmrg 
161910d565efSmrg #define _mm_textrcb(n) \
162010d565efSmrg   ({\
162110d565efSmrg    __asm__ __volatile__ (\
162210d565efSmrg      "textrcb r15, %0" : : "i" (n));\
162310d565efSmrg    })
162410d565efSmrg 
162510d565efSmrg #define _mm_textrch(n) \
162610d565efSmrg   ({\
162710d565efSmrg    __asm__ __volatile__ (\
162810d565efSmrg      "textrch r15, %0" : : "i" (n));\
162910d565efSmrg    })
163010d565efSmrg 
163110d565efSmrg #define _mm_textrcw(n) \
163210d565efSmrg   ({\
163310d565efSmrg    __asm__ __volatile__ (\
163410d565efSmrg      "textrcw r15, %0" : : "i" (n));\
163510d565efSmrg    })
163610d565efSmrg 
163710d565efSmrg static __inline void
_mm_torcb()163810d565efSmrg _mm_torcb ()
163910d565efSmrg {
164010d565efSmrg   __asm __volatile ("torcb r15");
164110d565efSmrg }
164210d565efSmrg 
164310d565efSmrg static __inline void
_mm_torch()164410d565efSmrg _mm_torch ()
164510d565efSmrg {
164610d565efSmrg   __asm __volatile ("torch r15");
164710d565efSmrg }
164810d565efSmrg 
164910d565efSmrg static __inline void
_mm_torcw()165010d565efSmrg _mm_torcw ()
165110d565efSmrg {
165210d565efSmrg   __asm __volatile ("torcw r15");
165310d565efSmrg }
165410d565efSmrg 
165510d565efSmrg #ifdef __IWMMXT2__
165610d565efSmrg static __inline void
_mm_torvscb()165710d565efSmrg _mm_torvscb ()
165810d565efSmrg {
165910d565efSmrg   __asm __volatile ("torvscb r15");
166010d565efSmrg }
166110d565efSmrg 
166210d565efSmrg static __inline void
_mm_torvsch()166310d565efSmrg _mm_torvsch ()
166410d565efSmrg {
166510d565efSmrg   __asm __volatile ("torvsch r15");
166610d565efSmrg }
166710d565efSmrg 
166810d565efSmrg static __inline void
_mm_torvscw()166910d565efSmrg _mm_torvscw ()
167010d565efSmrg {
167110d565efSmrg   __asm __volatile ("torvscw r15");
167210d565efSmrg }
167310d565efSmrg #endif /* __IWMMXT2__ */
167410d565efSmrg 
167510d565efSmrg static __inline __m64
_mm_tbcst_pi8(int value)167610d565efSmrg _mm_tbcst_pi8 (int value)
167710d565efSmrg {
167810d565efSmrg   return (__m64) __builtin_arm_tbcstb ((signed char) value);
167910d565efSmrg }
168010d565efSmrg 
168110d565efSmrg static __inline __m64
_mm_tbcst_pi16(int value)168210d565efSmrg _mm_tbcst_pi16 (int value)
168310d565efSmrg {
168410d565efSmrg   return (__m64) __builtin_arm_tbcsth ((short) value);
168510d565efSmrg }
168610d565efSmrg 
168710d565efSmrg static __inline __m64
_mm_tbcst_pi32(int value)168810d565efSmrg _mm_tbcst_pi32 (int value)
168910d565efSmrg {
169010d565efSmrg   return (__m64) __builtin_arm_tbcstw (value);
169110d565efSmrg }
169210d565efSmrg 
169310d565efSmrg #define _m_empty _mm_empty
169410d565efSmrg #define _m_packsswb _mm_packs_pi16
169510d565efSmrg #define _m_packssdw _mm_packs_pi32
169610d565efSmrg #define _m_packuswb _mm_packs_pu16
169710d565efSmrg #define _m_packusdw _mm_packs_pu32
169810d565efSmrg #define _m_packssqd _mm_packs_pi64
169910d565efSmrg #define _m_packusqd _mm_packs_pu64
170010d565efSmrg #define _mm_packs_si64 _mm_packs_pi64
170110d565efSmrg #define _mm_packs_su64 _mm_packs_pu64
170210d565efSmrg #define _m_punpckhbw _mm_unpackhi_pi8
170310d565efSmrg #define _m_punpckhwd _mm_unpackhi_pi16
170410d565efSmrg #define _m_punpckhdq _mm_unpackhi_pi32
170510d565efSmrg #define _m_punpcklbw _mm_unpacklo_pi8
170610d565efSmrg #define _m_punpcklwd _mm_unpacklo_pi16
170710d565efSmrg #define _m_punpckldq _mm_unpacklo_pi32
170810d565efSmrg #define _m_punpckehsbw _mm_unpackeh_pi8
170910d565efSmrg #define _m_punpckehswd _mm_unpackeh_pi16
171010d565efSmrg #define _m_punpckehsdq _mm_unpackeh_pi32
171110d565efSmrg #define _m_punpckehubw _mm_unpackeh_pu8
171210d565efSmrg #define _m_punpckehuwd _mm_unpackeh_pu16
171310d565efSmrg #define _m_punpckehudq _mm_unpackeh_pu32
171410d565efSmrg #define _m_punpckelsbw _mm_unpackel_pi8
171510d565efSmrg #define _m_punpckelswd _mm_unpackel_pi16
171610d565efSmrg #define _m_punpckelsdq _mm_unpackel_pi32
171710d565efSmrg #define _m_punpckelubw _mm_unpackel_pu8
171810d565efSmrg #define _m_punpckeluwd _mm_unpackel_pu16
171910d565efSmrg #define _m_punpckeludq _mm_unpackel_pu32
172010d565efSmrg #define _m_paddb _mm_add_pi8
172110d565efSmrg #define _m_paddw _mm_add_pi16
172210d565efSmrg #define _m_paddd _mm_add_pi32
172310d565efSmrg #define _m_paddsb _mm_adds_pi8
172410d565efSmrg #define _m_paddsw _mm_adds_pi16
172510d565efSmrg #define _m_paddsd _mm_adds_pi32
172610d565efSmrg #define _m_paddusb _mm_adds_pu8
172710d565efSmrg #define _m_paddusw _mm_adds_pu16
172810d565efSmrg #define _m_paddusd _mm_adds_pu32
172910d565efSmrg #define _m_psubb _mm_sub_pi8
173010d565efSmrg #define _m_psubw _mm_sub_pi16
173110d565efSmrg #define _m_psubd _mm_sub_pi32
173210d565efSmrg #define _m_psubsb _mm_subs_pi8
173310d565efSmrg #define _m_psubsw _mm_subs_pi16
173410d565efSmrg #define _m_psubuw _mm_subs_pi32
173510d565efSmrg #define _m_psubusb _mm_subs_pu8
173610d565efSmrg #define _m_psubusw _mm_subs_pu16
173710d565efSmrg #define _m_psubusd _mm_subs_pu32
173810d565efSmrg #define _m_pmaddwd _mm_madd_pi16
173910d565efSmrg #define _m_pmadduwd _mm_madd_pu16
174010d565efSmrg #define _m_pmulhw _mm_mulhi_pi16
174110d565efSmrg #define _m_pmulhuw _mm_mulhi_pu16
174210d565efSmrg #define _m_pmullw _mm_mullo_pi16
174310d565efSmrg #define _m_pmacsw _mm_mac_pi16
174410d565efSmrg #define _m_pmacuw _mm_mac_pu16
174510d565efSmrg #define _m_pmacszw _mm_macz_pi16
174610d565efSmrg #define _m_pmacuzw _mm_macz_pu16
174710d565efSmrg #define _m_paccb _mm_acc_pu8
174810d565efSmrg #define _m_paccw _mm_acc_pu16
174910d565efSmrg #define _m_paccd _mm_acc_pu32
175010d565efSmrg #define _m_pmia _mm_mia_si64
175110d565efSmrg #define _m_pmiaph _mm_miaph_si64
175210d565efSmrg #define _m_pmiabb _mm_miabb_si64
175310d565efSmrg #define _m_pmiabt _mm_miabt_si64
175410d565efSmrg #define _m_pmiatb _mm_miatb_si64
175510d565efSmrg #define _m_pmiatt _mm_miatt_si64
175610d565efSmrg #define _m_psllw _mm_sll_pi16
175710d565efSmrg #define _m_psllwi _mm_slli_pi16
175810d565efSmrg #define _m_pslld _mm_sll_pi32
175910d565efSmrg #define _m_pslldi _mm_slli_pi32
176010d565efSmrg #define _m_psllq _mm_sll_si64
176110d565efSmrg #define _m_psllqi _mm_slli_si64
176210d565efSmrg #define _m_psraw _mm_sra_pi16
176310d565efSmrg #define _m_psrawi _mm_srai_pi16
176410d565efSmrg #define _m_psrad _mm_sra_pi32
176510d565efSmrg #define _m_psradi _mm_srai_pi32
176610d565efSmrg #define _m_psraq _mm_sra_si64
176710d565efSmrg #define _m_psraqi _mm_srai_si64
176810d565efSmrg #define _m_psrlw _mm_srl_pi16
176910d565efSmrg #define _m_psrlwi _mm_srli_pi16
177010d565efSmrg #define _m_psrld _mm_srl_pi32
177110d565efSmrg #define _m_psrldi _mm_srli_pi32
177210d565efSmrg #define _m_psrlq _mm_srl_si64
177310d565efSmrg #define _m_psrlqi _mm_srli_si64
177410d565efSmrg #define _m_prorw _mm_ror_pi16
177510d565efSmrg #define _m_prorwi _mm_rori_pi16
177610d565efSmrg #define _m_prord _mm_ror_pi32
177710d565efSmrg #define _m_prordi _mm_rori_pi32
177810d565efSmrg #define _m_prorq _mm_ror_si64
177910d565efSmrg #define _m_prorqi _mm_rori_si64
178010d565efSmrg #define _m_pand _mm_and_si64
178110d565efSmrg #define _m_pandn _mm_andnot_si64
178210d565efSmrg #define _m_por _mm_or_si64
178310d565efSmrg #define _m_pxor _mm_xor_si64
178410d565efSmrg #define _m_pcmpeqb _mm_cmpeq_pi8
178510d565efSmrg #define _m_pcmpeqw _mm_cmpeq_pi16
178610d565efSmrg #define _m_pcmpeqd _mm_cmpeq_pi32
178710d565efSmrg #define _m_pcmpgtb _mm_cmpgt_pi8
178810d565efSmrg #define _m_pcmpgtub _mm_cmpgt_pu8
178910d565efSmrg #define _m_pcmpgtw _mm_cmpgt_pi16
179010d565efSmrg #define _m_pcmpgtuw _mm_cmpgt_pu16
179110d565efSmrg #define _m_pcmpgtd _mm_cmpgt_pi32
179210d565efSmrg #define _m_pcmpgtud _mm_cmpgt_pu32
179310d565efSmrg #define _m_pextrb _mm_extract_pi8
179410d565efSmrg #define _m_pextrw _mm_extract_pi16
179510d565efSmrg #define _m_pextrd _mm_extract_pi32
179610d565efSmrg #define _m_pextrub _mm_extract_pu8
179710d565efSmrg #define _m_pextruw _mm_extract_pu16
179810d565efSmrg #define _m_pextrud _mm_extract_pu32
179910d565efSmrg #define _m_pinsrb _mm_insert_pi8
180010d565efSmrg #define _m_pinsrw _mm_insert_pi16
180110d565efSmrg #define _m_pinsrd _mm_insert_pi32
180210d565efSmrg #define _m_pmaxsb _mm_max_pi8
180310d565efSmrg #define _m_pmaxsw _mm_max_pi16
180410d565efSmrg #define _m_pmaxsd _mm_max_pi32
180510d565efSmrg #define _m_pmaxub _mm_max_pu8
180610d565efSmrg #define _m_pmaxuw _mm_max_pu16
180710d565efSmrg #define _m_pmaxud _mm_max_pu32
180810d565efSmrg #define _m_pminsb _mm_min_pi8
180910d565efSmrg #define _m_pminsw _mm_min_pi16
181010d565efSmrg #define _m_pminsd _mm_min_pi32
181110d565efSmrg #define _m_pminub _mm_min_pu8
181210d565efSmrg #define _m_pminuw _mm_min_pu16
181310d565efSmrg #define _m_pminud _mm_min_pu32
181410d565efSmrg #define _m_pmovmskb _mm_movemask_pi8
181510d565efSmrg #define _m_pmovmskw _mm_movemask_pi16
181610d565efSmrg #define _m_pmovmskd _mm_movemask_pi32
181710d565efSmrg #define _m_pshufw _mm_shuffle_pi16
181810d565efSmrg #define _m_pavgb _mm_avg_pu8
181910d565efSmrg #define _m_pavgw _mm_avg_pu16
182010d565efSmrg #define _m_pavg2b _mm_avg2_pu8
182110d565efSmrg #define _m_pavg2w _mm_avg2_pu16
182210d565efSmrg #define _m_psadbw _mm_sad_pu8
182310d565efSmrg #define _m_psadwd _mm_sad_pu16
182410d565efSmrg #define _m_psadzbw _mm_sadz_pu8
182510d565efSmrg #define _m_psadzwd _mm_sadz_pu16
182610d565efSmrg #define _m_paligniq _mm_align_si64
182710d565efSmrg #define _m_cvt_si2pi _mm_cvtsi64_m64
182810d565efSmrg #define _m_cvt_pi2si _mm_cvtm64_si64
182910d565efSmrg #define _m_from_int _mm_cvtsi32_si64
183010d565efSmrg #define _m_to_int _mm_cvtsi64_si32
183110d565efSmrg 
183210d565efSmrg #if defined __cplusplus
183310d565efSmrg }; /* End "C" */
183410d565efSmrg #endif /* __cplusplus */
183510d565efSmrg 
183610d565efSmrg #endif /* _MMINTRIN_H_INCLUDED */
1837