Magellan Linux

Annotation of /trunk/smpeg/patches/smpeg-0.4.4-pic.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years, 1 month ago) by niro
File size: 9472 byte(s)
-import

1 niro 153 Fix PIC issues in mmx routines
2    
3     --- video/mmxflags_asm.S
4     +++ video/mmxflags_asm.S
5     @@ -1,11 +1,6 @@
6    
7     #if defined(i386) && defined(USE_MMX)
8    
9     -.data
10     - .align 16
11     - .type flags,@object
12     -flags: .long 0
13     -
14     .text
15     .align 4
16     .globl cpu_flags
17     @@ -40,16 +35,13 @@ cpu_flags:
18     xorl %ecx,%eax
19     je cpu_flags.L1
20    
21     - pusha
22     + pushl %ebx
23    
24     movl $1,%eax
25     cpuid
26     + movl %edx,%eax
27    
28     - movl %edx,flags
29     -
30     - popa
31     -
32     - movl flags,%eax
33     + popl %ebx
34    
35     cpu_flags.L1:
36     ret
37     --- video/mmxidct_asm.S
38     +++ video/mmxidct_asm.S
39     @@ -31,11 +31,6 @@ preSC: .short 16384,22725,21407,19266,
40     x0005000200010001:
41     .long 0x00010001,0x00050002
42     .align 8
43     - .type x0040000000000000,@object
44     - .size x0040000000000000,8
45     -x0040000000000000:
46     - .long 0, 0x00400000
47     - .align 8
48     .type x5a825a825a825a82,@object
49     .size x5a825a825a825a82,8
50     x5a825a825a825a82:
51     @@ -80,8 +75,21 @@ scratch7:
52     x0:
53     .long 0,0
54     .align 8
55     +
56     .text
57     .align 4
58     +
59     +#ifdef __PIC__
60     +# undef __i686 /* gcc define gets in our way */
61     +# define MUNG(sym) sym ## @GOTOFF(%ebx)
62     +# define INIT_PIC() \
63     + call __i686.get_pc_thunk.bx ; \
64     + addl $_GLOBAL_OFFSET_TABLE_, %ebx
65     +#else
66     +# define MUNG(sym) sym
67     +# define INIT_PIC()
68     +#endif
69     +
70     .globl IDCT_mmx
71     .type IDCT_mmx,@function
72     IDCT_mmx:
73     @@ -92,8 +100,9 @@ IDCT_mmx:
74     pushl %edx
75     pushl %esi
76     pushl %edi
77     + INIT_PIC()
78     movl 8(%ebp),%esi /* source matrix */
79     - leal preSC, %ecx
80     + leal MUNG(preSC), %ecx
81     /* column 0: even part
82     * use V4, V12, V0, V8 to produce V22..V25
83     */
84     @@ -109,7 +118,7 @@ IDCT_mmx:
85     movq %mm1, %mm2 /* added 11/1/96 */
86     pmulhw 8*8(%esi),%mm5 /* V8 */
87     psubsw %mm0, %mm1 /* V16 */
88     - pmulhw x5a825a825a825a82, %mm1 /* 23170 ->V18 */
89     + pmulhw MUNG(x5a825a825a825a82), %mm1 /* 23170 ->V18 */
90     paddsw %mm0, %mm2 /* V17 */
91     movq %mm2, %mm0 /* duplicate V17 */
92     psraw $1, %mm2 /* t75=t82 */
93     @@ -150,7 +159,7 @@ IDCT_mmx:
94     paddsw %mm0, %mm3 /* V29 ; free mm0 */
95     movq %mm7, %mm1 /* duplicate V26 */
96     psraw $1, %mm3 /* t91=t94 */
97     - pmulhw x539f539f539f539f,%mm7 /* V33 */
98     + pmulhw MUNG(x539f539f539f539f),%mm7 /* V33 */
99     psraw $1, %mm1 /* t96 */
100     movq %mm5, %mm0 /* duplicate V2 */
101     psraw $2, %mm4 /* t85=t87 */
102     @@ -158,15 +167,15 @@ IDCT_mmx:
103     psubsw %mm4, %mm0 /* V28 ; free mm4 */
104     movq %mm0, %mm2 /* duplicate V28 */
105     psraw $1, %mm5 /* t90=t93 */
106     - pmulhw x4546454645464546,%mm0 /* V35 */
107     + pmulhw MUNG(x4546454645464546),%mm0 /* V35 */
108     psraw $1, %mm2 /* t97 */
109     movq %mm5, %mm4 /* duplicate t90=t93 */
110     psubsw %mm2, %mm1 /* V32 ; free mm2 */
111     - pmulhw x61f861f861f861f8,%mm1 /* V36 */
112     + pmulhw MUNG(x61f861f861f861f8),%mm1 /* V36 */
113     psllw $1, %mm7 /* t107 */
114     paddsw %mm3, %mm5 /* V31 */
115     psubsw %mm3, %mm4 /* V30 ; free mm3 */
116     - pmulhw x5a825a825a825a82,%mm4 /* V34 */
117     + pmulhw MUNG(x5a825a825a825a82),%mm4 /* V34 */
118     nop
119     psubsw %mm1, %mm0 /* V38 */
120     psubsw %mm7, %mm1 /* V37 ; free mm7 */
121     @@ -233,7 +242,7 @@ IDCT_mmx:
122     psubsw %mm7, %mm1 /* V50 */
123     pmulhw 8*9(%esi), %mm5 /* V9 */
124     paddsw %mm7, %mm2 /* V51 */
125     - pmulhw x5a825a825a825a82, %mm1 /* 23170 ->V52 */
126     + pmulhw MUNG(x5a825a825a825a82), %mm1 /* 23170 ->V52 */
127     movq %mm2, %mm6 /* duplicate V51 */
128     psraw $1, %mm2 /* t138=t144 */
129     movq %mm3, %mm4 /* duplicate V1 */
130     @@ -274,11 +283,11 @@ IDCT_mmx:
131     * even more by doing the correction step in a later stage when the number
132     * is actually multiplied by 16
133     */
134     - paddw x0005000200010001, %mm4
135     + paddw MUNG(x0005000200010001), %mm4
136     psubsw %mm6, %mm3 /* V60 ; free mm6 */
137     psraw $1, %mm0 /* t154=t156 */
138     movq %mm3, %mm1 /* duplicate V60 */
139     - pmulhw x539f539f539f539f, %mm1 /* V67 */
140     + pmulhw MUNG(x539f539f539f539f), %mm1 /* V67 */
141     movq %mm5, %mm6 /* duplicate V3 */
142     psraw $2, %mm4 /* t148=t150 */
143     paddsw %mm4, %mm5 /* V61 */
144     @@ -287,13 +296,13 @@ IDCT_mmx:
145     psllw $1, %mm1 /* t169 */
146     paddsw %mm0, %mm5 /* V65 -> result */
147     psubsw %mm0, %mm4 /* V64 ; free mm0 */
148     - pmulhw x5a825a825a825a82, %mm4 /* V68 */
149     + pmulhw MUNG(x5a825a825a825a82), %mm4 /* V68 */
150     psraw $1, %mm3 /* t158 */
151     psubsw %mm6, %mm3 /* V66 */
152     movq %mm5, %mm2 /* duplicate V65 */
153     - pmulhw x61f861f861f861f8, %mm3 /* V70 */
154     + pmulhw MUNG(x61f861f861f861f8), %mm3 /* V70 */
155     psllw $1, %mm6 /* t165 */
156     - pmulhw x4546454645464546, %mm6 /* V69 */
157     + pmulhw MUNG(x4546454645464546), %mm6 /* V69 */
158     psraw $1, %mm2 /* t172 */
159     /* moved from next block */
160     movq 8*5(%esi), %mm0 /* V56 */
161     @@ -418,7 +427,7 @@ IDCT_mmx:
162     * movq 8*13(%esi), %mm4 tmt13
163     */
164     psubsw %mm4, %mm3 /* V134 */
165     - pmulhw x5a825a825a825a82, %mm3 /* 23170 ->V136 */
166     + pmulhw MUNG(x5a825a825a825a82), %mm3 /* 23170 ->V136 */
167     movq 8*9(%esi), %mm6 /* tmt9 */
168     paddsw %mm4, %mm5 /* V135 ; mm4 free */
169     movq %mm0, %mm4 /* duplicate tmt1 */
170     @@ -447,17 +456,17 @@ IDCT_mmx:
171     psubsw %mm7, %mm0 /* V144 */
172     movq %mm0, %mm3 /* duplicate V144 */
173     paddsw %mm7, %mm2 /* V147 ; free mm7 */
174     - pmulhw x539f539f539f539f, %mm0 /* 21407-> V151 */
175     + pmulhw MUNG(x539f539f539f539f), %mm0 /* 21407-> V151 */
176     movq %mm1, %mm7 /* duplicate tmt3 */
177     paddsw %mm5, %mm7 /* V145 */
178     psubsw %mm5, %mm1 /* V146 ; free mm5 */
179     psubsw %mm1, %mm3 /* V150 */
180     movq %mm7, %mm5 /* duplicate V145 */
181     - pmulhw x4546454645464546, %mm1 /* 17734-> V153 */
182     + pmulhw MUNG(x4546454645464546), %mm1 /* 17734-> V153 */
183     psubsw %mm2, %mm5 /* V148 */
184     - pmulhw x61f861f861f861f8, %mm3 /* 25080-> V154 */
185     + pmulhw MUNG(x61f861f861f861f8), %mm3 /* 25080-> V154 */
186     psllw $2, %mm0 /* t311 */
187     - pmulhw x5a825a825a825a82, %mm5 /* 23170-> V152 */
188     + pmulhw MUNG(x5a825a825a825a82), %mm5 /* 23170-> V152 */
189     paddsw %mm2, %mm7 /* V149 ; free mm2 */
190     psllw $1, %mm1 /* t313 */
191     nop /* without the nop - freeze here for one clock */
192     @@ -483,7 +492,7 @@ IDCT_mmx:
193     paddsw %mm3, %mm6 /* V164 ; free mm3 */
194     movq %mm4, %mm3 /* duplicate V142 */
195     psubsw %mm5, %mm4 /* V165 ; free mm5 */
196     - movq %mm2, scratch7 /* out7 */
197     + movq %mm2, MUNG(scratch7) /* out7 */
198     psraw $4, %mm6
199     psraw $4, %mm4
200     paddsw %mm5, %mm3 /* V162 */
201     @@ -494,11 +503,11 @@ IDCT_mmx:
202     */
203     movq %mm6, 8*9(%esi) /* out9 */
204     paddsw %mm1, %mm0 /* V161 */
205     - movq %mm3, scratch5 /* out5 */
206     + movq %mm3, MUNG(scratch5) /* out5 */
207     psubsw %mm1, %mm5 /* V166 ; free mm1 */
208     movq %mm4, 8*11(%esi) /* out11 */
209     psraw $4, %mm5
210     - movq %mm0, scratch3 /* out3 */
211     + movq %mm0, MUNG(scratch3) /* out3 */
212     movq %mm2, %mm4 /* duplicate V140 */
213     movq %mm5, 8*13(%esi) /* out13 */
214     paddsw %mm7, %mm2 /* V160 */
215     @@ -508,7 +517,7 @@ IDCT_mmx:
216     /* moved from the next block */
217     movq 8*3(%esi), %mm7
218     psraw $4, %mm4
219     - movq %mm2, scratch1 /* out1 */
220     + movq %mm2, MUNG(scratch1) /* out1 */
221     /* moved from the next block */
222     movq %mm0, %mm1
223     movq %mm4, 8*15(%esi) /* out15 */
224     @@ -565,15 +574,15 @@ IDCT_mmx:
225     paddsw %mm4, %mm3 /* V113 ; free mm4 */
226     movq %mm0, %mm4 /* duplicate V110 */
227     paddsw %mm1, %mm2 /* V111 */
228     - pmulhw x539f539f539f539f, %mm0 /* 21407-> V117 */
229     + pmulhw MUNG(x539f539f539f539f), %mm0 /* 21407-> V117 */
230     psubsw %mm1, %mm5 /* V112 ; free mm1 */
231     psubsw %mm5, %mm4 /* V116 */
232     movq %mm2, %mm1 /* duplicate V111 */
233     - pmulhw x4546454645464546, %mm5 /* 17734-> V119 */
234     + pmulhw MUNG(x4546454645464546), %mm5 /* 17734-> V119 */
235     psubsw %mm3, %mm2 /* V114 */
236     - pmulhw x61f861f861f861f8, %mm4 /* 25080-> V120 */
237     + pmulhw MUNG(x61f861f861f861f8), %mm4 /* 25080-> V120 */
238     paddsw %mm3, %mm1 /* V115 ; free mm3 */
239     - pmulhw x5a825a825a825a82, %mm2 /* 23170-> V118 */
240     + pmulhw MUNG(x5a825a825a825a82), %mm2 /* 23170-> V118 */
241     psllw $2, %mm0 /* t266 */
242     movq %mm1, (%esi) /* save V115 */
243     psllw $1, %mm5 /* t268 */
244     @@ -591,7 +600,7 @@ IDCT_mmx:
245     movq %mm6, %mm3 /* duplicate tmt4 */
246     psubsw %mm0, %mm6 /* V100 */
247     paddsw %mm0, %mm3 /* V101 ; free mm0 */
248     - pmulhw x5a825a825a825a82, %mm6 /* 23170 ->V102 */
249     + pmulhw MUNG(x5a825a825a825a82), %mm6 /* 23170 ->V102 */
250     movq %mm7, %mm5 /* duplicate tmt0 */
251     movq 8*8(%esi), %mm1 /* tmt8 */
252     paddsw %mm1, %mm7 /* V103 */
253     @@ -625,10 +634,10 @@ IDCT_mmx:
254     movq 8*2(%esi), %mm3 /* V123 */
255     paddsw %mm4, %mm7 /* out0 */
256     /* moved up from next block */
257     - movq scratch3, %mm0
258     + movq MUNG(scratch3), %mm0
259     psraw $4, %mm7
260     /* moved up from next block */
261     - movq scratch5, %mm6
262     + movq MUNG(scratch5), %mm6
263     psubsw %mm4, %mm1 /* out14 ; free mm4 */
264     paddsw %mm3, %mm5 /* out2 */
265     psraw $4, %mm1
266     @@ -639,7 +648,7 @@ IDCT_mmx:
267     movq %mm5, 8*2(%esi) /* out2 ; free mm5 */
268     psraw $4, %mm2
269     /* moved up to the prev block */
270     - movq scratch7, %mm4
271     + movq MUNG(scratch7), %mm4
272     /* moved up to the prev block */
273     psraw $4, %mm0
274     movq %mm2, 8*12(%esi) /* out12 ; free mm2 */
275     @@ -647,13 +656,13 @@ IDCT_mmx:
276     psraw $4, %mm6
277     /* move back the data to its correct place
278     * moved up to the prev block
279     - * movq scratch3, %mm0
280     - * movq scratch5, %mm6
281     - * movq scratch7, %mm4
282     + * movq MUNG(scratch3), %mm0
283     + * movq MUNG(scratch5), %mm6
284     + * movq MUNG(scratch7), %mm4
285     * psraw $4, %mm0
286     * psraw $4, %mm6
287     */
288     - movq scratch1, %mm1
289     + movq MUNG(scratch1), %mm1
290     psraw $4, %mm4
291     movq %mm0, 8*3(%esi) /* out3 */
292     psraw $4, %mm1
293     @@ -671,6 +680,15 @@ IDCT_mmx:
294     .Lfe1:
295     .size IDCT_mmx,.Lfe1-IDCT_mmx
296    
297     +#ifdef __PIC__
298     + .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
299     +.globl __i686.get_pc_thunk.bx
300     + .hidden __i686.get_pc_thunk.bx
301     + .type __i686.get_pc_thunk.bx,@function
302     + __i686.get_pc_thunk.bx:
303     + movl (%esp), %ebx
304     + ret
305     +#endif
306    
307     #endif /* i386 && USE_MMX */
308