[FFmpeg-devel] [PATCH 2/3] swscale/x86/output: add AVX2 version of yuv2nv12cX

Michael Niedermayer michael at niedermayer.cc
Fri Apr 24 19:06:22 EEST 2020


On Thu, Apr 23, 2020 at 08:13:18PM -0700, Nelson Gomez wrote:
> From: Nelson Gomez <nelson.gomez at microsoft.com>
> 
> 256 bits is just wide enough to fit all the operands needed to vectorize
> the software implementation, but AVX2 is needed to for some instructions
> like 16-to-32 bit vector sign extension.
> 
> Output is bit-for-bit identical to C.
> 
> Signed-off-by: Nelson Gomez <nelson.gomez at microsoft.com>
> ---
>  libswscale/x86/output.asm | 140 +++++++++++++++++++++++++++++++++++++-
>  libswscale/x86/swscale.c  |  24 +++++++
>  2 files changed, 163 insertions(+), 1 deletion(-)

Fails to build on x86_32

X86ASM	libswscale/x86/output.o
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:497: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:498: ... from macro `yuv2nv12cX_avx2_fn' defined here
src//libavutil/x86/x86inc.asm:1381: ... from macro `movd' defined here
src//libavutil/x86/x86inc.asm:1249: ... from macro `RUN_AVX_INSTR' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:517: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:518: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:551: ... from macro `yuv2nv12cX_avx2_fn' defined here
src//libavutil/x86/x86inc.asm:1125: ... from macro `add' defined here
src/libswscale/x86/output.asm:562: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:554: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:474: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:497: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:498: ... from macro `yuv2nv12cX_avx2_fn' defined here
src//libavutil/x86/x86inc.asm:1381: ... from macro `movd' defined here
src//libavutil/x86/x86inc.asm:1249: ... from macro `RUN_AVX_INSTR' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:517: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:518: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:551: ... from macro `yuv2nv12cX_avx2_fn' defined here
src//libavutil/x86/x86inc.asm:1125: ... from macro `add' defined here
src/libswscale/x86/output.asm:563: error: invalid operands in non-64-bit mode
src/libswscale/x86/output.asm:554: ... from macro `yuv2nv12cX_avx2_fn' defined here
src/ffbuild/common.mak:81: recipe for target 'libswscale/x86/output.o' failed
make: *** [libswscale/x86/output.o] Error 1

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Republics decline into democracies and democracies degenerate into
despotisms. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200424/7e63206a/attachment.sig>


More information about the ffmpeg-devel mailing list