Also do some small cosmetic changes: Drop pointless _MMX suffix from ABSD2 macro name, drop pointless check for MMX support, we always assume MMX is available in our SIMD code, fix spelling.tags/n4.0
| @@ -66,7 +66,7 @@ SCALARPRODUCT | |||||
| ; %1 = number of xmm registers used | ; %1 = number of xmm registers used | ||||
| ; %2 = number of inline load/process/store loops per asm loop | ; %2 = number of inline load/process/store loops per asm loop | ||||
| ; %3 = process 4*mmsize (%3=0) or 8*mmsize (%3=1) bytes per loop | ; %3 = process 4*mmsize (%3=0) or 8*mmsize (%3=1) bytes per loop | ||||
| ; %4 = CLIPD function takes min/max as float instead of int (CLIPD_SSE2) | |||||
| ; %4 = CLIPD function takes min/max as float instead of int (SSE2 version) | |||||
| ; %5 = suffix | ; %5 = suffix | ||||
| %macro VECTOR_CLIP_INT32 4-5 | %macro VECTOR_CLIP_INT32 4-5 | ||||
| cglobal vector_clip_int32%5, 5,5,%1, dst, src, min, max, len | cglobal vector_clip_int32%5, 5,5,%1, dst, src, min, max, len | ||||
| @@ -122,14 +122,11 @@ cglobal vector_clip_int32%5, 5,5,%1, dst, src, min, max, len | |||||
| %endmacro | %endmacro | ||||
| INIT_MMX mmx | INIT_MMX mmx | ||||
| %define CLIPD CLIPD_MMX | |||||
| VECTOR_CLIP_INT32 0, 1, 0, 0 | VECTOR_CLIP_INT32 0, 1, 0, 0 | ||||
| INIT_XMM sse2 | INIT_XMM sse2 | ||||
| VECTOR_CLIP_INT32 6, 1, 0, 0, _int | VECTOR_CLIP_INT32 6, 1, 0, 0, _int | ||||
| %define CLIPD CLIPD_SSE2 | |||||
| VECTOR_CLIP_INT32 6, 2, 0, 1 | VECTOR_CLIP_INT32 6, 2, 0, 1 | ||||
| INIT_XMM sse4 | INIT_XMM sse4 | ||||
| %define CLIPD CLIPD_SSE41 | |||||
| %ifdef m8 | %ifdef m8 | ||||
| VECTOR_CLIP_INT32 11, 1, 1, 0 | VECTOR_CLIP_INT32 11, 1, 1, 0 | ||||
| %else | %else | ||||
| @@ -174,13 +174,13 @@ | |||||
| %endif | %endif | ||||
| %endmacro | %endmacro | ||||
| %macro PSIGNW_MMX 2 | |||||
| %macro PSIGNW 2 | |||||
| %if cpuflag(ssse3) | |||||
| psignw %1, %2 | |||||
| %else | |||||
| pxor %1, %2 | pxor %1, %2 | ||||
| psubw %1, %2 | psubw %1, %2 | ||||
| %endmacro | |||||
| %macro PSIGNW_SSSE3 2 | |||||
| psignw %1, %2 | |||||
| %endif | |||||
| %endmacro | %endmacro | ||||
| %macro ABS1 2 | %macro ABS1 2 | ||||
| @@ -221,7 +221,7 @@ | |||||
| %endif | %endif | ||||
| %endmacro | %endmacro | ||||
| %macro ABSB 2 ; source mmreg, temp mmreg (unused for ssse3) | |||||
| %macro ABSB 2 ; source mmreg, temp mmreg (unused for SSSE3) | |||||
| %if cpuflag(ssse3) | %if cpuflag(ssse3) | ||||
| pabsb %1, %1 | pabsb %1, %1 | ||||
| %else | %else | ||||
| @@ -245,7 +245,7 @@ | |||||
| %endif | %endif | ||||
| %endmacro | %endmacro | ||||
| %macro ABSD2_MMX 4 | |||||
| %macro ABSD2 4 | |||||
| pxor %3, %3 | pxor %3, %3 | ||||
| pxor %4, %4 | pxor %4, %4 | ||||
| pcmpgtd %3, %1 | pcmpgtd %3, %1 | ||||
| @@ -290,7 +290,7 @@ | |||||
| %else | %else | ||||
| palignr %1, %2, %3 | palignr %1, %2, %3 | ||||
| %endif | %endif | ||||
| %elif cpuflag(mmx) ; [dst,] src1, src2, imm, tmp | |||||
| %else ; [dst,] src1, src2, imm, tmp | |||||
| %define %%dst %1 | %define %%dst %1 | ||||
| %if %0==5 | %if %0==5 | ||||
| %ifnidn %1, %2 | %ifnidn %1, %2 | ||||
| @@ -606,37 +606,47 @@ | |||||
| pminsw %1, %3 | pminsw %1, %3 | ||||
| %endmacro | %endmacro | ||||
| %macro PMINSD_MMX 3 ; dst, src, tmp | |||||
| %macro PMINSD 3 ; dst, src, tmp/unused | |||||
| %if cpuflag(sse4) | |||||
| pminsd %1, %2 | |||||
| %elif cpuflag(sse2) | |||||
| cvtdq2ps %1, %1 | |||||
| minps %1, %2 | |||||
| cvtps2dq %1, %1 | |||||
| %else | |||||
| mova %3, %2 | mova %3, %2 | ||||
| pcmpgtd %3, %1 | pcmpgtd %3, %1 | ||||
| pxor %1, %2 | pxor %1, %2 | ||||
| pand %1, %3 | pand %1, %3 | ||||
| pxor %1, %2 | pxor %1, %2 | ||||
| %endif | |||||
| %endmacro | %endmacro | ||||
| %macro PMAXSD_MMX 3 ; dst, src, tmp | |||||
| %macro PMAXSD 3 ; dst, src, tmp/unused | |||||
| %if cpuflag(sse4) | |||||
| pmaxsd %1, %2 | |||||
| %else | |||||
| mova %3, %1 | mova %3, %1 | ||||
| pcmpgtd %3, %2 | pcmpgtd %3, %2 | ||||
| pand %1, %3 | pand %1, %3 | ||||
| pandn %3, %2 | pandn %3, %2 | ||||
| por %1, %3 | por %1, %3 | ||||
| %endif | |||||
| %endmacro | %endmacro | ||||
| %macro CLIPD_MMX 3-4 ; src/dst, min, max, tmp | |||||
| PMINSD_MMX %1, %3, %4 | |||||
| PMAXSD_MMX %1, %2, %4 | |||||
| %endmacro | |||||
| %macro CLIPD_SSE2 3-4 ; src/dst, min (float), max (float), unused | |||||
| %macro CLIPD 3-4 | |||||
| %if cpuflag(sse4); src/dst, min, max, unused | |||||
| pminsd %1, %3 | |||||
| pmaxsd %1, %2 | |||||
| %elif cpuflag(sse2) ; src/dst, min (float), max (float), unused | |||||
| cvtdq2ps %1, %1 | cvtdq2ps %1, %1 | ||||
| minps %1, %3 | minps %1, %3 | ||||
| maxps %1, %2 | maxps %1, %2 | ||||
| cvtps2dq %1, %1 | cvtps2dq %1, %1 | ||||
| %endmacro | |||||
| %macro CLIPD_SSE41 3-4 ; src/dst, min, max, unused | |||||
| pminsd %1, %3 | |||||
| pmaxsd %1, %2 | |||||
| %else ; src/dst, min, max, tmp | |||||
| PMINSD %1, %3, %4 | |||||
| PMAXSD %1, %2, %4 | |||||
| %endif | |||||
| %endmacro | %endmacro | ||||
| %macro VBROADCASTSS 2 ; dst xmm/ymm, src m32 | %macro VBROADCASTSS 2 ; dst xmm/ymm, src m32 | ||||
| @@ -364,15 +364,7 @@ cglobal hscale%1to%2_%4, %5, 10, %6, pos0, dst, w, srcmem, filter, fltpos, fltsi | |||||
| movd [dstq+wq*2], m0 | movd [dstq+wq*2], m0 | ||||
| %endif ; %3 ==/!= X | %endif ; %3 ==/!= X | ||||
| %else ; %2 == 19 | %else ; %2 == 19 | ||||
| %if mmsize == 8 | |||||
| PMINSD_MMX m0, m2, m4 | |||||
| %elif cpuflag(sse4) | |||||
| pminsd m0, m2 | |||||
| %else ; sse2/ssse3 | |||||
| cvtdq2ps m0, m0 | |||||
| minps m0, m2 | |||||
| cvtps2dq m0, m0 | |||||
| %endif ; mmx/sse2/ssse3/sse4 | |||||
| PMINSD m0, m2, m4 | |||||
| %ifnidn %3, X | %ifnidn %3, X | ||||
| mova [dstq+wq*(4>>wshr)], m0 | mova [dstq+wq*(4>>wshr)], m0 | ||||
| %else ; %3 == X | %else ; %3 == X | ||||