Release 0.11.2
[platform/upstream/gstreamer.git] / gst / fieldanalysis / gstfieldanalysisorc-dist.c
1
2 /* autogenerated from gstfieldanalysisorc.orc */
3
4 #ifdef HAVE_CONFIG_H
5 #include "config.h"
6 #endif
7 #include <glib.h>
8
9 #ifndef _ORC_INTEGER_TYPEDEFS_
10 #define _ORC_INTEGER_TYPEDEFS_
11 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
12 #include <stdint.h>
13 typedef int8_t orc_int8;
14 typedef int16_t orc_int16;
15 typedef int32_t orc_int32;
16 typedef int64_t orc_int64;
17 typedef uint8_t orc_uint8;
18 typedef uint16_t orc_uint16;
19 typedef uint32_t orc_uint32;
20 typedef uint64_t orc_uint64;
21 #define ORC_UINT64_C(x) UINT64_C(x)
22 #elif defined(_MSC_VER)
23 typedef signed __int8 orc_int8;
24 typedef signed __int16 orc_int16;
25 typedef signed __int32 orc_int32;
26 typedef signed __int64 orc_int64;
27 typedef unsigned __int8 orc_uint8;
28 typedef unsigned __int16 orc_uint16;
29 typedef unsigned __int32 orc_uint32;
30 typedef unsigned __int64 orc_uint64;
31 #define ORC_UINT64_C(x) (x##Ui64)
32 #define inline __inline
33 #else
34 #include <limits.h>
35 typedef signed char orc_int8;
36 typedef short orc_int16;
37 typedef int orc_int32;
38 typedef unsigned char orc_uint8;
39 typedef unsigned short orc_uint16;
40 typedef unsigned int orc_uint32;
41 #if INT_MAX == LONG_MAX
42 typedef long long orc_int64;
43 typedef unsigned long long orc_uint64;
44 #define ORC_UINT64_C(x) (x##ULL)
45 #else
46 typedef long orc_int64;
47 typedef unsigned long orc_uint64;
48 #define ORC_UINT64_C(x) (x##UL)
49 #endif
50 #endif
51 typedef union
52 {
53   orc_int16 i;
54   orc_int8 x2[2];
55 } orc_union16;
56 typedef union
57 {
58   orc_int32 i;
59   float f;
60   orc_int16 x2[2];
61   orc_int8 x4[4];
62 } orc_union32;
63 typedef union
64 {
65   orc_int64 i;
66   double f;
67   orc_int32 x2[2];
68   float x2f[2];
69   orc_int16 x4[4];
70 } orc_union64;
71 #endif
72 #ifndef ORC_RESTRICT
73 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
74 #define ORC_RESTRICT restrict
75 #elif defined(__GNUC__) && __GNUC__ >= 4
76 #define ORC_RESTRICT __restrict__
77 #else
78 #define ORC_RESTRICT
79 #endif
80 #endif
81
82 #ifndef DISABLE_ORC
83 #include <orc/orc.h>
84 #endif
85 void orc_same_parity_sad_planar_yuv (guint32 * ORC_RESTRICT a1,
86     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
87     int p2, int n);
88 void orc_same_parity_ssd_planar_yuv (guint32 * ORC_RESTRICT a1,
89     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
90     int p2, int n);
91 void orc_same_parity_3_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
92     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
93     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
94     const orc_uint8 * ORC_RESTRICT s5, const orc_uint8 * ORC_RESTRICT s6,
95     int p2, int n);
96 void orc_opposite_parity_5_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
97     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
98     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
99     const orc_uint8 * ORC_RESTRICT s5, int p2, int n);
100
101
102 /* begin Orc C target preamble */
103 #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
104 #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
105 #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
106 #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
107 #define ORC_SB_MAX 127
108 #define ORC_SB_MIN (-1-ORC_SB_MAX)
109 #define ORC_UB_MAX 255
110 #define ORC_UB_MIN 0
111 #define ORC_SW_MAX 32767
112 #define ORC_SW_MIN (-1-ORC_SW_MAX)
113 #define ORC_UW_MAX 65535
114 #define ORC_UW_MIN 0
115 #define ORC_SL_MAX 2147483647
116 #define ORC_SL_MIN (-1-ORC_SL_MAX)
117 #define ORC_UL_MAX 4294967295U
118 #define ORC_UL_MIN 0
119 #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
120 #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
121 #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
122 #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
123 #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
124 #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
125 #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
126 #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
127 #define ORC_SWAP_Q(x) ((((x)&ORC_UINT64_C(0xff))<<56) | (((x)&ORC_UINT64_C(0xff00))<<40) | (((x)&ORC_UINT64_C(0xff0000))<<24) | (((x)&ORC_UINT64_C(0xff000000))<<8) | (((x)&ORC_UINT64_C(0xff00000000))>>8) | (((x)&ORC_UINT64_C(0xff0000000000))>>24) | (((x)&ORC_UINT64_C(0xff000000000000))>>40) | (((x)&ORC_UINT64_C(0xff00000000000000))>>56))
128 #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
129 #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
130 #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
131 #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
132 #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
133 #ifndef ORC_RESTRICT
134 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
135 #define ORC_RESTRICT restrict
136 #elif defined(__GNUC__) && __GNUC__ >= 4
137 #define ORC_RESTRICT __restrict__
138 #else
139 #define ORC_RESTRICT
140 #endif
141 #endif
142 /* end Orc C target preamble */
143
144
145
146 /* orc_same_parity_sad_planar_yuv */
147 #ifdef DISABLE_ORC
148 void
149 orc_same_parity_sad_planar_yuv (guint32 * ORC_RESTRICT a1,
150     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
151     int p2, int n)
152 {
153   int i;
154   const orc_int8 *ORC_RESTRICT ptr4;
155   const orc_int8 *ORC_RESTRICT ptr5;
156   orc_union32 var12 = { 0 };
157   orc_int8 var36;
158   orc_int8 var37;
159   orc_union32 var38;
160   orc_union16 var39;
161   orc_union16 var40;
162   orc_union16 var41;
163   orc_union16 var42;
164   orc_union32 var43;
165   orc_union32 var44;
166   orc_union32 var45;
167
168   ptr4 = (orc_int8 *) s1;
169   ptr5 = (orc_int8 *) s2;
170
171   /* 7: loadpl */
172   var38.i = p2;
173
174   for (i = 0; i < n; i++) {
175     /* 0: loadb */
176     var36 = ptr4[i];
177     /* 1: convubw */
178     var39.i = (orc_uint8) var36;
179     /* 2: loadb */
180     var37 = ptr5[i];
181     /* 3: convubw */
182     var40.i = (orc_uint8) var37;
183     /* 4: subw */
184     var41.i = var39.i - var40.i;
185     /* 5: absw */
186     var42.i = ORC_ABS (var41.i);
187     /* 6: convuwl */
188     var43.i = (orc_uint16) var42.i;
189     /* 8: cmpgtsl */
190     var44.i = (var43.i > var38.i) ? (~0) : 0;
191     /* 9: andl */
192     var45.i = var43.i & var44.i;
193     /* 10: accl */
194     var12.i = var12.i + var45.i;
195   }
196   *a1 = var12.i;
197
198 }
199
200 #else
201 static void
202 _backup_orc_same_parity_sad_planar_yuv (OrcExecutor * ORC_RESTRICT ex)
203 {
204   int i;
205   int n = ex->n;
206   const orc_int8 *ORC_RESTRICT ptr4;
207   const orc_int8 *ORC_RESTRICT ptr5;
208   orc_union32 var12 = { 0 };
209   orc_int8 var36;
210   orc_int8 var37;
211   orc_union32 var38;
212   orc_union16 var39;
213   orc_union16 var40;
214   orc_union16 var41;
215   orc_union16 var42;
216   orc_union32 var43;
217   orc_union32 var44;
218   orc_union32 var45;
219
220   ptr4 = (orc_int8 *) ex->arrays[4];
221   ptr5 = (orc_int8 *) ex->arrays[5];
222
223   /* 7: loadpl */
224   var38.i = ex->params[25];
225
226   for (i = 0; i < n; i++) {
227     /* 0: loadb */
228     var36 = ptr4[i];
229     /* 1: convubw */
230     var39.i = (orc_uint8) var36;
231     /* 2: loadb */
232     var37 = ptr5[i];
233     /* 3: convubw */
234     var40.i = (orc_uint8) var37;
235     /* 4: subw */
236     var41.i = var39.i - var40.i;
237     /* 5: absw */
238     var42.i = ORC_ABS (var41.i);
239     /* 6: convuwl */
240     var43.i = (orc_uint16) var42.i;
241     /* 8: cmpgtsl */
242     var44.i = (var43.i > var38.i) ? (~0) : 0;
243     /* 9: andl */
244     var45.i = var43.i & var44.i;
245     /* 10: accl */
246     var12.i = var12.i + var45.i;
247   }
248   ex->accumulators[0] = var12.i;
249
250 }
251
252 void
253 orc_same_parity_sad_planar_yuv (guint32 * ORC_RESTRICT a1,
254     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
255     int p2, int n)
256 {
257   OrcExecutor _ex, *ex = &_ex;
258   static volatile int p_inited = 0;
259   static OrcProgram *p = 0;
260   void (*func) (OrcExecutor *);
261
262   if (!p_inited) {
263     orc_once_mutex_lock ();
264     if (!p_inited) {
265
266       p = orc_program_new ();
267       orc_program_set_name (p, "orc_same_parity_sad_planar_yuv");
268       orc_program_set_backup_function (p,
269           _backup_orc_same_parity_sad_planar_yuv);
270       orc_program_add_source (p, 1, "s1");
271       orc_program_add_source (p, 1, "s2");
272       orc_program_add_accumulator (p, 4, "a1");
273       orc_program_add_parameter (p, 4, "p2");
274       orc_program_add_temporary (p, 2, "t1");
275       orc_program_add_temporary (p, 2, "t2");
276       orc_program_add_temporary (p, 4, "t3");
277       orc_program_add_temporary (p, 4, "t4");
278
279       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
280           ORC_VAR_D1);
281       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
282           ORC_VAR_D1);
283       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
284           ORC_VAR_D1);
285       orc_program_append_2 (p, "absw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
286           ORC_VAR_D1);
287       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_D1,
288           ORC_VAR_D1);
289       orc_program_append_2 (p, "cmpgtsl", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2,
290           ORC_VAR_D1);
291       orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
292           ORC_VAR_D1);
293       orc_program_append_2 (p, "accl", 0, ORC_VAR_A1, ORC_VAR_T3, ORC_VAR_D1,
294           ORC_VAR_D1);
295
296       orc_program_compile (p);
297     }
298     p_inited = TRUE;
299     orc_once_mutex_unlock ();
300   }
301   ex->program = p;
302
303   ex->n = n;
304   ex->arrays[ORC_VAR_S1] = (void *) s1;
305   ex->arrays[ORC_VAR_S2] = (void *) s2;
306   ex->params[ORC_VAR_P2] = p2;
307
308   func = p->code_exec;
309   func (ex);
310   *a1 = orc_executor_get_accumulator (ex, ORC_VAR_A1);
311 }
312 #endif
313
314
315 /* orc_same_parity_ssd_planar_yuv */
316 #ifdef DISABLE_ORC
317 void
318 orc_same_parity_ssd_planar_yuv (guint32 * ORC_RESTRICT a1,
319     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
320     int p2, int n)
321 {
322   int i;
323   const orc_int8 *ORC_RESTRICT ptr4;
324   const orc_int8 *ORC_RESTRICT ptr5;
325   orc_union32 var12 = { 0 };
326   orc_int8 var36;
327   orc_int8 var37;
328   orc_union32 var38;
329   orc_union16 var39;
330   orc_union16 var40;
331   orc_union16 var41;
332   orc_union32 var42;
333   orc_union32 var43;
334   orc_union32 var44;
335
336   ptr4 = (orc_int8 *) s1;
337   ptr5 = (orc_int8 *) s2;
338
339   /* 6: loadpl */
340   var38.i = p2;
341
342   for (i = 0; i < n; i++) {
343     /* 0: loadb */
344     var36 = ptr4[i];
345     /* 1: convubw */
346     var39.i = (orc_uint8) var36;
347     /* 2: loadb */
348     var37 = ptr5[i];
349     /* 3: convubw */
350     var40.i = (orc_uint8) var37;
351     /* 4: subw */
352     var41.i = var39.i - var40.i;
353     /* 5: mulswl */
354     var42.i = var41.i * var41.i;
355     /* 7: cmpgtsl */
356     var43.i = (var42.i > var38.i) ? (~0) : 0;
357     /* 8: andl */
358     var44.i = var42.i & var43.i;
359     /* 9: accl */
360     var12.i = var12.i + var44.i;
361   }
362   *a1 = var12.i;
363
364 }
365
366 #else
367 static void
368 _backup_orc_same_parity_ssd_planar_yuv (OrcExecutor * ORC_RESTRICT ex)
369 {
370   int i;
371   int n = ex->n;
372   const orc_int8 *ORC_RESTRICT ptr4;
373   const orc_int8 *ORC_RESTRICT ptr5;
374   orc_union32 var12 = { 0 };
375   orc_int8 var36;
376   orc_int8 var37;
377   orc_union32 var38;
378   orc_union16 var39;
379   orc_union16 var40;
380   orc_union16 var41;
381   orc_union32 var42;
382   orc_union32 var43;
383   orc_union32 var44;
384
385   ptr4 = (orc_int8 *) ex->arrays[4];
386   ptr5 = (orc_int8 *) ex->arrays[5];
387
388   /* 6: loadpl */
389   var38.i = ex->params[25];
390
391   for (i = 0; i < n; i++) {
392     /* 0: loadb */
393     var36 = ptr4[i];
394     /* 1: convubw */
395     var39.i = (orc_uint8) var36;
396     /* 2: loadb */
397     var37 = ptr5[i];
398     /* 3: convubw */
399     var40.i = (orc_uint8) var37;
400     /* 4: subw */
401     var41.i = var39.i - var40.i;
402     /* 5: mulswl */
403     var42.i = var41.i * var41.i;
404     /* 7: cmpgtsl */
405     var43.i = (var42.i > var38.i) ? (~0) : 0;
406     /* 8: andl */
407     var44.i = var42.i & var43.i;
408     /* 9: accl */
409     var12.i = var12.i + var44.i;
410   }
411   ex->accumulators[0] = var12.i;
412
413 }
414
415 void
416 orc_same_parity_ssd_planar_yuv (guint32 * ORC_RESTRICT a1,
417     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
418     int p2, int n)
419 {
420   OrcExecutor _ex, *ex = &_ex;
421   static volatile int p_inited = 0;
422   static OrcProgram *p = 0;
423   void (*func) (OrcExecutor *);
424
425   if (!p_inited) {
426     orc_once_mutex_lock ();
427     if (!p_inited) {
428
429       p = orc_program_new ();
430       orc_program_set_name (p, "orc_same_parity_ssd_planar_yuv");
431       orc_program_set_backup_function (p,
432           _backup_orc_same_parity_ssd_planar_yuv);
433       orc_program_add_source (p, 1, "s1");
434       orc_program_add_source (p, 1, "s2");
435       orc_program_add_accumulator (p, 4, "a1");
436       orc_program_add_parameter (p, 4, "p2");
437       orc_program_add_temporary (p, 2, "t1");
438       orc_program_add_temporary (p, 2, "t2");
439       orc_program_add_temporary (p, 4, "t3");
440       orc_program_add_temporary (p, 4, "t4");
441
442       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
443           ORC_VAR_D1);
444       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
445           ORC_VAR_D1);
446       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
447           ORC_VAR_D1);
448       orc_program_append_2 (p, "mulswl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
449           ORC_VAR_D1);
450       orc_program_append_2 (p, "cmpgtsl", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_P2,
451           ORC_VAR_D1);
452       orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
453           ORC_VAR_D1);
454       orc_program_append_2 (p, "accl", 0, ORC_VAR_A1, ORC_VAR_T3, ORC_VAR_D1,
455           ORC_VAR_D1);
456
457       orc_program_compile (p);
458     }
459     p_inited = TRUE;
460     orc_once_mutex_unlock ();
461   }
462   ex->program = p;
463
464   ex->n = n;
465   ex->arrays[ORC_VAR_S1] = (void *) s1;
466   ex->arrays[ORC_VAR_S2] = (void *) s2;
467   ex->params[ORC_VAR_P2] = p2;
468
469   func = p->code_exec;
470   func (ex);
471   *a1 = orc_executor_get_accumulator (ex, ORC_VAR_A1);
472 }
473 #endif
474
475
476 /* orc_same_parity_3_tap_planar_yuv */
477 #ifdef DISABLE_ORC
478 void
479 orc_same_parity_3_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
480     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
481     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
482     const orc_uint8 * ORC_RESTRICT s5, const orc_uint8 * ORC_RESTRICT s6,
483     int p2, int n)
484 {
485   int i;
486   const orc_int8 *ORC_RESTRICT ptr4;
487   const orc_int8 *ORC_RESTRICT ptr5;
488   const orc_int8 *ORC_RESTRICT ptr6;
489   const orc_int8 *ORC_RESTRICT ptr7;
490   const orc_int8 *ORC_RESTRICT ptr8;
491   const orc_int8 *ORC_RESTRICT ptr9;
492   orc_union32 var12 = { 0 };
493   orc_int8 var40;
494   orc_int8 var41;
495   orc_int8 var42;
496   orc_int8 var43;
497   orc_int8 var44;
498   orc_int8 var45;
499   orc_union32 var46;
500   orc_union16 var47;
501   orc_union16 var48;
502   orc_union16 var49;
503   orc_union16 var50;
504   orc_union16 var51;
505   orc_union16 var52;
506   orc_union16 var53;
507   orc_union16 var54;
508   orc_union16 var55;
509   orc_union16 var56;
510   orc_union16 var57;
511   orc_union16 var58;
512   orc_union16 var59;
513   orc_union16 var60;
514   orc_union32 var61;
515   orc_union32 var62;
516   orc_union32 var63;
517
518   ptr4 = (orc_int8 *) s1;
519   ptr5 = (orc_int8 *) s2;
520   ptr6 = (orc_int8 *) s3;
521   ptr7 = (orc_int8 *) s4;
522   ptr8 = (orc_int8 *) s5;
523   ptr9 = (orc_int8 *) s6;
524
525   /* 21: loadpl */
526   var46.i = p2;
527
528   for (i = 0; i < n; i++) {
529     /* 0: loadb */
530     var40 = ptr4[i];
531     /* 1: convubw */
532     var47.i = (orc_uint8) var40;
533     /* 2: loadb */
534     var41 = ptr5[i];
535     /* 3: convubw */
536     var48.i = (orc_uint8) var41;
537     /* 4: loadb */
538     var42 = ptr6[i];
539     /* 5: convubw */
540     var49.i = (orc_uint8) var42;
541     /* 6: loadb */
542     var43 = ptr7[i];
543     /* 7: convubw */
544     var50.i = (orc_uint8) var43;
545     /* 8: loadb */
546     var44 = ptr8[i];
547     /* 9: convubw */
548     var51.i = (orc_uint8) var44;
549     /* 10: loadb */
550     var45 = ptr9[i];
551     /* 11: convubw */
552     var52.i = (orc_uint8) var45;
553     /* 12: shlw */
554     var53.i = var48.i << 2;
555     /* 13: shlw */
556     var54.i = var51.i << 2;
557     /* 14: addw */
558     var55.i = var47.i + var53.i;
559     /* 15: addw */
560     var56.i = var55.i + var49.i;
561     /* 16: addw */
562     var57.i = var50.i + var54.i;
563     /* 17: addw */
564     var58.i = var57.i + var52.i;
565     /* 18: subw */
566     var59.i = var56.i - var58.i;
567     /* 19: absw */
568     var60.i = ORC_ABS (var59.i);
569     /* 20: convuwl */
570     var61.i = (orc_uint16) var60.i;
571     /* 22: cmpgtsl */
572     var62.i = (var61.i > var46.i) ? (~0) : 0;
573     /* 23: andl */
574     var63.i = var61.i & var62.i;
575     /* 24: accl */
576     var12.i = var12.i + var63.i;
577   }
578   *a1 = var12.i;
579
580 }
581
582 #else
583 static void
584 _backup_orc_same_parity_3_tap_planar_yuv (OrcExecutor * ORC_RESTRICT ex)
585 {
586   int i;
587   int n = ex->n;
588   const orc_int8 *ORC_RESTRICT ptr4;
589   const orc_int8 *ORC_RESTRICT ptr5;
590   const orc_int8 *ORC_RESTRICT ptr6;
591   const orc_int8 *ORC_RESTRICT ptr7;
592   const orc_int8 *ORC_RESTRICT ptr8;
593   const orc_int8 *ORC_RESTRICT ptr9;
594   orc_union32 var12 = { 0 };
595   orc_int8 var40;
596   orc_int8 var41;
597   orc_int8 var42;
598   orc_int8 var43;
599   orc_int8 var44;
600   orc_int8 var45;
601   orc_union32 var46;
602   orc_union16 var47;
603   orc_union16 var48;
604   orc_union16 var49;
605   orc_union16 var50;
606   orc_union16 var51;
607   orc_union16 var52;
608   orc_union16 var53;
609   orc_union16 var54;
610   orc_union16 var55;
611   orc_union16 var56;
612   orc_union16 var57;
613   orc_union16 var58;
614   orc_union16 var59;
615   orc_union16 var60;
616   orc_union32 var61;
617   orc_union32 var62;
618   orc_union32 var63;
619
620   ptr4 = (orc_int8 *) ex->arrays[4];
621   ptr5 = (orc_int8 *) ex->arrays[5];
622   ptr6 = (orc_int8 *) ex->arrays[6];
623   ptr7 = (orc_int8 *) ex->arrays[7];
624   ptr8 = (orc_int8 *) ex->arrays[8];
625   ptr9 = (orc_int8 *) ex->arrays[9];
626
627   /* 21: loadpl */
628   var46.i = ex->params[25];
629
630   for (i = 0; i < n; i++) {
631     /* 0: loadb */
632     var40 = ptr4[i];
633     /* 1: convubw */
634     var47.i = (orc_uint8) var40;
635     /* 2: loadb */
636     var41 = ptr5[i];
637     /* 3: convubw */
638     var48.i = (orc_uint8) var41;
639     /* 4: loadb */
640     var42 = ptr6[i];
641     /* 5: convubw */
642     var49.i = (orc_uint8) var42;
643     /* 6: loadb */
644     var43 = ptr7[i];
645     /* 7: convubw */
646     var50.i = (orc_uint8) var43;
647     /* 8: loadb */
648     var44 = ptr8[i];
649     /* 9: convubw */
650     var51.i = (orc_uint8) var44;
651     /* 10: loadb */
652     var45 = ptr9[i];
653     /* 11: convubw */
654     var52.i = (orc_uint8) var45;
655     /* 12: shlw */
656     var53.i = var48.i << 2;
657     /* 13: shlw */
658     var54.i = var51.i << 2;
659     /* 14: addw */
660     var55.i = var47.i + var53.i;
661     /* 15: addw */
662     var56.i = var55.i + var49.i;
663     /* 16: addw */
664     var57.i = var50.i + var54.i;
665     /* 17: addw */
666     var58.i = var57.i + var52.i;
667     /* 18: subw */
668     var59.i = var56.i - var58.i;
669     /* 19: absw */
670     var60.i = ORC_ABS (var59.i);
671     /* 20: convuwl */
672     var61.i = (orc_uint16) var60.i;
673     /* 22: cmpgtsl */
674     var62.i = (var61.i > var46.i) ? (~0) : 0;
675     /* 23: andl */
676     var63.i = var61.i & var62.i;
677     /* 24: accl */
678     var12.i = var12.i + var63.i;
679   }
680   ex->accumulators[0] = var12.i;
681
682 }
683
684 void
685 orc_same_parity_3_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
686     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
687     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
688     const orc_uint8 * ORC_RESTRICT s5, const orc_uint8 * ORC_RESTRICT s6,
689     int p2, int n)
690 {
691   OrcExecutor _ex, *ex = &_ex;
692   static volatile int p_inited = 0;
693   static OrcProgram *p = 0;
694   void (*func) (OrcExecutor *);
695
696   if (!p_inited) {
697     orc_once_mutex_lock ();
698     if (!p_inited) {
699
700       p = orc_program_new ();
701       orc_program_set_name (p, "orc_same_parity_3_tap_planar_yuv");
702       orc_program_set_backup_function (p,
703           _backup_orc_same_parity_3_tap_planar_yuv);
704       orc_program_add_source (p, 1, "s1");
705       orc_program_add_source (p, 1, "s2");
706       orc_program_add_source (p, 1, "s3");
707       orc_program_add_source (p, 1, "s4");
708       orc_program_add_source (p, 1, "s5");
709       orc_program_add_source (p, 1, "s6");
710       orc_program_add_accumulator (p, 4, "a1");
711       orc_program_add_constant (p, 4, 0x00000002, "c1");
712       orc_program_add_parameter (p, 4, "p2");
713       orc_program_add_temporary (p, 2, "t1");
714       orc_program_add_temporary (p, 2, "t2");
715       orc_program_add_temporary (p, 2, "t3");
716       orc_program_add_temporary (p, 2, "t4");
717       orc_program_add_temporary (p, 2, "t5");
718       orc_program_add_temporary (p, 2, "t6");
719       orc_program_add_temporary (p, 4, "t7");
720       orc_program_add_temporary (p, 4, "t8");
721
722       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
723           ORC_VAR_D1);
724       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
725           ORC_VAR_D1);
726       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
727           ORC_VAR_D1);
728       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
729           ORC_VAR_D1);
730       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T5, ORC_VAR_S5, ORC_VAR_D1,
731           ORC_VAR_D1);
732       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T6, ORC_VAR_S6, ORC_VAR_D1,
733           ORC_VAR_D1);
734       orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
735           ORC_VAR_D1);
736       orc_program_append_2 (p, "shlw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1,
737           ORC_VAR_D1);
738       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
739           ORC_VAR_D1);
740       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
741           ORC_VAR_D1);
742       orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
743           ORC_VAR_D1);
744       orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T6,
745           ORC_VAR_D1);
746       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T4,
747           ORC_VAR_D1);
748       orc_program_append_2 (p, "absw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
749           ORC_VAR_D1);
750       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_D1,
751           ORC_VAR_D1);
752       orc_program_append_2 (p, "cmpgtsl", 0, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_P2,
753           ORC_VAR_D1);
754       orc_program_append_2 (p, "andl", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8,
755           ORC_VAR_D1);
756       orc_program_append_2 (p, "accl", 0, ORC_VAR_A1, ORC_VAR_T7, ORC_VAR_D1,
757           ORC_VAR_D1);
758
759       orc_program_compile (p);
760     }
761     p_inited = TRUE;
762     orc_once_mutex_unlock ();
763   }
764   ex->program = p;
765
766   ex->n = n;
767   ex->arrays[ORC_VAR_S1] = (void *) s1;
768   ex->arrays[ORC_VAR_S2] = (void *) s2;
769   ex->arrays[ORC_VAR_S3] = (void *) s3;
770   ex->arrays[ORC_VAR_S4] = (void *) s4;
771   ex->arrays[ORC_VAR_S5] = (void *) s5;
772   ex->arrays[ORC_VAR_S6] = (void *) s6;
773   ex->params[ORC_VAR_P2] = p2;
774
775   func = p->code_exec;
776   func (ex);
777   *a1 = orc_executor_get_accumulator (ex, ORC_VAR_A1);
778 }
779 #endif
780
781
782 /* orc_opposite_parity_5_tap_planar_yuv */
783 #ifdef DISABLE_ORC
784 void
785 orc_opposite_parity_5_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
786     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
787     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
788     const orc_uint8 * ORC_RESTRICT s5, int p2, int n)
789 {
790   int i;
791   const orc_int8 *ORC_RESTRICT ptr4;
792   const orc_int8 *ORC_RESTRICT ptr5;
793   const orc_int8 *ORC_RESTRICT ptr6;
794   const orc_int8 *ORC_RESTRICT ptr7;
795   const orc_int8 *ORC_RESTRICT ptr8;
796   orc_union32 var12 = { 0 };
797   orc_int8 var39;
798   orc_int8 var40;
799   orc_int8 var41;
800   orc_int8 var42;
801   orc_int8 var43;
802   orc_union16 var44;
803   orc_union16 var45;
804   orc_union32 var46;
805   orc_union16 var47;
806   orc_union16 var48;
807   orc_union16 var49;
808   orc_union16 var50;
809   orc_union16 var51;
810   orc_union16 var52;
811   orc_union16 var53;
812   orc_union16 var54;
813   orc_union16 var55;
814   orc_union16 var56;
815   orc_union16 var57;
816   orc_union16 var58;
817   orc_union16 var59;
818   orc_union32 var60;
819   orc_union32 var61;
820   orc_union32 var62;
821
822   ptr4 = (orc_int8 *) s1;
823   ptr5 = (orc_int8 *) s2;
824   ptr6 = (orc_int8 *) s3;
825   ptr7 = (orc_int8 *) s4;
826   ptr8 = (orc_int8 *) s5;
827
828   /* 11: loadpw */
829   var44.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
830   /* 13: loadpw */
831   var45.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
832   /* 21: loadpl */
833   var46.i = p2;
834
835   for (i = 0; i < n; i++) {
836     /* 0: loadb */
837     var39 = ptr4[i];
838     /* 1: convubw */
839     var47.i = (orc_uint8) var39;
840     /* 2: loadb */
841     var40 = ptr5[i];
842     /* 3: convubw */
843     var48.i = (orc_uint8) var40;
844     /* 4: loadb */
845     var41 = ptr6[i];
846     /* 5: convubw */
847     var49.i = (orc_uint8) var41;
848     /* 6: loadb */
849     var42 = ptr7[i];
850     /* 7: convubw */
851     var50.i = (orc_uint8) var42;
852     /* 8: loadb */
853     var43 = ptr8[i];
854     /* 9: convubw */
855     var51.i = (orc_uint8) var43;
856     /* 10: shlw */
857     var52.i = var49.i << 2;
858     /* 12: mullw */
859     var53.i = (var48.i * var44.i) & 0xffff;
860     /* 14: mullw */
861     var54.i = (var50.i * var45.i) & 0xffff;
862     /* 15: subw */
863     var55.i = var47.i - var53.i;
864     /* 16: addw */
865     var56.i = var55.i + var52.i;
866     /* 17: subw */
867     var57.i = var56.i - var54.i;
868     /* 18: addw */
869     var58.i = var57.i + var51.i;
870     /* 19: absw */
871     var59.i = ORC_ABS (var58.i);
872     /* 20: convuwl */
873     var60.i = (orc_uint16) var59.i;
874     /* 22: cmpgtsl */
875     var61.i = (var60.i > var46.i) ? (~0) : 0;
876     /* 23: andl */
877     var62.i = var60.i & var61.i;
878     /* 24: accl */
879     var12.i = var12.i + var62.i;
880   }
881   *a1 = var12.i;
882
883 }
884
885 #else
886 static void
887 _backup_orc_opposite_parity_5_tap_planar_yuv (OrcExecutor * ORC_RESTRICT ex)
888 {
889   int i;
890   int n = ex->n;
891   const orc_int8 *ORC_RESTRICT ptr4;
892   const orc_int8 *ORC_RESTRICT ptr5;
893   const orc_int8 *ORC_RESTRICT ptr6;
894   const orc_int8 *ORC_RESTRICT ptr7;
895   const orc_int8 *ORC_RESTRICT ptr8;
896   orc_union32 var12 = { 0 };
897   orc_int8 var39;
898   orc_int8 var40;
899   orc_int8 var41;
900   orc_int8 var42;
901   orc_int8 var43;
902   orc_union16 var44;
903   orc_union16 var45;
904   orc_union32 var46;
905   orc_union16 var47;
906   orc_union16 var48;
907   orc_union16 var49;
908   orc_union16 var50;
909   orc_union16 var51;
910   orc_union16 var52;
911   orc_union16 var53;
912   orc_union16 var54;
913   orc_union16 var55;
914   orc_union16 var56;
915   orc_union16 var57;
916   orc_union16 var58;
917   orc_union16 var59;
918   orc_union32 var60;
919   orc_union32 var61;
920   orc_union32 var62;
921
922   ptr4 = (orc_int8 *) ex->arrays[4];
923   ptr5 = (orc_int8 *) ex->arrays[5];
924   ptr6 = (orc_int8 *) ex->arrays[6];
925   ptr7 = (orc_int8 *) ex->arrays[7];
926   ptr8 = (orc_int8 *) ex->arrays[8];
927
928   /* 11: loadpw */
929   var44.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
930   /* 13: loadpw */
931   var45.i = (int) 0x00000003;   /* 3 or 1.4822e-323f */
932   /* 21: loadpl */
933   var46.i = ex->params[25];
934
935   for (i = 0; i < n; i++) {
936     /* 0: loadb */
937     var39 = ptr4[i];
938     /* 1: convubw */
939     var47.i = (orc_uint8) var39;
940     /* 2: loadb */
941     var40 = ptr5[i];
942     /* 3: convubw */
943     var48.i = (orc_uint8) var40;
944     /* 4: loadb */
945     var41 = ptr6[i];
946     /* 5: convubw */
947     var49.i = (orc_uint8) var41;
948     /* 6: loadb */
949     var42 = ptr7[i];
950     /* 7: convubw */
951     var50.i = (orc_uint8) var42;
952     /* 8: loadb */
953     var43 = ptr8[i];
954     /* 9: convubw */
955     var51.i = (orc_uint8) var43;
956     /* 10: shlw */
957     var52.i = var49.i << 2;
958     /* 12: mullw */
959     var53.i = (var48.i * var44.i) & 0xffff;
960     /* 14: mullw */
961     var54.i = (var50.i * var45.i) & 0xffff;
962     /* 15: subw */
963     var55.i = var47.i - var53.i;
964     /* 16: addw */
965     var56.i = var55.i + var52.i;
966     /* 17: subw */
967     var57.i = var56.i - var54.i;
968     /* 18: addw */
969     var58.i = var57.i + var51.i;
970     /* 19: absw */
971     var59.i = ORC_ABS (var58.i);
972     /* 20: convuwl */
973     var60.i = (orc_uint16) var59.i;
974     /* 22: cmpgtsl */
975     var61.i = (var60.i > var46.i) ? (~0) : 0;
976     /* 23: andl */
977     var62.i = var60.i & var61.i;
978     /* 24: accl */
979     var12.i = var12.i + var62.i;
980   }
981   ex->accumulators[0] = var12.i;
982
983 }
984
985 void
986 orc_opposite_parity_5_tap_planar_yuv (guint32 * ORC_RESTRICT a1,
987     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
988     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
989     const orc_uint8 * ORC_RESTRICT s5, int p2, int n)
990 {
991   OrcExecutor _ex, *ex = &_ex;
992   static volatile int p_inited = 0;
993   static OrcProgram *p = 0;
994   void (*func) (OrcExecutor *);
995
996   if (!p_inited) {
997     orc_once_mutex_lock ();
998     if (!p_inited) {
999
1000       p = orc_program_new ();
1001       orc_program_set_name (p, "orc_opposite_parity_5_tap_planar_yuv");
1002       orc_program_set_backup_function (p,
1003           _backup_orc_opposite_parity_5_tap_planar_yuv);
1004       orc_program_add_source (p, 1, "s1");
1005       orc_program_add_source (p, 1, "s2");
1006       orc_program_add_source (p, 1, "s3");
1007       orc_program_add_source (p, 1, "s4");
1008       orc_program_add_source (p, 1, "s5");
1009       orc_program_add_accumulator (p, 4, "a1");
1010       orc_program_add_constant (p, 4, 0x00000002, "c1");
1011       orc_program_add_constant (p, 4, 0x00000003, "c2");
1012       orc_program_add_parameter (p, 4, "p2");
1013       orc_program_add_temporary (p, 2, "t1");
1014       orc_program_add_temporary (p, 2, "t2");
1015       orc_program_add_temporary (p, 2, "t3");
1016       orc_program_add_temporary (p, 2, "t4");
1017       orc_program_add_temporary (p, 2, "t5");
1018       orc_program_add_temporary (p, 4, "t6");
1019       orc_program_add_temporary (p, 4, "t7");
1020
1021       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
1022           ORC_VAR_D1);
1023       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
1024           ORC_VAR_D1);
1025       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
1026           ORC_VAR_D1);
1027       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
1028           ORC_VAR_D1);
1029       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T5, ORC_VAR_S5, ORC_VAR_D1,
1030           ORC_VAR_D1);
1031       orc_program_append_2 (p, "shlw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1,
1032           ORC_VAR_D1);
1033       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
1034           ORC_VAR_D1);
1035       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C2,
1036           ORC_VAR_D1);
1037       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
1038           ORC_VAR_D1);
1039       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
1040           ORC_VAR_D1);
1041       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T4,
1042           ORC_VAR_D1);
1043       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T5,
1044           ORC_VAR_D1);
1045       orc_program_append_2 (p, "absw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_D1,
1046           ORC_VAR_D1);
1047       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_D1,
1048           ORC_VAR_D1);
1049       orc_program_append_2 (p, "cmpgtsl", 0, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_P2,
1050           ORC_VAR_D1);
1051       orc_program_append_2 (p, "andl", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T7,
1052           ORC_VAR_D1);
1053       orc_program_append_2 (p, "accl", 0, ORC_VAR_A1, ORC_VAR_T6, ORC_VAR_D1,
1054           ORC_VAR_D1);
1055
1056       orc_program_compile (p);
1057     }
1058     p_inited = TRUE;
1059     orc_once_mutex_unlock ();
1060   }
1061   ex->program = p;
1062
1063   ex->n = n;
1064   ex->arrays[ORC_VAR_S1] = (void *) s1;
1065   ex->arrays[ORC_VAR_S2] = (void *) s2;
1066   ex->arrays[ORC_VAR_S3] = (void *) s3;
1067   ex->arrays[ORC_VAR_S4] = (void *) s4;
1068   ex->arrays[ORC_VAR_S5] = (void *) s5;
1069   ex->params[ORC_VAR_P2] = p2;
1070
1071   func = p->code_exec;
1072   func (ex);
1073   *a1 = orc_executor_get_accumulator (ex, ORC_VAR_A1);
1074 }
1075 #endif