~ubuntu-branches/ubuntu/trusty/zoneminder/trusty

« back to all changes in this revision

Viewing changes to debian/patches/dont_always_use_sse2_ssse3_instructions_all_archs.patch

  • Committer: Package Import Robot
  • Author(s): Ricardo Salveti de Araujo
  • Date: 2014-01-20 17:00:41 UTC
  • Revision ID: package-import@ubuntu.com-20140120170041-qtoov0fwoz76wpcb
Tags: 1.26.5-1ubuntu3
* dont_always_use_sse2_ssse3_instructions_all_archs.patch:
  - Refreshing patch covering a missing function call

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 
5
5
Index: zoneminder-1.26.5/src/zm_image.cpp
6
6
===================================================================
7
 
--- zoneminder-1.26.5.orig/src/zm_image.cpp     2014-01-20 15:50:23.110904485 -0200
8
 
+++ zoneminder-1.26.5/src/zm_image.cpp  2014-01-20 15:53:12.094910296 -0200
 
7
--- zoneminder-1.26.5.orig/src/zm_image.cpp     2013-12-16 13:42:36.000000000 -0200
 
8
+++ zoneminder-1.26.5/src/zm_image.cpp  2014-01-20 17:00:00.719048135 -0200
9
9
@@ -146,10 +146,13 @@
10
10
 {
11
11
        /* Assign the blend pointer to function */
59
59
                fptr_deinterlace_4field_rgba = &std_deinterlace_4field_rgba;
60
60
                fptr_deinterlace_4field_bgra = &std_deinterlace_4field_bgra;
61
61
                fptr_deinterlace_4field_argb = &std_deinterlace_4field_argb;
62
 
@@ -2987,9 +2996,8 @@
 
62
@@ -238,11 +247,14 @@
 
63
                Debug(2,"Deinterlace: Using standard delta functions");
 
64
        }
 
65
        
 
66
+#if ((defined(__i386__) || defined(__x86_64__) || defined(ZM_KEEP_SSE)) && !defined(ZM_STRIP_SSE))
 
67
        /* Use SSE2 aligned memory copy? */
 
68
        if(config.cpu_extensions && sseversion >= 20) {
 
69
                fptr_imgbufcpy = &sse2_aligned_memcpy;
 
70
                Debug(2,"Image buffer copy: Using SSE2 aligned memcpy");
 
71
-       } else {
 
72
+       } else
 
73
+#endif
 
74
+       {
 
75
                fptr_imgbufcpy = &memcpy;
 
76
                Debug(2,"Image buffer copy: Using standard memcpy");
 
77
        }
 
78
@@ -2987,9 +2999,8 @@
63
79
 
64
80
 /************************************************* BLEND FUNCTIONS *************************************************/
65
81
 
70
86
        static uint32_t divider = 0;
71
87
        static uint32_t clearmask = 0;
72
88
        static double current_blendpercent = 0.0;
73
 
@@ -3048,10 +3056,8 @@
 
89
@@ -3048,10 +3059,8 @@
74
90
        : "r" (col1), "r" (col2), "r" (result), "r" (count), "m" (clearmask), "m" (divider)
75
91
        : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "cc", "memory"
76
92
        );
82
98
 
83
99
 __attribute__((noinline)) void std_fastblend(const uint8_t* col1, const uint8_t* col2, uint8_t* result, unsigned long count, double blendpercent) {
84
100
        static int divider = 0;
85
 
@@ -3329,9 +3335,9 @@
 
101
@@ -3329,9 +3338,9 @@
86
102
        }
87
103
 }
88
104
 
93
109
 
94
110
        __asm__ __volatile__ (
95
111
        "sub $0x10, %0\n\t"
96
 
@@ -3352,14 +3358,12 @@
 
112
@@ -3352,14 +3361,12 @@
97
113
        : "r" (col1), "r" (col2), "r" (result), "r" (count)
98
114
        : "%xmm1", "%xmm2", "%xmm3", "%xmm4", "cc", "memory"
99
115
        );
110
126
   
111
127
        __asm__ __volatile__ (
112
128
        "mov $0x1F1F1F1F, %%eax\n\t"
113
 
@@ -3407,14 +3411,12 @@
 
129
@@ -3407,14 +3414,12 @@
114
130
        : "r" (col1), "r" (col2), "r" (result), "r" (count)
115
131
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "cc", "memory"
116
132
        );
127
143
   
128
144
        __asm__ __volatile__ (
129
145
        "mov $0x1F1F1F1F, %%eax\n\t"
130
 
@@ -3462,14 +3464,12 @@
 
146
@@ -3462,14 +3467,12 @@
131
147
        : "r" (col1), "r" (col2), "r" (result), "r" (count)
132
148
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "cc", "memory"
133
149
        );
144
160
   
