1
This patch resolves all non-PIC issues from the libpostproc library.
2
For inquiries about this patch, please see bug #528080.
3
==========================================================================
4
--- a/libpostproc/postprocess_template.c
5
+++ b/libpostproc/postprocess_template.c
9
"pxor %%mm7, %%mm7 \n\t" // 0
10
- "movq "MANGLE(b80)", %%mm6 \n\t" // MIN_SIGNED_BYTE
11
+ "movq %2, %%mm6 \n\t" // MIN_SIGNED_BYTE
12
"leal (%0, %1), %%"REG_a" \n\t"
13
"leal (%%"REG_a", %1, 4), %%"REG_c" \n\t"
14
// 0 1 2 3 4 5 6 7 8 9
15
// %0 eax eax+%1 eax+2%1 %0+4%1 ecx ecx+%1 ecx+2%1 %0+8%1 ecx+4%1
16
- "movq "MANGLE(pQPb)", %%mm0 \n\t" // QP,..., QP
17
+ "movq %3, %%mm0 \n\t" // QP,..., QP
18
"movq %%mm0, %%mm1 \n\t" // QP,..., QP
19
- "paddusb "MANGLE(b02)", %%mm0 \n\t"
20
+ "paddusb %4, %%mm0 \n\t"
21
"psrlw $2, %%mm0 \n\t"
22
- "pand "MANGLE(b3F)", %%mm0 \n\t" // QP/4,..., QP/4
23
+ "pand %5, %%mm0 \n\t" // QP/4,..., QP/4
24
"paddusb %%mm1, %%mm0 \n\t" // QP*1.25 ...
25
"movq (%0, %1, 4), %%mm2 \n\t" // line 4
26
"movq (%%"REG_c"), %%mm3 \n\t" // line 5
29
"paddb %%mm6, %%mm5 \n\t"
30
"psrlw $2, %%mm5 \n\t"
31
- "pand "MANGLE(b3F)", %%mm5 \n\t"
32
- "psubb "MANGLE(b20)", %%mm5 \n\t" // (l5-l4)/8
33
+ "pand %5, %%mm5 \n\t"
34
+ "psubb %6, %%mm5 \n\t" // (l5-l4)/8
36
"movq (%%"REG_a", %1, 2), %%mm2 \n\t"
37
"paddb %%mm6, %%mm2 \n\t" // line 3 + 0x80
39
"movq %%mm2, (%%"REG_c", %1) \n\t"
42
- : "r" (src), "r" ((x86_reg)stride)
43
+ : "r" (src), "r" ((x86_reg)stride), "m"(b80), "m"(pQPb), "m"(b02),
47
#else //HAVE_MMX2 || HAVE_AMD3DNOW
49
"paddusb %%mm0, %%mm0 \n\t"
50
"psubusb %%mm0, %%mm4 \n\t"
51
"pcmpeqb %%mm7, %%mm4 \n\t" // d <= QP ? -1 : 0
52
- "psubusb "MANGLE(b01)", %%mm3 \n\t"
53
+ "psubusb %3, %%mm3 \n\t"
54
"pand %%mm4, %%mm3 \n\t" // d <= QP ? d : 0
56
PAVGB(%%mm7, %%mm3) // d/2
58
"movq %%mm0, (%%"REG_c", %1, 2) \n\t" // line 7
61
- : "r" (src), "r" ((x86_reg)stride), "m" (co->pQPb)
62
+ : "r" (src), "r" ((x86_reg)stride), "m" (co->pQPb), "m"(b01)
65
#else //HAVE_MMX2 || HAVE_AMD3DNOW
68
PMINUB(%%mm2, %%mm1, %%mm4) // MIN(|lenergy|,|renergy|)/8
69
"movq %2, %%mm4 \n\t" // QP //FIXME QP+1 ?
70
- "paddusb "MANGLE(b01)", %%mm4 \n\t"
71
+ "paddusb %5, %%mm4 \n\t"
72
"pcmpgtb %%mm3, %%mm4 \n\t" // |menergy|/8 < QP
73
"psubusb %%mm1, %%mm3 \n\t" // d=|menergy|/8-MIN(|lenergy|,|renergy|)/8
74
"pand %%mm4, %%mm3 \n\t"
76
"movq %%mm3, %%mm1 \n\t"
77
-// "psubusb "MANGLE(b01)", %%mm3 \n\t"
78
+// "psubusb %5, %%mm3 \n\t"
81
"paddusb %%mm1, %%mm3 \n\t"
82
-// "paddusb "MANGLE(b01)", %%mm3 \n\t"
83
+// "paddusb %5, %%mm3 \n\t"
85
"movq (%%"REG_a", %1, 2), %%mm6 \n\t" //l3
86
"movq (%0, %1, 4), %%mm5 \n\t" //l4
88
"pand %%mm0, %%mm3 \n\t"
89
PMINUB(%%mm5, %%mm3, %%mm0)
91
- "psubusb "MANGLE(b01)", %%mm3 \n\t"
92
+ "psubusb %5, %%mm3 \n\t"
95
"movq (%%"REG_a", %1, 2), %%mm0 \n\t"
97
"movq (%%"REG_a", %1), %%mm3 \n\t" // l2
98
"pxor %%mm6, %%mm2 \n\t" // -l5-1
99
"movq %%mm2, %%mm5 \n\t" // -l5-1
100
- "movq "MANGLE(b80)", %%mm4 \n\t" // 128
101
+ "movq %3, %%mm4 \n\t" // 128
102
"lea (%%"REG_a", %1, 4), %%"REG_c" \n\t"
103
PAVGB(%%mm3, %%mm2) // (l2-l5+256)/2
104
PAVGB(%%mm0, %%mm4) // ~(l4-l3)/4 + 128
106
"pxor %%mm6, %%mm2 \n\t" // -l1-1
107
PAVGB(%%mm3, %%mm2) // (l2-l1+256)/2
108
PAVGB((%0), %%mm1) // (l0-l3+256)/2
109
- "movq "MANGLE(b80)", %%mm3 \n\t" // 128
110
+ "movq %3, %%mm3 \n\t" // 128
111
PAVGB(%%mm2, %%mm3) // ~(l2-l1)/4 + 128
112
PAVGB(%%mm1, %%mm3) // ~(l0-l3)/4 +(l2-l1)/8 + 128
113
PAVGB(%%mm2, %%mm3) // ~(l0-l3)/8 +5(l2-l1)/16 + 128
114
@@ -752,14 +753,14 @@
115
"movq (%%"REG_c", %1, 2), %%mm1 \n\t" // l7
116
"pxor %%mm6, %%mm1 \n\t" // -l7-1
117
PAVGB((%0, %1, 4), %%mm1) // (l4-l7+256)/2
118
- "movq "MANGLE(b80)", %%mm2 \n\t" // 128
119
+ "movq %3, %%mm2 \n\t" // 128
120
PAVGB(%%mm5, %%mm2) // ~(l6-l5)/4 + 128
121
PAVGB(%%mm1, %%mm2) // ~(l4-l7)/4 +(l6-l5)/8 + 128
122
PAVGB(%%mm5, %%mm2) // ~(l4-l7)/8 +5(l6-l5)/16 + 128
123
// mm0=128-q, mm2=renergy/16 + 128, mm3=lenergy/16 + 128, mm4= menergy/16 + 128
125
- "movq "MANGLE(b00)", %%mm1 \n\t" // 0
126
- "movq "MANGLE(b00)", %%mm5 \n\t" // 0
127
+ "movq %4, %%mm1 \n\t" // 0
128
+ "movq %4, %%mm5 \n\t" // 0
129
"psubb %%mm2, %%mm1 \n\t" // 128 - renergy/16
130
"psubb %%mm3, %%mm5 \n\t" // 128 - lenergy/16
131
PMAXUB(%%mm1, %%mm2) // 128 + |renergy/16|
134
// mm0=128-q, mm3=128 + MIN(|lenergy|,|renergy|)/16, mm4= menergy/16 + 128
136
- "movq "MANGLE(b00)", %%mm7 \n\t" // 0
137
+ "movq %4, %%mm7 \n\t" // 0
138
"movq %2, %%mm2 \n\t" // QP
139
PAVGB(%%mm6, %%mm2) // 128 + QP/2
140
"psubb %%mm6, %%mm2 \n\t"
141
@@ -782,13 +783,13 @@
142
// mm0=128-q, mm1= SIGN(menergy), mm2= |menergy|/16 < QP/2, mm4= d/16
144
"movq %%mm4, %%mm3 \n\t" // d
145
- "psubusb "MANGLE(b01)", %%mm4 \n\t"
146
+ "psubusb %5, %%mm4 \n\t"
147
PAVGB(%%mm7, %%mm4) // d/32
148
PAVGB(%%mm7, %%mm4) // (d + 32)/64
149
"paddb %%mm3, %%mm4 \n\t" // 5d/64
150
"pand %%mm2, %%mm4 \n\t"
152
- "movq "MANGLE(b80)", %%mm5 \n\t" // 128
153
+ "movq %3, %%mm5 \n\t" // 128
154
"psubb %%mm0, %%mm5 \n\t" // q
155
"paddsb %%mm6, %%mm5 \n\t" // fix bad rounding
156
"pcmpgtb %%mm5, %%mm7 \n\t" // SIGN(q)
158
"movq %%mm2, (%0, %1, 4) \n\t"
161
- : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb)
162
+ : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb), "m"(b80),
167
@@ -1045,10 +1047,10 @@
168
"psubusw %%mm1, %%mm5 \n\t" // ld
171
- "movq "MANGLE(w05)", %%mm2 \n\t" // 5
172
+ "movq %3, %%mm2 \n\t" // 5
173
"pmullw %%mm2, %%mm4 \n\t"
174
"pmullw %%mm2, %%mm5 \n\t"
175
- "movq "MANGLE(w20)", %%mm2 \n\t" // 32
176
+ "movq %4, %%mm2 \n\t" // 32
177
"paddw %%mm2, %%mm4 \n\t"
178
"paddw %%mm2, %%mm5 \n\t"
179
"psrlw $6, %%mm4 \n\t"
180
@@ -1098,7 +1100,7 @@
181
"movq %%mm0, (%0, %1) \n\t"
184
- : "r" ((x86_reg)stride), "m" (c->pQPb)
185
+ : "r" ((x86_reg)stride), "m" (c->pQPb), "m"(w05), "m"(w20)
188
#else //HAVE_MMX2 || HAVE_AMD3DNOW
189
@@ -1237,7 +1239,7 @@
190
"movq %%mm6, %%mm0 \n\t" // max
191
"psubb %%mm7, %%mm6 \n\t" // max - min
192
"movd %%mm6, %%ecx \n\t"
193
- "cmpb "MANGLE(deringThreshold)", %%cl \n\t"
194
+ "cmpb %4, %%cl \n\t"
196
"lea -24(%%"REG_SP"), %%"REG_c" \n\t"
197
"and "ALIGN_MASK", %%"REG_c" \n\t"
198
@@ -1264,9 +1266,9 @@
199
"psubusb %%mm7, %%mm0 \n\t"
200
"psubusb %%mm7, %%mm2 \n\t"
201
"psubusb %%mm7, %%mm3 \n\t"
202
- "pcmpeqb "MANGLE(b00)", %%mm0 \n\t" // L10 > a ? 0 : -1
203
- "pcmpeqb "MANGLE(b00)", %%mm2 \n\t" // L20 > a ? 0 : -1
204
- "pcmpeqb "MANGLE(b00)", %%mm3 \n\t" // L00 > a ? 0 : -1
205
+ "pcmpeqb %5, %%mm0 \n\t" // L10 > a ? 0 : -1
206
+ "pcmpeqb %5, %%mm2 \n\t" // L20 > a ? 0 : -1
207
+ "pcmpeqb %5, %%mm3 \n\t" // L00 > a ? 0 : -1
208
"paddb %%mm2, %%mm0 \n\t"
209
"paddb %%mm3, %%mm0 \n\t"
211
@@ -1287,9 +1289,9 @@
212
"psubusb %%mm7, %%mm2 \n\t"
213
"psubusb %%mm7, %%mm4 \n\t"
214
"psubusb %%mm7, %%mm5 \n\t"
215
- "pcmpeqb "MANGLE(b00)", %%mm2 \n\t" // L11 > a ? 0 : -1
216
- "pcmpeqb "MANGLE(b00)", %%mm4 \n\t" // L21 > a ? 0 : -1
217
- "pcmpeqb "MANGLE(b00)", %%mm5 \n\t" // L01 > a ? 0 : -1
218
+ "pcmpeqb %5, %%mm2 \n\t" // L11 > a ? 0 : -1
219
+ "pcmpeqb %5, %%mm4 \n\t" // L21 > a ? 0 : -1
220
+ "pcmpeqb %5, %%mm5 \n\t" // L01 > a ? 0 : -1
221
"paddb %%mm4, %%mm2 \n\t"
222
"paddb %%mm5, %%mm2 \n\t"
224
@@ -1314,7 +1316,7 @@
225
"psubusb " #lx ", " #t1 " \n\t"\
226
"psubusb " #lx ", " #t0 " \n\t"\
227
"psubusb " #lx ", " #sx " \n\t"\
228
- "movq "MANGLE(b00)", " #lx " \n\t"\
229
+ "movq %5, " #lx " \n\t"\
230
"pcmpeqb " #lx ", " #t1 " \n\t" /* src[-1] > a ? 0 : -1*/\
231
"pcmpeqb " #lx ", " #t0 " \n\t" /* src[+1] > a ? 0 : -1*/\
232
"pcmpeqb " #lx ", " #sx " \n\t" /* src[0] > a ? 0 : -1*/\
233
@@ -1330,8 +1332,8 @@
234
PMINUB(t1, pplx, t0)\
235
"paddb " #sx ", " #ppsx " \n\t"\
236
"paddb " #psx ", " #ppsx " \n\t"\
237
- "#paddb "MANGLE(b02)", " #ppsx " \n\t"\
238
- "pand "MANGLE(b08)", " #ppsx " \n\t"\
239
+ "#paddb %6, " #ppsx " \n\t"\
240
+ "pand %7, " #ppsx " \n\t"\
241
"pcmpeqb " #lx ", " #ppsx " \n\t"\
242
"pand " #ppsx ", " #pplx " \n\t"\
243
"pandn " #dst ", " #ppsx " \n\t"\
244
@@ -1367,7 +1369,8 @@
245
DERING_CORE((%0, %1, 8) ,(%%REGd, %1, 4),%%mm2,%%mm4,%%mm0,%%mm3,%%mm5,%%mm1,%%mm6,%%mm7)
248
- : : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb), "m"(c->pQPb2)
249
+ : : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb), "m"(c->pQPb2),
250
+ "m"(deringThreshold), "m"(b00), "m"(b02), "m"(b08)
251
: "%"REG_a, "%"REG_d, "%"REG_c
253
#else //HAVE_MMX2 || HAVE_AMD3DNOW
254
@@ -2227,7 +2230,7 @@
256
#if defined (FAST_L2_DIFF)
257
"pcmpeqb %%mm7, %%mm7 \n\t"
258
- "movq "MANGLE(b80)", %%mm6 \n\t"
259
+ "movq %4, %%mm6 \n\t"
260
"pxor %%mm0, %%mm0 \n\t"
261
#define REAL_L2_DIFF_CORE(a, b)\
262
"movq " #a ", %%mm5 \n\t"\
263
@@ -2476,7 +2479,8 @@
267
- :: "r" (src), "r" (tempBlurred), "r"((x86_reg)stride), "m" (tempBlurredPast)
268
+ :: "r" (src), "r" (tempBlurred), "r"((x86_reg)stride),
269
+ "m" (tempBlurredPast), "m"(b80)
270
: "%"REG_a, "%"REG_d, "%"REG_c, "memory"
272
#else //HAVE_MMX2 || HAVE_AMD3DNOW
273
@@ -2730,8 +2734,8 @@
274
"movq %%mm6, %%mm1 \n\t"
275
"psllw $2, %%mm0 \n\t"
276
"psllw $2, %%mm1 \n\t"
277
- "paddw "MANGLE(w04)", %%mm0 \n\t"
278
- "paddw "MANGLE(w04)", %%mm1 \n\t"
279
+ "paddw %5, %%mm0 \n\t"
280
+ "paddw %5, %%mm1 \n\t"
283
"movq (%0), %%mm2 \n\t"\
284
@@ -2820,7 +2824,7 @@
285
"mov %4, %0 \n\t" //FIXME
288
- : "r" ((x86_reg)step), "m" (c->pQPb), "r"(sums), "g"(src)
289
+ : "r" ((x86_reg)step), "m" (c->pQPb), "r"(sums), "g"(src), "m"(w04)
292
src+= step; // src points to begin of the 8x8 Block
293
@@ -3037,10 +3041,10 @@
294
"psubusw %%mm1, %%mm5 \n\t" // ld
297
- "movq "MANGLE(w05)", %%mm2 \n\t" // 5
298
+ "movq %4, %%mm2 \n\t" // 5
299
"pmullw %%mm2, %%mm4 \n\t"
300
"pmullw %%mm2, %%mm5 \n\t"
301
- "movq "MANGLE(w20)", %%mm2 \n\t" // 32
302
+ "movq %5, %%mm2 \n\t" // 32
303
"paddw %%mm2, %%mm4 \n\t"
304
"paddw %%mm2, %%mm5 \n\t"
305
"psrlw $6, %%mm4 \n\t"
306
@@ -3092,7 +3096,8 @@
307
"movq %%mm0, (%0, %1) \n\t"
310
- : "r" ((x86_reg)step), "m" (c->pQPb), "m"(eq_mask)
311
+ : "r" ((x86_reg)step), "m" (c->pQPb), "m"(eq_mask), "m"(w05),