Andreas Rheinhardt: > We currently mostly do not empty the MMX state in our MMX > DSP functions; instead we only do so before code that might > be using x87 code. This is a violation of the System V i386 ABI > (and maybe of other ABIs, too): > "The CPU shall be in x87 mode upon entry to a function. Therefore, > every function that uses the MMX registers is required to issue an > emms or femms instruction after using MMX registers, before returning > or calling another function." (See 2.2.1 in [1]) > This patch does not intend to change all these functions to abide > by the ABI; it only does so for ff_pixelutils_sad_8x8_mmxext, as this > function can by called by external users, because it is exported > via the pixelutils API. Without this, the following fragment will > assert (on x86/x64): > uint8_t src1[8 * 8], src2[8 * 8]; > av_pixelutils_sad_fn fn = av_pixelutils_get_sad_fn(3, 3, 0, NULL); > fn(src1, 8, src2, 8); > av_assert0_fpu(); > > [1]: > https://raw.githubusercontent.com/wiki/hjl-tools/x86-psABI/intel386-psABI-1.1.pdf > > Signed-off-by: Andreas Rheinhardt <[email protected]> > --- > libavutil/x86/pixelutils.asm | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/libavutil/x86/pixelutils.asm b/libavutil/x86/pixelutils.asm > index fbe9b45971..0bcccb51f5 100644 > --- a/libavutil/x86/pixelutils.asm > +++ b/libavutil/x86/pixelutils.asm > @@ -43,6 +43,7 @@ cglobal pixelutils_sad_8x8, 4,4,0, src1, stride1, src2, > stride2 > lea src2q, [src2q + 2*stride2q] > %endrep > movd eax, m2 > + emms > RET > > > ;-------------------------------------------------------------------------------
Will apply this patchset tomorrow unless there are objections. - Andreas _______________________________________________ ffmpeg-devel mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
