| Index: source/row_win.cc
|
| diff --git a/source/row_win.cc b/source/row_win.cc
|
| index a8c16c3c1ef3a4c0ed99814f9c3898636213e504..dc325fb97b585f1e59b63066ba5a9fd4b753d6de 100644
|
| --- a/source/row_win.cc
|
| +++ b/source/row_win.cc
|
| @@ -3532,6 +3532,33 @@ void ARGBCopyAlphaRow_AVX2(const uint8* src, uint8* dst, int width) {
|
| }
|
| #endif // HAS_ARGBCOPYALPHAROW_AVX2
|
|
|
| +#ifdef HAS_ARGBEXTRACTALPHAROW_SSE2
|
| +// width in pixels
|
| +__declspec(naked)
|
| +void ARGBExtractAlphaRow_SSE2(const uint8* src_argb, uint8* dst_a, int width) {
|
| + __asm {
|
| + mov eax, [esp + 4] // src_argb
|
| + mov edx, [esp + 8] // dst_a
|
| + mov ecx, [esp + 12] // width
|
| +
|
| + extractloop:
|
| + movdqu xmm0, [eax]
|
| + movdqu xmm1, [eax + 16]
|
| + lea eax, [eax + 32]
|
| + psrld xmm0, 24
|
| + psrld xmm1, 24
|
| + packssdw xmm0, xmm1
|
| + packuswb xmm0, xmm0
|
| + movq qword ptr [edx], xmm0
|
| + lea edx, [edx + 8]
|
| + sub ecx, 8
|
| + jg extractloop
|
| +
|
| + ret
|
| + }
|
| +}
|
| +#endif // HAS_ARGBEXTRACTALPHAROW_SSE2
|
| +
|
| #ifdef HAS_ARGBCOPYYTOALPHAROW_SSE2
|
| // width in pixels
|
| __declspec(naked)
|
|
|