# HG changeset patch # User mru # Date 1227172912 0 # Node ID 7180ba559f560f0c7177b44fe27ae62e3501f5ab # Parent 484c83d8e9a8b5d7f62cd180d381f79c08eeb7b0 SH4: fix memzero_align8() diff -r 484c83d8e9a8 -r 7180ba559f56 sh4/dsputil_sh4.c --- 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)