From c260b59603ee4bef42e0f2c4e1c5ec9b76f5e99b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A5ns=20Rullg=C3=A5rd?= <mans@mansr.com>
Date: Thu, 20 Nov 2008 09:21:52 +0000
Subject: [PATCH] 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 a51f400ed48..c8d0eae9314 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)
-- 
GitLab