Mercurial > libavcodec.hg
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); |