@@ -107,11 +107,22 @@ namespace xsimd
107107
108108 // rotate_left
109109 template <size_t N, class A >
110- XSIMD_INLINE batch<uint16_t , A> rotate_left (batch<uint16_t , A> const & self, requires_arch<ssse3>) noexcept
110+ XSIMD_INLINE batch<uint8_t , A> rotate_left (batch<uint8_t , A> const & self, requires_arch<ssse3>) noexcept
111111 {
112112 return _mm_alignr_epi8 (self, self, N);
113113 }
114114 template <size_t N, class A >
115+ XSIMD_INLINE batch<int8_t , A> rotate_left (batch<int8_t , A> const & self, requires_arch<ssse3>) noexcept
116+ {
117+ return bitwise_cast<int8_t >(rotate_left<N, A>(bitwise_cast<uint8_t >(self), ssse3 {}));
118+ }
119+
120+ template <size_t N, class A >
121+ XSIMD_INLINE batch<uint16_t , A> rotate_left (batch<uint16_t , A> const & self, requires_arch<ssse3>) noexcept
122+ {
123+ return _mm_alignr_epi8 (self, self, 2 * N);
124+ }
125+ template <size_t N, class A >
115126 XSIMD_INLINE batch<int16_t , A> rotate_left (batch<int16_t , A> const & self, requires_arch<ssse3>) noexcept
116127 {
117128 return bitwise_cast<int16_t >(rotate_left<N, A>(bitwise_cast<uint16_t >(self), ssse3 {}));
0 commit comments