diff options
author | Paul A. Clarke <pc@us.ibm.com> | 2021-02-22 19:13:28 -0600 |
---|---|---|
committer | Paul A. Clarke <pc@us.ibm.com> | 2021-08-03 13:58:31 -0500 |
commit | eaa93a0f3d9f67c8cbc1dc849ea6feba432ff412 (patch) | |
tree | 13ea52f65a812b7ac7de505f425942a0d7d8b882 | |
parent | a77a46d9aeb0166b4b1ee4b52e1cbb4b52c6736f (diff) | |
download | gcc-eaa93a0f3d9f67c8cbc1dc849ea6feba432ff412.zip gcc-eaa93a0f3d9f67c8cbc1dc849ea6feba432ff412.tar.gz gcc-eaa93a0f3d9f67c8cbc1dc849ea6feba432ff412.tar.bz2 |
rs6000: Add support for _mm_minpos_epu16
Add a naive implementation of the subject x86 intrinsic to
ease porting.
2021-08-03 Paul A. Clarke <pc@us.ibm.com>
gcc
* config/rs6000/smmintrin.h (_mm_minpos_epu16): New.
-rw-r--r-- | gcc/config/rs6000/smmintrin.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/config/rs6000/smmintrin.h b/gcc/config/rs6000/smmintrin.h index 0145b92..3767a67 100644 --- a/gcc/config/rs6000/smmintrin.h +++ b/gcc/config/rs6000/smmintrin.h @@ -296,4 +296,31 @@ _mm_floor_ss (__m128 __A, __m128 __B) return __r; } +/* Return horizontal packed word minimum and its index in bits [15:0] + and bits [18:16] respectively. */ +__inline __m128i +__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +_mm_minpos_epu16 (__m128i __A) +{ + union __u + { + __m128i __m; + __v8hu __uh; + }; + union __u __u = { .__m = __A }, __r = { .__m = {0} }; + unsigned short __ridx = 0; + unsigned short __rmin = __u.__uh[__ridx]; + for (unsigned long __i = 1; __i < 8; __i++) + { + if (__u.__uh[__i] < __rmin) + { + __rmin = __u.__uh[__i]; + __ridx = __i; + } + } + __r.__uh[0] = __rmin; + __r.__uh[1] = __ridx; + return __r.__m; +} + #endif |