changeset 8178:7180ba559f56 libavcodec

SH4: fix memzero_align8()
author mru
date Thu, 20 Nov 2008 09:21:52 +0000
parents 484c83d8e9a8
children 883feb4edb65
files sh4/dsputil_sh4.c
diffstat 1 files changed, 8 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/sh4/dsputil_sh4.c	Thu Nov 20 09:21:50 2008 +0000
+++ b/sh4/dsputil_sh4.c	Thu Nov 20 09:21:52 2008 +0000
@@ -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 @@
         " 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)