-static inline void
-rgba8_copy_16_aligned_src(void *dst, const void *src)
-{
- _mm_storeu_si128((__m128i *)(dst),
- _mm_shuffle_epi8(_mm_load_si128((__m128i *)(src)),
- *(__m128i *)rgba8_permutation));
-}
-
-#elif defined(__SSE2__)
-static inline void
-rgba8_copy_16_aligned_dst(void *dst, const void *src)
-{
- __m128i srcreg, dstreg, agmask, ag, rb, br;
-
- agmask = _mm_set1_epi32(0xFF00FF00);
- srcreg = _mm_loadu_si128((__m128i *)src);
-
- rb = _mm_andnot_si128(agmask, srcreg);
- ag = _mm_and_si128(agmask, srcreg);
- br = _mm_shufflehi_epi16(_mm_shufflelo_epi16(rb, _MM_SHUFFLE(2, 3, 0, 1)),
- _MM_SHUFFLE(2, 3, 0, 1));
- dstreg = _mm_or_si128(ag, br);
-
- _mm_store_si128((__m128i *)dst, dstreg);
-}
-
-static inline void
-rgba8_copy_16_aligned_src(void *dst, const void *src)
-{
- __m128i srcreg, dstreg, agmask, ag, rb, br;
-
- agmask = _mm_set1_epi32(0xFF00FF00);
- srcreg = _mm_load_si128((__m128i *)src);
-
- rb = _mm_andnot_si128(agmask, srcreg);
- ag = _mm_and_si128(agmask, srcreg);
- br = _mm_shufflehi_epi16(_mm_shufflelo_epi16(rb, _MM_SHUFFLE(2, 3, 0, 1)),
- _MM_SHUFFLE(2, 3, 0, 1));
- dstreg = _mm_or_si128(ag, br);
-
- _mm_storeu_si128((__m128i *)dst, dstreg);
-}