145
161
        __asm__ __volatile__ (
146
162
        "mov $0x1F1F1F1F, %%eax\n\t"
147
 
@@ -3518,14 +3518,12 @@
 
163
@@ -3518,14 +3521,12 @@
148
164
        : "r" (col1), "r" (col2), "r" (result), "r" (count)
149
165
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "cc", "memory"
150
166
        );
161
177
   
162
178
        __asm__ __volatile__ (
163
179
        "mov $0x1F1F1F1F, %%eax\n\t"
164
 
@@ -3574,14 +3572,12 @@
 
180
@@ -3574,14 +3575,12 @@
165
181
        : "r" (col1), "r" (col2), "r" (result), "r" (count)
166
182
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "cc", "memory"
167
183
        );
178
194
        
179
195
        __asm__ __volatile__ (
180
196
        "mov $0x1F1F1F1F, %%eax\n\t"
181
 
@@ -3626,14 +3622,12 @@
 
197
@@ -3626,14 +3625,12 @@
182
198
        : "r" (col1), "r" (col2), "r" (result), "r" (count), "m" (*movemask)
183
199
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "cc", "memory"
184
200
        );
195
211
        
196
212
        __asm__ __volatile__ (
197
213
        "mov $0x1F1F1F1F, %%eax\n\t"
198
 
@@ -3678,14 +3672,12 @@
 
214
@@ -3678,14 +3675,12 @@
199
215
        : "r" (col1), "r" (col2), "r" (result), "r" (count), "m" (*movemask)
200
216
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "cc", "memory"
201
217
        );
212
228
        
213
229
        __asm__ __volatile__ (
214
230
        "mov $0x1F1F1F1F, %%eax\n\t"
215
 
@@ -3731,14 +3723,12 @@
 
231
@@ -3731,14 +3726,12 @@
216
232
        : "r" (col1), "r" (col2), "r" (result), "r" (count), "m" (*movemask)
217
233
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "cc", "memory"
218
234
        );
229
245
        
230
246
        __asm__ __volatile__ (
231
247
        "mov $0x1F1F1F1F, %%eax\n\t"
232
 
@@ -3784,10 +3774,8 @@
 
248
@@ -3784,10 +3777,8 @@
233
249
        : "r" (col1), "r" (col2), "r" (result), "r" (count), "m" (*movemask)
234
250
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "cc", "memory"
235
251
        );
241
257
 
242
258
 
243
259
 /************************************************* CONVERT FUNCTIONS *************************************************/
244
 
@@ -3988,9 +3976,9 @@
 
260
@@ -3988,9 +3979,9 @@
245
261
        }
246
262
 }
247
263
 
252
268
 
253
269
        __asm__ __volatile__ (
254
270
        "mov $0x1F1F1F1F, %%eax\n\t"
255
 
@@ -4029,14 +4017,12 @@
 
271
@@ -4029,14 +4020,12 @@
256
272
        : "r" (col1), "r" (result), "r" (count), "m" (*movemask)
257
273
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "cc", "memory"
258
274
        );
269
285
        unsigned long i = 0;
270
286
   
271
287
        __attribute__((aligned(16))) static const uint8_t movemask1[16] = {0,2,4,6,8,10,12,14,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
272
 
@@ -4074,10 +4060,8 @@
 
288
@@ -4074,10 +4063,8 @@
273
289
 #endif
274
290
        : "%xmm3", "%xmm4", "cc", "memory"
275
291
        );
281
297
 
282
298
 /* YUYV to RGB24 - relocated from zm_local_camera.cpp */
283
299
 __attribute__((noinline)) void zm_convert_yuyv_rgb(const uint8_t* col1, uint8_t* result, unsigned long count) {
284
 
@@ -4651,6 +4635,7 @@
 
300
@@ -4651,6 +4638,7 @@
285
301
        }
286
302
 }
287
303
 
289
305
 /* Grayscale SSSE3 */
290
306
 __attribute__((noinline,__target__("ssse3"))) void ssse3_deinterlace_4field_gray8(uint8_t* col1, uint8_t* col2, unsigned int threshold, unsigned int width, unsigned int height) {
291
307
        
292
 
@@ -4779,7 +4764,9 @@
 
308
@@ -4779,7 +4767,9 @@
293
309
        : "%eax", "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7", "cc", "memory"
294
310
        );
295
311
 }
299
315
 /* RGBA SSSE3 */
300
316
 __attribute__((noinline,__target__("ssse3"))) void ssse3_deinterlace_4field_rgba(uint8_t* col1, uint8_t* col2, unsigned int threshold, unsigned int width, unsigned int height) {
301
317
        __attribute__((aligned(16))) static const uint8_t movemask2[16] = {1,1,1,1,1,0,0,2,9,9,9,9,9,8,8,10};
302
 
@@ -4955,7 +4942,9 @@
 
318
@@ -4955,7 +4945,9 @@
303
319
 #endif
304
320
        );
