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