[FFmpeg-devel] [PATCH 6/8] x86inc: reduce difference to x264 upstream

James Darnley jdarnley at obe.tv
Mon Nov 6 21:56:21 EET 2017


On 2017-10-31 04:30, Michael Niedermayer wrote:
> On Mon, Oct 30, 2017 at 02:08:33PM +0100, James Darnley wrote:
>> These changes were commited to x264 in b568a256 "Experimental nasm
>> support"
>> ---
>>  libavutil/x86/x86inc.asm | 16 ++++++++++++++--
>>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> breaks build:
> 
> libavcodec/x86/rv34dsp.asm:211: error: parser: instruction expected
> libavcodec/x86/rv34dsp.asm:211: error: label or instruction expected at start of line
> libavcodec/x86/rv34dsp.asm:213: error: parser: instruction expected
> libavcodec/x86/rv34dsp.asm:213: error: label or instruction expected at start of line
> make: *** [libavcodec/x86/rv34dsp.o] Error 1
> make: *** Waiting for unfinished jobs....
> 
> NASM version 2.10.09 compiled on Dec 29 2013

This is very weird.  I have reproduced it on 2.13.01 on my server but I
couldn't on my laptop.  After a `make distclean` I can.  I think that is
the bug with nasm not listing includes as dependencies so I wasn't
rebuilding those objects.

> libavcodec/x86/rv34dsp.asm:211: error: parser: instruction expected
> libavcodec/x86/rv34dsp.asm:173: ... from macro `RV34_IDCT_DC_ADD' defined here
> libavutil/x86/x86inc.asm:707: ... from macro `cglobal' defined here
> libavutil/x86/x86inc.asm:733: ... from macro `cglobal_internal' defined here
> libavcodec/x86/rv34dsp.asm:211: error: label or instruction expected at start of line
> libavcodec/x86/rv34dsp.asm:173: ... from macro `RV34_IDCT_DC_ADD' defined here
> libavutil/x86/x86inc.asm:707: ... from macro `cglobal' defined here
> libavutil/x86/x86inc.asm:733: ... from macro `cglobal_internal' defined here
> libavcodec/x86/rv34dsp.asm:213: error: parser: instruction expected
> libavcodec/x86/rv34dsp.asm:173: ... from macro `RV34_IDCT_DC_ADD' defined here
> libavutil/x86/x86inc.asm:707: ... from macro `cglobal' defined here
> libavutil/x86/x86inc.asm:733: ... from macro `cglobal_internal' defined here
> libavcodec/x86/rv34dsp.asm:213: error: label or instruction expected at start of line
> libavcodec/x86/rv34dsp.asm:173: ... from macro `RV34_IDCT_DC_ADD' defined here
> libavutil/x86/x86inc.asm:707: ... from macro `cglobal' defined here
> libavutil/x86/x86inc.asm:733: ... from macro `cglobal_internal' defined here

Line 733 is the align command to align the start of the function.  I
can't see why it fails here but not on any other function in that file
or any other file.

After some cutting and pasting there is something about the mmxext
function on line 159.  Cutting it out with the following diff, and
building it will succeed.

> diff --git a/libavcodec/x86/rv34dsp.asm b/libavcodec/x86/rv34dsp.asm
> index 692b4acfcd..3448f82e75 100644
> --- a/libavcodec/x86/rv34dsp.asm
> +++ b/libavcodec/x86/rv34dsp.asm
> @@ -156,17 +156,6 @@ cglobal rv34_idct_dc_add, 3, 3
>      packuswb     %2, %2
>      movd         %1, %2
>  %endmacro
> -INIT_MMX mmxext
> -cglobal rv34_idct_add, 3,3,0, d, s, b
> -    ROW_TRANSFORM       bq
> -    COL_TRANSFORM     [dq], mm0, [pw_col_coeffs+ 0], [pw_col_coeffs+ 8]
> -    mova               mm0, [pw_col_coeffs+ 0]
> -    COL_TRANSFORM  [dq+sq], mm4, mm0, [pw_col_coeffs+ 8]
> -    mova               mm4, [pw_col_coeffs+ 8]
> -    lea                 dq, [dq + 2*sq]
> -    COL_TRANSFORM     [dq], mm6, mm0, mm4
> -    COL_TRANSFORM  [dq+sq], mm7, mm0, mm4
> -    ret
> 
>  ; ff_rv34_idct_dc_add_sse4(uint8_t *dst, int stride, int dc);
>  %macro RV34_IDCT_DC_ADD 0

I honestly have no idea why that causes a problem for the following
function.  I thought it might be the lower-case ret rather than the
upper-case RET macro but changing it doesn't change the error.



More information about the ffmpeg-devel mailing list