diff options
Diffstat (limited to 'source/row_gcc.cc')
-rw-r--r-- | source/row_gcc.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/source/row_gcc.cc b/source/row_gcc.cc index ad1c052e..4dc56a5f 100644 --- a/source/row_gcc.cc +++ b/source/row_gcc.cc @@ -5030,6 +5030,29 @@ void DetileRow_SSE2(const uint8_t* src, } #endif // HAS_DETILEROW_SSE2 +#ifdef HAS_DETILEROW_16_SSE2 +void DetileRow_16_SSE2(const uint16_t* src, + ptrdiff_t src_tile_stride, + uint16_t* dst, + int width) { + asm volatile( + "1: \n" + "movdqu (%0),%%xmm0 \n" + "movdqu 0x10(%0),%%xmm1 \n" + "lea (%0,%3,2),%0 \n" + "movdqu %%xmm0,(%1) \n" + "movdqu %%xmm1,0x10(%1) \n" + "lea 0x20(%1),%1 \n" + "sub $0x10,%2 \n" + "jg 1b \n" + : "+r"(src), // %0 + "+r"(dst), // %1 + "+r"(width) // %2 + : "r"(src_tile_stride) // %3 + : "cc", "memory", "xmm0", "xmm1"); +} +#endif // HAS_DETILEROW_SSE2 + #ifdef HAS_DETILETOYUY2_SSE2 // Read 16 Y, 8 UV, and write 8 YUYV. void DetileToYUY2_SSE2(const uint8_t* src_y, |