On 11/6/2017 4:56 PM, James Darnley wrote: > 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.
Try compiling with make libavcodec/x86/rv34dsp.dbg.asm DBG=1 make libavcodec/x86/rv34dsp.dbg.o DBG=1 To bypass all the macro obfuscation and get errors pointing to the exact problematic line in the preprocessed .dbg.asm file _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel