From c260b59603ee4bef42e0f2c4e1c5ec9b76f5e99b Mon Sep 17 00:00:00 2001 From: Måns Rullgård Date: Thu, 20 Nov 2008 09:21:52 +0000 Subject: SH4: fix memzero_align8() Originally committed as revision 15888 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/sh4/dsputil_sh4.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libavcodec/sh4/dsputil_sh4.c b/libavcodec/sh4/dsputil_sh4.c index a51f400ed4..c8d0eae931 100644 --- a/libavcodec/sh4/dsputil_sh4.c +++ b/libavcodec/sh4/dsputil_sh4.c @@ -22,13 +22,15 @@ #include "libavcodec/avcodec.h" #include "libavcodec/dsputil.h" +#include "sh4.h" static void memzero_align8(void *dst,size_t size) { - __asm__( -#if defined(__SH4__) - " fschg\n" //single float mode -#endif + int fpscr; + fp_single_enter(fpscr); + dst = (char *)dst + size; + size /= 32; + __asm__ volatile ( " fldi0 fr0\n" " fldi0 fr1\n" " fschg\n" // double @@ -39,10 +41,9 @@ static void memzero_align8(void *dst,size_t size) " fmov dr0,@-%0\n" " bf.s 1b\n" " fmov dr0,@-%0\n" -#if defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) " fschg" //back to single -#endif - : : "r"((char*)dst+size),"r"(size/32): "memory" ); + : "+r"(dst),"+r"(size) :: "memory" ); + fp_single_leave(fpscr); } static void clear_blocks_sh4(DCTELEM *blocks) -- cgit v1.2.3