[FFmpeg-cvslog] Remove all SH4 architecture optimizations

Diego Biurrun git at videolan.org
Thu Mar 13 22:14:50 CET 2014


ffmpeg | branch: master | Diego Biurrun <diego at biurrun.de> | Tue Jan  7 10:29:11 2014 +0100| [d6096a67422534918405abb46dafbbac4608cbc3] | committer: Diego Biurrun

Remove all SH4 architecture optimizations

SH4 has been end-of-lifed and no more test machines are available.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d6096a67422534918405abb46dafbbac4608cbc3
---

 libavcodec/avcodec.h         |    2 +
 libavcodec/dsputil.c         |    2 -
 libavcodec/dsputil.h         |    1 -
 libavcodec/options_table.h   |    2 +
 libavcodec/sh4/Makefile      |    2 -
 libavcodec/sh4/dsputil_sh4.c |  107 ---------------------
 libavcodec/sh4/dsputil_sh4.h |   27 ------
 libavcodec/sh4/idct_sh4.c    |  210 ------------------------------------------
 libavcodec/sh4/sh4.h         |   44 ---------
 libavcodec/version.h         |    3 +
 10 files changed, 7 insertions(+), 393 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 244f47b..438db5c 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -2460,7 +2460,9 @@ typedef struct AVCodecContext {
 #define FF_IDCT_SIMPLEMMX     3
 #define FF_IDCT_ARM           7
 #define FF_IDCT_ALTIVEC       8
+#if FF_API_ARCH_SH4
 #define FF_IDCT_SH4           9
+#endif
 #define FF_IDCT_SIMPLEARM     10
 #define FF_IDCT_IPP           13
 #define FF_IDCT_XVIDMMX       14
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 56207e8..91aac32 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -2653,8 +2653,6 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx)
         ff_dsputil_init_bfin(c, avctx);
     if (ARCH_PPC)
         ff_dsputil_init_ppc(c, avctx);
-    if (ARCH_SH4)
-        ff_dsputil_init_sh4(c, avctx);
     if (HAVE_VIS)
         ff_dsputil_init_vis(c, avctx);
     if (ARCH_X86)
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index 7bd92e5..64e75a0 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -300,7 +300,6 @@ void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type);
 void ff_dsputil_init_arm(DSPContext* c, AVCodecContext *avctx);
 void ff_dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx);
 void ff_dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx);
-void ff_dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
 void ff_dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
 void ff_dsputil_init_x86(DSPContext* c, AVCodecContext *avctx);
 
diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
index 8b3a4b6..1006a86 100644
--- a/libavcodec/options_table.h
+++ b/libavcodec/options_table.h
@@ -189,7 +189,9 @@ static const AVOption avcodec_options[] = {
 {"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"arm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
+#if FF_API_ARCH_SH4
 {"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"},
+#endif
 {"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
diff --git a/libavcodec/sh4/Makefile b/libavcodec/sh4/Makefile
deleted file mode 100644
index 01a573b..0000000
--- a/libavcodec/sh4/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-OBJS += sh4/dsputil_sh4.o                                               \
-        sh4/idct_sh4.o                                                  \
diff --git a/libavcodec/sh4/dsputil_sh4.c b/libavcodec/sh4/dsputil_sh4.c
deleted file mode 100644
index 6fd287d..0000000
--- a/libavcodec/sh4/dsputil_sh4.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *  sh4 dsputil
- *
- * Copyright (c) 2003 BERO <bero at geocities.co.jp>
- *
- * This file is part of Libav.
- *
- * Libav is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * Libav is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "libavutil/attributes.h"
-#include "libavcodec/avcodec.h"
-#include "libavcodec/dsputil.h"
-#include "dsputil_sh4.h"
-#include "sh4.h"
-
-static void memzero_align8(void *dst,size_t size)
-{
-        int fpscr;
-        fp_single_enter(fpscr);
-        dst = (char *)dst + size;
-        size /= 32;
-        __asm__ volatile (
-        " fldi0 fr0\n"
-        " fldi0 fr1\n"
-        " fschg\n"  // double
-        "1: \n" \
-        " dt %1\n"
-        " fmov  dr0, at -%0\n"
-        " fmov  dr0, at -%0\n"
-        " fmov  dr0, at -%0\n"
-        " bf.s 1b\n"
-        " fmov  dr0, at -%0\n"
-        " fschg" //back to single
-        : "+r"(dst),"+r"(size) :: "memory" );
-        fp_single_leave(fpscr);
-}
-
-static void clear_blocks_sh4(int16_t *blocks)
-{
-        memzero_align8(blocks,sizeof(int16_t)*6*64);
-}
-
-static void idct_put(uint8_t *dest, int line_size, int16_t *block)
-{
-        int i;
-        const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-        ff_idct_sh4(block);
-        for(i=0;i<8;i++) {
-                dest[0] = cm[block[0]];
-                dest[1] = cm[block[1]];
-                dest[2] = cm[block[2]];
-                dest[3] = cm[block[3]];
-                dest[4] = cm[block[4]];
-                dest[5] = cm[block[5]];
-                dest[6] = cm[block[6]];
-                dest[7] = cm[block[7]];
-                dest+=line_size;
-                block+=8;
-        }
-}
-static void idct_add(uint8_t *dest, int line_size, int16_t *block)
-{
-        int i;
-        const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-        ff_idct_sh4(block);
-        for(i=0;i<8;i++) {
-                dest[0] = cm[dest[0]+block[0]];
-                dest[1] = cm[dest[1]+block[1]];
-                dest[2] = cm[dest[2]+block[2]];
-                dest[3] = cm[dest[3]+block[3]];
-                dest[4] = cm[dest[4]+block[4]];
-                dest[5] = cm[dest[5]+block[5]];
-                dest[6] = cm[dest[6]+block[6]];
-                dest[7] = cm[dest[7]+block[7]];
-                dest+=line_size;
-                block+=8;
-        }
-}
-
-av_cold void ff_dsputil_init_sh4(DSPContext *c, AVCodecContext *avctx)
-{
-        const int idct_algo= avctx->idct_algo;
-        const int high_bit_depth = avctx->bits_per_raw_sample > 8;
-
-        if (!high_bit_depth)
-        c->clear_blocks = clear_blocks_sh4;
-        if (avctx->bits_per_raw_sample <= 8 &&
-            (idct_algo==FF_IDCT_AUTO || idct_algo==FF_IDCT_SH4)) {
-                c->idct_put = idct_put;
-                c->idct_add = idct_add;
-                c->idct     = ff_idct_sh4;
-                c->idct_permutation_type= FF_NO_IDCT_PERM;
-        }
-}
diff --git a/libavcodec/sh4/dsputil_sh4.h b/libavcodec/sh4/dsputil_sh4.h
deleted file mode 100644
index 9c2b311..0000000
--- a/libavcodec/sh4/dsputil_sh4.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * Libav is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_SH4_DSPUTIL_SH4_H
-#define AVCODEC_SH4_DSPUTIL_SH4_H
-
-#include "libavcodec/avcodec.h"
-#include "libavcodec/dsputil.h"
-
-void ff_idct_sh4(int16_t *block);
-
-#endif /* AVCODEC_SH4_DSPUTIL_SH4_H */
diff --git a/libavcodec/sh4/idct_sh4.c b/libavcodec/sh4/idct_sh4.c
deleted file mode 100644
index 768b334..0000000
--- a/libavcodec/sh4/idct_sh4.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * idct for sh4
- *
- * Copyright (c) 2001-2003 BERO <bero at geocities.co.jp>
- *
- * This file is part of Libav.
- *
- * Libav is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * Libav is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "dsputil_sh4.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) */
-#define c4      1.00000000000000000000  /* sqrt(2)*cos(4*pi/16) */
-#define c5      0.78569495838710234903  /* sqrt(2)*cos(5*pi/16) */
-#define c6      0.54119610014619712324  /* sqrt(2)*cos(6*pi/16) */
-#define c7      0.27589937928294311353  /* sqrt(2)*cos(7*pi/16) */
-
-static const float even_table[] __attribute__ ((aligned(8))) = {
-        c4, c4, c4, c4,
-        c2, c6,-c6,-c2,
-        c4,-c4,-c4, c4,
-        c6,-c2, c2,-c6
-};
-
-static const float odd_table[] __attribute__ ((aligned(8))) = {
-        c1, c3, c5, c7,
-        c3,-c7,-c1,-c5,
-        c5,-c1, c7, c3,
-        c7,-c5, c3,-c1
-};
-
-#undef  c1
-#undef  c2
-#undef  c3
-#undef  c4
-#undef  c5
-#undef  c6
-#undef  c7
-
-#define         load_matrix(table) \
-    do { \
-        const float *t = table; \
-        __asm__ volatile( \
-        "       fschg\n" \
-        "       fmov   @%0+,xd0\n" \
-        "       fmov   @%0+,xd2\n" \
-        "       fmov   @%0+,xd4\n" \
-        "       fmov   @%0+,xd6\n" \
-        "       fmov   @%0+,xd8\n" \
-        "       fmov   @%0+,xd10\n" \
-        "       fmov   @%0+,xd12\n" \
-        "       fmov   @%0+,xd14\n" \
-        "       fschg\n" \
-        : "+r"(t) \
-        ); \
-    } while (0)
-
-#define         ftrv() \
-                __asm__ volatile("ftrv xmtrx,fv0" \
-                : "+f"(fr0),"+f"(fr1),"+f"(fr2),"+f"(fr3));
-
-#define         DEFREG        \
-        register float fr0 __asm__("fr0"); \
-        register float fr1 __asm__("fr1"); \
-        register float fr2 __asm__("fr2"); \
-        register float fr3 __asm__("fr3")
-
-#define         DESCALE(x,n)    (x)*(1.0f/(1<<(n)))
-
-/* this code work worse on gcc cvs. 3.2.3 work fine */
-
-
-//optimized
-
-void ff_idct_sh4(int16_t *block)
-{
-        DEFREG;
-
-        int i;
-        float        tblock[8*8],*fblock;
-        int ofs1,ofs2,ofs3;
-        int fpscr;
-
-        fp_single_enter(fpscr);
-
-        /* row */
-
-        /* even part */
-        load_matrix(even_table);
-
-        fblock = tblock+4;
-        i = 8;
-        do {
-                fr0 = block[0];
-                fr1 = block[2];
-                fr2 = block[4];
-                fr3 = block[6];
-                block+=8;
-                ftrv();
-                *--fblock = fr3;
-                *--fblock = fr2;
-                *--fblock = fr1;
-                *--fblock = fr0;
-                fblock+=8+4;
-        } while(--i);
-        block-=8*8;
-        fblock-=8*8+4;
-
-        load_matrix(odd_table);
-
-        i = 8;
-
-        do {
-                float t0,t1,t2,t3;
-                fr0 = block[1];
-                fr1 = block[3];
-                fr2 = block[5];
-                fr3 = block[7];
-                block+=8;
-                ftrv();
-                t0 = *fblock++;
-                t1 = *fblock++;
-                t2 = *fblock++;
-                t3 = *fblock++;
-                fblock+=4;
-                *--fblock = t0 - fr0;
-                *--fblock = t1 - fr1;
-                *--fblock = t2 - fr2;
-                *--fblock = t3 - fr3;
-                *--fblock = t3 + fr3;
-                *--fblock = t2 + fr2;
-                *--fblock = t1 + fr1;
-                *--fblock = t0 + fr0;
-                fblock+=8;
-        } while(--i);
-        block-=8*8;
-        fblock-=8*8;
-
-        /* col */
-
-        /* even part */
-        load_matrix(even_table);
-
-        ofs1 = sizeof(float)*2*8;
-        ofs2 = sizeof(float)*4*8;
-        ofs3 = sizeof(float)*6*8;
-
-        i = 8;
-
-#define        OA(fblock,ofs)   *(float*)((char*)fblock + ofs)
-
-        do {
-                fr0 = OA(fblock,   0);
-                fr1 = OA(fblock,ofs1);
-                fr2 = OA(fblock,ofs2);
-                fr3 = OA(fblock,ofs3);
-                ftrv();
-                OA(fblock,0   ) = fr0;
-                OA(fblock,ofs1) = fr1;
-                OA(fblock,ofs2) = fr2;
-                OA(fblock,ofs3) = fr3;
-                fblock++;
-        } while(--i);
-        fblock-=8;
-
-        load_matrix(odd_table);
-
-        i=8;
-        do {
-                float t0,t1,t2,t3;
-                t0 = OA(fblock,   0); /* [8*0] */
-                t1 = OA(fblock,ofs1); /* [8*2] */
-                t2 = OA(fblock,ofs2); /* [8*4] */
-                t3 = OA(fblock,ofs3); /* [8*6] */
-                fblock+=8;
-                fr0 = OA(fblock,   0); /* [8*1] */
-                fr1 = OA(fblock,ofs1); /* [8*3] */
-                fr2 = OA(fblock,ofs2); /* [8*5] */
-                fr3 = OA(fblock,ofs3); /* [8*7] */
-                fblock+=-8+1;
-                ftrv();
-                block[8*0] = DESCALE(t0 + fr0,3);
-                block[8*7] = DESCALE(t0 - fr0,3);
-                block[8*1] = DESCALE(t1 + fr1,3);
-                block[8*6] = DESCALE(t1 - fr1,3);
-                block[8*2] = DESCALE(t2 + fr2,3);
-                block[8*5] = DESCALE(t2 - fr2,3);
-                block[8*3] = DESCALE(t3 + fr3,3);
-                block[8*4] = DESCALE(t3 - fr3,3);
-                block++;
-        } while(--i);
-
-        fp_single_leave(fpscr);
-}
diff --git a/libavcodec/sh4/sh4.h b/libavcodec/sh4/sh4.h
deleted file mode 100644
index acd12e6..0000000
--- a/libavcodec/sh4/sh4.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.com>
- *
- * This file is part of Libav.
- *
- * Libav is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * Libav is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_SH4_SH4_H
-#define AVCODEC_SH4_SH4_H
-
-#ifdef __SH4__
-#   define fp_single_enter(fpscr)                               \
-    do {                                                        \
-        __asm__ volatile ("sts   fpscr, %0     \n\t"            \
-                          "and   %1,    %0     \n\t"            \
-                          "lds   %0,    fpscr  \n\t"            \
-                          : "=&r"(fpscr) : "r"(~(1<<19)));      \
-    } while (0)
-
-#   define fp_single_leave(fpscr)                       \
-    do {                                                \
-        __asm__ volatile ("or    %1,    %0     \n\t"    \
-                          "lds   %0,    fpscr  \n\t"    \
-                          : "+r"(fpscr) : "r"(1<<19));  \
-    } while (0)
-#else
-#   define fp_single_enter(fpscr) ((void)fpscr)
-#   define fp_single_leave(fpscr)
-#endif
-
-#endif /* AVCODEC_SH4_SH4_H */
diff --git a/libavcodec/version.h b/libavcodec/version.h
index cdd5a61..42305ed 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -123,5 +123,8 @@
 #ifndef FF_API_EMU_EDGE
 #define FF_API_EMU_EDGE          (LIBAVCODEC_VERSION_MAJOR < 56)
 #endif
+#ifndef FF_API_ARCH_SH4
+#define FF_API_ARCH_SH4          (LIBAVCODEC_VERSION_MAJOR < 56)
+#endif
 
 #endif /* AVCODEC_VERSION_H */



More information about the ffmpeg-cvslog mailing list