From 3090bec802840f658c5dc06fe8e5bd0a620b8628 Mon Sep 17 00:00:00 2001 From: Juergen Keil Date: Mon, 2 Jul 2001 11:44:39 +0000 Subject: Must re-initialize FPU registers after MMX use. Without such a re- initialization, the next piece of code that attempts to do FP calculations crashes with SIGFPE (fpu register stack overflow?) CVS patchset: 241 CVS date: 2001/07/02 11:44:39 --- src/video_out/yuv2rgb_mmx.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src') diff --git a/src/video_out/yuv2rgb_mmx.c b/src/video_out/yuv2rgb_mmx.c index 2a164528c..7cbebf8c1 100644 --- a/src/video_out/yuv2rgb_mmx.c +++ b/src/video_out/yuv2rgb_mmx.c @@ -776,48 +776,56 @@ static void mmxext_rgb15 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb15 (this, image, py, pu, pv, CPU_MMXEXT); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmxext_rgb16 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb16 (this, image, py, pu, pv, CPU_MMXEXT); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmxext_rgb24 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb24 (this, image, py, pu, pv, CPU_MMXEXT); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmxext_argb32 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_argb32 (this, image, py, pu, pv, CPU_MMXEXT); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmx_rgb15 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb15 (this, image, py, pu, pv, CPU_MMX); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmx_rgb16 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb16 (this, image, py, pu, pv, CPU_MMX); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmx_rgb24 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_rgb24 (this, image, py, pu, pv, CPU_MMX); + emms(); /* re-initialize x86 FPU after MMX use */ } static void mmx_argb32 (yuv2rgb_t *this, uint8_t * image, uint8_t * py, uint8_t * pu, uint8_t * pv) { yuv420_argb32 (this, image, py, pu, pv, CPU_MMX); + emms(); /* re-initialize x86 FPU after MMX use */ } void yuv2rgb_init_mmxext (yuv2rgb_t *this, int mode) -- cgit v1.2.3