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