changeset 8187:cf5183ff0417 libavcodec

SH4: fix IDCT
author mru
date Thu, 20 Nov 2008 22:57:57 +0000
parents ed46f99f2002
children ef38b923ca2c
files sh4/idct_sh4.c
diffstat 1 files changed, 12 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/sh4/idct_sh4.c	Thu Nov 20 22:53:18 2008 +0000
+++ b/sh4/idct_sh4.c	Thu Nov 20 22:57:57 2008 +0000
@@ -21,6 +21,8 @@
  */
 
 #include "libavcodec/dsputil.h"
+#include "sh4.h"
+
 #define c1      1.38703984532214752434  /* sqrt(2)*cos(1*pi/16) */
 #define c2      1.30656296487637657577  /* sqrt(2)*cos(2*pi/16) */
 #define c3      1.17587560241935884520  /* sqrt(2)*cos(3*pi/16) */
@@ -51,9 +53,11 @@
 #undef  c6
 #undef  c7
 
-#if defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
+#if 1
 
 #define         load_matrix(table) \
+    do { \
+        const float *t = table; \
         __asm__ volatile( \
         "       fschg\n" \
         "       fmov   @%0+,xd0\n" \
@@ -65,15 +69,13 @@
         "       fmov   @%0+,xd12\n" \
         "       fmov   @%0+,xd14\n" \
         "       fschg\n" \
-        :\
-        : "r"(table)\
-        : "0" \
-        )
+        : "+r"(t) \
+        ); \
+    } while (0)
 
 #define         ftrv() \
                 __asm__ volatile("ftrv xmtrx,fv0" \
-                : "=f"(fr0),"=f"(fr1),"=f"(fr2),"=f"(fr3) \
-                :  "0"(fr0), "1"(fr1), "2"(fr2), "3"(fr3) );
+                : "+f"(fr0),"+f"(fr1),"+f"(fr2),"+f"(fr3));
 
 #define         DEFREG        \
         register float fr0 __asm__("fr0"); \
@@ -136,10 +138,9 @@
         int i;
         float        tblock[8*8],*fblock;
         int ofs1,ofs2,ofs3;
+        int fpscr;
 
-#if defined(__SH4__)
-        __asm__ ("fschg");
-#endif
+        fp_single_enter(fpscr);
 
         /* row */
 
@@ -248,9 +249,7 @@
                 block++;
         } while(--i);
 
-#if defined(__SH4__)
-        __asm__ ("fschg");
-#endif
+        fp_single_leave(fpscr);
 }
 #else
 void idct_sh4(DCTELEM *block)