305
321
 }
309
325
 /* BGRA SSSE3 */
310
326
 __attribute__((noinline,__target__("ssse3"))) void ssse3_deinterlace_4field_bgra(uint8_t* col1, uint8_t* col2, unsigned int threshold, unsigned int width, unsigned int height) {
311
327
        __attribute__((aligned(16))) static const uint8_t movemask2[16] = {1,1,1,1,1,2,2,0,9,9,9,9,9,10,10,8};
312
 
@@ -5131,7 +5120,9 @@
 
328
@@ -5131,7 +5123,9 @@
313
329
 #endif
314
330
        );
315
331
 }
319
335
 /* ARGB SSSE3 */
320
336
 __attribute__((noinline,__target__("ssse3"))) void ssse3_deinterlace_4field_argb(uint8_t* col1, uint8_t* col2, unsigned int threshold, unsigned int width, unsigned int height) {
321
337
        __attribute__((aligned(16))) static const uint8_t movemask2[16] = {2,2,2,2,2,1,1,3,10,10,10,10,10,9,9,11};
322
 
@@ -5307,7 +5298,9 @@
 
338
@@ -5307,7 +5301,9 @@
323
339
 #endif
324
340
        );
325
341
 }
329
345
 /* ABGR SSSE3 */
330
346
 __attribute__((noinline,__target__("ssse3"))) void ssse3_deinterlace_4field_abgr(uint8_t* col1, uint8_t* col2, unsigned int threshold, unsigned int width, unsigned int height) {
331
347
        __attribute__((aligned(16))) static const uint8_t movemask2[16] = {2,2,2,2,2,3,3,1,10,10,10,10,10,11,11,9};
332
 
@@ -5483,4 +5476,5 @@
 
348
@@ -5483,4 +5479,5 @@
333
349
 #endif
334
350
        );
335
351
 }
338
354
Index: zoneminder-1.26.5/src/zm_local_camera.cpp
339
355
===================================================================
340
356
--- zoneminder-1.26.5.orig/src/zm_local_camera.cpp      2013-12-16 13:42:36.000000000 -0200
341
 
+++ zoneminder-1.26.5/src/zm_local_camera.cpp   2014-01-20 15:53:11.370910271 -0200
 
357
+++ zoneminder-1.26.5/src/zm_local_camera.cpp   2014-01-20 16:54:58.000000000 -0200
342
358
@@ -457,10 +457,13 @@
343
359
                                        subpixelorder = ZM_SUBPIX_ORDER_NONE;
344
360
                                } else if(palette == V4L2_PIX_FMT_YUYV && colours == ZM_COLOUR_GRAY8) {
369
385
                                                conversion_fptr = &std_convert_yuyv_gray8;
370
386
                                                Debug(2,"Using standard YUYV->grayscale fast conversion");
371
387
                                        }
 
388
Index: zoneminder-1.26.5/src/zm_utils.cpp
 
389
===================================================================
 
390
--- zoneminder-1.26.5.orig/src/zm_utils.cpp     2014-01-20 16:59:05.619046240 -0200
 
391
+++ zoneminder-1.26.5/src/zm_utils.cpp  2014-01-20 16:59:54.603047924 -0200
 
392
@@ -190,10 +190,10 @@
 
393
 #endif
 
394
 }
 
395
 
 
396
+#if ((defined(__i386__) || defined(__x86_64__) || defined(ZM_KEEP_SSE)) && !defined(ZM_STRIP_SSE))
 
397
 /* SSE2 aligned memory copy. Useful for big copying of aligned memory like image buffers in ZM */
 
398
 /* For platforms without SSE2 we will use standard x86 asm memcpy or glibc's memcpy() */
 
399
 __attribute__((noinline,__target__("sse2"))) void* sse2_aligned_memcpy(void* dest, const void* src, size_t bytes) {
 
400
-#if ((defined(__i386__) || defined(__x86_64__) || defined(ZM_KEEP_SSE)) && !defined(ZM_STRIP_SSE))
 
401
        if(bytes > 128) {
 
402
                unsigned int remainder = bytes % 128;
 
403
                const uint8_t* lastsrc = (uint8_t*)src + (bytes - remainder);
 
404
@@ -234,12 +234,9 @@
 
405
                /* Standard memcpy */
 
406
                __asm__ __volatile__("cld; rep movsb" :: "S"(src), "D"(dest), "c"(bytes) : "cc", "memory");
 
407
        }
 
408
-#else
 
409
-       /* Non x86\x86-64 platform, use memcpy */
 
410
-       memcpy(dest,src,bytes);
 
411
-#endif
 
412
        return dest;
 
413
 }
 
414
+#endif
 
415
 
 
416
 void timespec_diff(struct timespec *start, struct timespec *end, struct timespec *diff) {
 
417
        if (((end->tv_nsec)-(start->tv_nsec))<0) {