comparison sh4/dsputil_sh4.c @ 8178:7180ba559f56 libavcodec

SH4: fix memzero_align8()
author mru
date Thu, 20 Nov 2008 09:21:52 +0000
parents 894404f1c2f0
children cf4d575b1982
comparison
equal deleted inserted replaced
8177:484c83d8e9a8 8178:7180ba559f56
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */ 21 */
22 22
23 #include "libavcodec/avcodec.h" 23 #include "libavcodec/avcodec.h"
24 #include "libavcodec/dsputil.h" 24 #include "libavcodec/dsputil.h"
25 #include "sh4.h"
25 26
26 static void memzero_align8(void *dst,size_t size) 27 static void memzero_align8(void *dst,size_t size)
27 { 28 {
28 __asm__( 29 int fpscr;
29 #if defined(__SH4__) 30 fp_single_enter(fpscr);
30 " fschg\n" //single float mode 31 dst = (char *)dst + size;
31 #endif 32 size /= 32;
33 __asm__ volatile (
32 " fldi0 fr0\n" 34 " fldi0 fr0\n"
33 " fldi0 fr1\n" 35 " fldi0 fr1\n"
34 " fschg\n" // double 36 " fschg\n" // double
35 "1: \n" \ 37 "1: \n" \
36 " dt %1\n" 38 " dt %1\n"
37 " fmov dr0,@-%0\n" 39 " fmov dr0,@-%0\n"
38 " fmov dr0,@-%0\n" 40 " fmov dr0,@-%0\n"
39 " fmov dr0,@-%0\n" 41 " fmov dr0,@-%0\n"
40 " bf.s 1b\n" 42 " bf.s 1b\n"
41 " fmov dr0,@-%0\n" 43 " fmov dr0,@-%0\n"
42 #if defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
43 " fschg" //back to single 44 " fschg" //back to single
44 #endif 45 : "+r"(dst),"+r"(size) :: "memory" );
45 : : "r"((char*)dst+size),"r"(size/32): "memory" ); 46 fp_single_leave(fpscr);
46 } 47 }
47 48
48 static void clear_blocks_sh4(DCTELEM *blocks) 49 static void clear_blocks_sh4(DCTELEM *blocks)
49 { 50 {
50 memzero_align8(blocks,sizeof(DCTELEM)*6*64); 51 memzero_align8(blocks,sizeof(DCTELEM)*6*64);