Browse code

Revert 12838 to redo it the right way (use svn copy to create new file based on old).

Originally committed as revision 12845 to svn://svn.ffmpeg.org/ffmpeg/trunk

Jeff Downs authored on 2008/04/16 13:26:52
Showing 3 changed files
... ...
@@ -685,6 +685,116 @@ static av_always_inline int get_cabac_bypass_sign(CABACContext *c, int val){
685 685
 #endif
686 686
 }
687 687
 
688
+//FIXME the x86 code from this file should be moved into i386/h264 or cabac something.c/h (note ill kill you if you move my code away from under my fingers before iam finished with it!)
689
+//FIXME use some macros to avoid duplicatin get_cabac (cannot be done yet as that would make optimization work hard)
690
+#if defined(ARCH_X86) && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS)
691
+static int decode_significance_x86(CABACContext *c, int max_coeff, uint8_t *significant_coeff_ctx_base, int *index){
692
+    void *end= significant_coeff_ctx_base + max_coeff - 1;
693
+    int minusstart= -(int)significant_coeff_ctx_base;
694
+    int minusindex= 4-(int)index;
695
+    int coeff_count;
696
+    asm volatile(
697
+        "movl "RANGE    "(%3), %%esi            \n\t"
698
+        "movl "LOW      "(%3), %%ebx            \n\t"
699
+
700
+        "2:                                     \n\t"
701
+
702
+        BRANCHLESS_GET_CABAC("%%edx", "%3", "(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
703
+
704
+        "test $1, %%edx                         \n\t"
705
+        " jz 3f                                 \n\t"
706
+
707
+        BRANCHLESS_GET_CABAC("%%edx", "%3", "61(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
708
+
709
+        "mov  %2, %%"REG_a"                     \n\t"
710
+        "movl %4, %%ecx                         \n\t"
711
+        "add  %1, %%"REG_c"                     \n\t"
712
+        "movl %%ecx, (%%"REG_a")                \n\t"
713
+
714
+        "test $1, %%edx                         \n\t"
715
+        " jnz 4f                                \n\t"
716
+
717
+        "add  $4, %%"REG_a"                     \n\t"
718
+        "mov  %%"REG_a", %2                     \n\t"
719
+
720
+        "3:                                     \n\t"
721
+        "add  $1, %1                            \n\t"
722
+        "cmp  %5, %1                            \n\t"
723
+        " jb 2b                                 \n\t"
724
+        "mov  %2, %%"REG_a"                     \n\t"
725
+        "movl %4, %%ecx                         \n\t"
726
+        "add  %1, %%"REG_c"                     \n\t"
727
+        "movl %%ecx, (%%"REG_a")                \n\t"
728
+        "4:                                     \n\t"
729
+        "add  %6, %%eax                         \n\t"
730
+        "shr $2, %%eax                          \n\t"
731
+
732
+        "movl %%esi, "RANGE    "(%3)            \n\t"
733
+        "movl %%ebx, "LOW      "(%3)            \n\t"
734
+        :"=&a"(coeff_count), "+r"(significant_coeff_ctx_base), "+m"(index)
735
+        :"r"(c), "m"(minusstart), "m"(end), "m"(minusindex)
736
+        : "%"REG_c, "%ebx", "%edx", "%esi", "memory"
737
+    );
738
+    return coeff_count;
739
+}
740
+
741
+static int decode_significance_8x8_x86(CABACContext *c, uint8_t *significant_coeff_ctx_base, int *index, const uint8_t *sig_off){
742
+    int minusindex= 4-(int)index;
743
+    int coeff_count;
744
+    long last=0;
745
+    asm volatile(
746
+        "movl "RANGE    "(%3), %%esi            \n\t"
747
+        "movl "LOW      "(%3), %%ebx            \n\t"
748
+
749
+        "mov %1, %%"REG_D"                      \n\t"
750
+        "2:                                     \n\t"
751
+
752
+        "mov %6, %%"REG_a"                      \n\t"
753
+        "movzbl (%%"REG_a", %%"REG_D"), %%edi   \n\t"
754
+        "add %5, %%"REG_D"                      \n\t"
755
+
756
+        BRANCHLESS_GET_CABAC("%%edx", "%3", "(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
757
+
758
+        "mov %1, %%edi                          \n\t"
759
+        "test $1, %%edx                         \n\t"
760
+        " jz 3f                                 \n\t"
761
+
762
+        "movzbl "MANGLE(last_coeff_flag_offset_8x8)"(%%edi), %%edi\n\t"
763
+        "add %5, %%"REG_D"                      \n\t"
764
+
765
+        BRANCHLESS_GET_CABAC("%%edx", "%3", "15(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
766
+
767
+        "mov %2, %%"REG_a"                      \n\t"
768
+        "mov %1, %%edi                          \n\t"
769
+        "movl %%edi, (%%"REG_a")                \n\t"
770
+
771
+        "test $1, %%edx                         \n\t"
772
+        " jnz 4f                                \n\t"
773
+
774
+        "add $4, %%"REG_a"                      \n\t"
775
+        "mov %%"REG_a", %2                      \n\t"
776
+
777
+        "3:                                     \n\t"
778
+        "addl $1, %%edi                         \n\t"
779
+        "mov %%edi, %1                          \n\t"
780
+        "cmpl $63, %%edi                        \n\t"
781
+        " jb 2b                                 \n\t"
782
+        "mov %2, %%"REG_a"                      \n\t"
783
+        "movl %%edi, (%%"REG_a")                \n\t"
784
+        "4:                                     \n\t"
785
+        "addl %4, %%eax                         \n\t"
786
+        "shr $2, %%eax                          \n\t"
787
+
788
+        "movl %%esi, "RANGE    "(%3)            \n\t"
789
+        "movl %%ebx, "LOW      "(%3)            \n\t"
790
+        :"=&a"(coeff_count),"+m"(last), "+m"(index)
791
+        :"r"(c), "m"(minusindex), "m"(significant_coeff_ctx_base), "m"(sig_off)
792
+        : "%"REG_c, "%ebx", "%edx", "%esi", "%"REG_D, "memory"
793
+    );
794
+    return coeff_count;
795
+}
796
+#endif /* defined(ARCH_X86) && && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */
797
+
688 798
 /**
689 799
  *
690 800
  * @return the number of bytes read or 0 if no end
... ...
@@ -35,9 +35,6 @@
35 35
 #include "rectangle.h"
36 36
 
37 37
 #include "cabac.h"
38
-#ifdef ARCH_X86
39
-#include "i386/h264_i386.h"
40
-#endif
41 38
 
42 39
 //#undef NDEBUG
43 40
 #include <assert.h>
44 41
deleted file mode 100644
... ...
@@ -1,144 +0,0 @@
1
-/*
2
- * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
3
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
4
- *
5
- * This file is part of FFmpeg.
6
- *
7
- * FFmpeg is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU Lesser General Public
9
- * License as published by the Free Software Foundation; either
10
- * version 2.1 of the License, or (at your option) any later version.
11
- *
12
- * FFmpeg is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
- * Lesser General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU Lesser General Public
18
- * License along with FFmpeg; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
- */
21
-
22
-/**
23
- * @file h264_i386.h
24
- * H.264 / AVC / MPEG4 part10 codec.
25
- * non-MMX i386-specific optimizations for H.264
26
- * @author Michael Niedermayer <michaelni@gmx.at>
27
- */
28
-
29
-#ifndef FFMPEG_H264_I386_H
30
-#define FFMPEG_H264_I386_H
31
-
32
-
33
-#include "cabac.h"
34
-
35
-//FIXME use some macros to avoid duplicatin get_cabac (cannot be done yet as that would make optimization work hard)
36
-#if defined(ARCH_X86) && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS)
37
-static int decode_significance_x86(CABACContext *c, int max_coeff, uint8_t *significant_coeff_ctx_base, int *index){
38
-    void *end= significant_coeff_ctx_base + max_coeff - 1;
39
-    int minusstart= -(int)significant_coeff_ctx_base;
40
-    int minusindex= 4-(int)index;
41
-    int coeff_count;
42
-    asm volatile(
43
-        "movl "RANGE    "(%3), %%esi            \n\t"
44
-        "movl "LOW      "(%3), %%ebx            \n\t"
45
-
46
-        "2:                                     \n\t"
47
-
48
-        BRANCHLESS_GET_CABAC("%%edx", "%3", "(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
49
-
50
-        "test $1, %%edx                         \n\t"
51
-        " jz 3f                                 \n\t"
52
-
53
-        BRANCHLESS_GET_CABAC("%%edx", "%3", "61(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
54
-
55
-        "mov  %2, %%"REG_a"                     \n\t"
56
-        "movl %4, %%ecx                         \n\t"
57
-        "add  %1, %%"REG_c"                     \n\t"
58
-        "movl %%ecx, (%%"REG_a")                \n\t"
59
-
60
-        "test $1, %%edx                         \n\t"
61
-        " jnz 4f                                \n\t"
62
-
63
-        "add  $4, %%"REG_a"                     \n\t"
64
-        "mov  %%"REG_a", %2                     \n\t"
65
-
66
-        "3:                                     \n\t"
67
-        "add  $1, %1                            \n\t"
68
-        "cmp  %5, %1                            \n\t"
69
-        " jb 2b                                 \n\t"
70
-        "mov  %2, %%"REG_a"                     \n\t"
71
-        "movl %4, %%ecx                         \n\t"
72
-        "add  %1, %%"REG_c"                     \n\t"
73
-        "movl %%ecx, (%%"REG_a")                \n\t"
74
-        "4:                                     \n\t"
75
-        "add  %6, %%eax                         \n\t"
76
-        "shr $2, %%eax                          \n\t"
77
-
78
-        "movl %%esi, "RANGE    "(%3)            \n\t"
79
-        "movl %%ebx, "LOW      "(%3)            \n\t"
80
-        :"=&a"(coeff_count), "+r"(significant_coeff_ctx_base), "+m"(index)
81
-        :"r"(c), "m"(minusstart), "m"(end), "m"(minusindex)
82
-        : "%"REG_c, "%ebx", "%edx", "%esi", "memory"
83
-    );
84
-    return coeff_count;
85
-}
86
-
87
-static int decode_significance_8x8_x86(CABACContext *c, uint8_t *significant_coeff_ctx_base, int *index, const uint8_t *sig_off){
88
-    int minusindex= 4-(int)index;
89
-    int coeff_count;
90
-    long last=0;
91
-    asm volatile(
92
-        "movl "RANGE    "(%3), %%esi            \n\t"
93
-        "movl "LOW      "(%3), %%ebx            \n\t"
94
-
95
-        "mov %1, %%"REG_D"                      \n\t"
96
-        "2:                                     \n\t"
97
-
98
-        "mov %6, %%"REG_a"                      \n\t"
99
-        "movzbl (%%"REG_a", %%"REG_D"), %%edi   \n\t"
100
-        "add %5, %%"REG_D"                      \n\t"
101
-
102
-        BRANCHLESS_GET_CABAC("%%edx", "%3", "(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
103
-
104
-        "mov %1, %%edi                          \n\t"
105
-        "test $1, %%edx                         \n\t"
106
-        " jz 3f                                 \n\t"
107
-
108
-        "movzbl "MANGLE(last_coeff_flag_offset_8x8)"(%%edi), %%edi\n\t"
109
-        "add %5, %%"REG_D"                      \n\t"
110
-
111
-        BRANCHLESS_GET_CABAC("%%edx", "%3", "15(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al")
112
-
113
-        "mov %2, %%"REG_a"                      \n\t"
114
-        "mov %1, %%edi                          \n\t"
115
-        "movl %%edi, (%%"REG_a")                \n\t"
116
-
117
-        "test $1, %%edx                         \n\t"
118
-        " jnz 4f                                \n\t"
119
-
120
-        "add $4, %%"REG_a"                      \n\t"
121
-        "mov %%"REG_a", %2                      \n\t"
122
-
123
-        "3:                                     \n\t"
124
-        "addl $1, %%edi                         \n\t"
125
-        "mov %%edi, %1                          \n\t"
126
-        "cmpl $63, %%edi                        \n\t"
127
-        " jb 2b                                 \n\t"
128
-        "mov %2, %%"REG_a"                      \n\t"
129
-        "movl %%edi, (%%"REG_a")                \n\t"
130
-        "4:                                     \n\t"
131
-        "addl %4, %%eax                         \n\t"
132
-        "shr $2, %%eax                          \n\t"
133
-
134
-        "movl %%esi, "RANGE    "(%3)            \n\t"
135
-        "movl %%ebx, "LOW      "(%3)            \n\t"
136
-        :"=&a"(coeff_count),"+m"(last), "+m"(index)
137
-        :"r"(c), "m"(minusindex), "m"(significant_coeff_ctx_base), "m"(sig_off)
138
-        : "%"REG_c, "%ebx", "%edx", "%esi", "%"REG_D, "memory"
139
-    );
140
-    return coeff_count;
141
-}
142
-#endif /* defined(ARCH_X86) && && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */
143
-
144
-#endif /* FFMPEG_H264_I386_H */