rtsprange: use gst_util_gdouble_to_guint64 in get_seconds
[platform/upstream/gstreamer.git] / gst / videoscale / gstvideoscaleorc-dist.c
1
2 /* autogenerated from gstvideoscaleorc.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 video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
86     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
87     int p1, int n);
88 void video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
89     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
90     int p1, int p2, int n);
91 void video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n);
92 void video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n);
93 void video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1,
94     int n);
95 void video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
96     const guint8 * ORC_RESTRICT s1, int n);
97 void video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
98     const guint16 * ORC_RESTRICT s1, int n);
99 void video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
100     const guint8 * ORC_RESTRICT s1, int n);
101 void video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
102     const guint8 * ORC_RESTRICT s1, int n);
103 void video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
104     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
105 void video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
106     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
107 void video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
108     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
109 void video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
110     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n);
111 void video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
112     guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
113     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
114 void video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
115     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
116     const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
117     int p2, int p3, int p4, int n);
118
119
120 /* begin Orc C target preamble */
121 #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
122 #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
123 #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
124 #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
125 #define ORC_SB_MAX 127
126 #define ORC_SB_MIN (-1-ORC_SB_MAX)
127 #define ORC_UB_MAX 255
128 #define ORC_UB_MIN 0
129 #define ORC_SW_MAX 32767
130 #define ORC_SW_MIN (-1-ORC_SW_MAX)
131 #define ORC_UW_MAX 65535
132 #define ORC_UW_MIN 0
133 #define ORC_SL_MAX 2147483647
134 #define ORC_SL_MIN (-1-ORC_SL_MAX)
135 #define ORC_UL_MAX 4294967295U
136 #define ORC_UL_MIN 0
137 #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
138 #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
139 #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
140 #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
141 #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
142 #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
143 #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
144 #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
145 #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))
146 #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
147 #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
148 #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
149 #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
150 #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
151 #ifndef ORC_RESTRICT
152 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
153 #define ORC_RESTRICT restrict
154 #elif defined(__GNUC__) && __GNUC__ >= 4
155 #define ORC_RESTRICT __restrict__
156 #else
157 #define ORC_RESTRICT
158 #endif
159 #endif
160 /* end Orc C target preamble */
161
162
163
164 /* video_scale_orc_merge_linear_u8 */
165 #ifdef DISABLE_ORC
166 void
167 video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
168     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
169     int p1, int n)
170 {
171   int i;
172   orc_int8 *ORC_RESTRICT ptr0;
173   const orc_int8 *ORC_RESTRICT ptr4;
174   const orc_int8 *ORC_RESTRICT ptr5;
175   orc_int8 var36;
176   orc_int8 var37;
177   orc_union16 var38;
178   orc_union16 var39;
179   orc_int8 var40;
180   orc_int8 var41;
181   orc_union16 var42;
182   orc_union16 var43;
183   orc_union16 var44;
184   orc_union16 var45;
185   orc_union16 var46;
186   orc_int8 var47;
187
188   ptr0 = (orc_int8 *) d1;
189   ptr4 = (orc_int8 *) s1;
190   ptr5 = (orc_int8 *) s2;
191
192   /* 6: loadpw */
193   var38.i = p1;
194   /* 8: loadpw */
195   var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
196
197   for (i = 0; i < n; i++) {
198     /* 0: loadb */
199     var41 = ptr4[i];
200     /* 1: loadb */
201     var36 = ptr4[i];
202     /* 2: convubw */
203     var42.i = (orc_uint8) var36;
204     /* 3: loadb */
205     var37 = ptr5[i];
206     /* 4: convubw */
207     var43.i = (orc_uint8) var37;
208     /* 5: subw */
209     var44.i = var43.i - var42.i;
210     /* 7: mullw */
211     var45.i = (var44.i * var38.i) & 0xffff;
212     /* 9: addw */
213     var46.i = var45.i + var39.i;
214     /* 10: convhwb */
215     var47 = ((orc_uint16) var46.i) >> 8;
216     /* 11: addb */
217     var40 = var47 + var41;
218     /* 12: storeb */
219     ptr0[i] = var40;
220   }
221
222 }
223
224 #else
225 static void
226 _backup_video_scale_orc_merge_linear_u8 (OrcExecutor * ORC_RESTRICT ex)
227 {
228   int i;
229   int n = ex->n;
230   orc_int8 *ORC_RESTRICT ptr0;
231   const orc_int8 *ORC_RESTRICT ptr4;
232   const orc_int8 *ORC_RESTRICT ptr5;
233   orc_int8 var36;
234   orc_int8 var37;
235   orc_union16 var38;
236   orc_union16 var39;
237   orc_int8 var40;
238   orc_int8 var41;
239   orc_union16 var42;
240   orc_union16 var43;
241   orc_union16 var44;
242   orc_union16 var45;
243   orc_union16 var46;
244   orc_int8 var47;
245
246   ptr0 = (orc_int8 *) ex->arrays[0];
247   ptr4 = (orc_int8 *) ex->arrays[4];
248   ptr5 = (orc_int8 *) ex->arrays[5];
249
250   /* 6: loadpw */
251   var38.i = ex->params[24];
252   /* 8: loadpw */
253   var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
254
255   for (i = 0; i < n; i++) {
256     /* 0: loadb */
257     var41 = ptr4[i];
258     /* 1: loadb */
259     var36 = ptr4[i];
260     /* 2: convubw */
261     var42.i = (orc_uint8) var36;
262     /* 3: loadb */
263     var37 = ptr5[i];
264     /* 4: convubw */
265     var43.i = (orc_uint8) var37;
266     /* 5: subw */
267     var44.i = var43.i - var42.i;
268     /* 7: mullw */
269     var45.i = (var44.i * var38.i) & 0xffff;
270     /* 9: addw */
271     var46.i = var45.i + var39.i;
272     /* 10: convhwb */
273     var47 = ((orc_uint16) var46.i) >> 8;
274     /* 11: addb */
275     var40 = var47 + var41;
276     /* 12: storeb */
277     ptr0[i] = var40;
278   }
279
280 }
281
282 void
283 video_scale_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1,
284     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
285     int p1, int n)
286 {
287   OrcExecutor _ex, *ex = &_ex;
288   static volatile int p_inited = 0;
289   static OrcCode *c = 0;
290   void (*func) (OrcExecutor *);
291
292   if (!p_inited) {
293     orc_once_mutex_lock ();
294     if (!p_inited) {
295       OrcProgram *p;
296
297       p = orc_program_new ();
298       orc_program_set_name (p, "video_scale_orc_merge_linear_u8");
299       orc_program_set_backup_function (p,
300           _backup_video_scale_orc_merge_linear_u8);
301       orc_program_add_destination (p, 1, "d1");
302       orc_program_add_source (p, 1, "s1");
303       orc_program_add_source (p, 1, "s2");
304       orc_program_add_constant (p, 4, 0x00000080, "c1");
305       orc_program_add_parameter (p, 1, "p1");
306       orc_program_add_temporary (p, 2, "t1");
307       orc_program_add_temporary (p, 2, "t2");
308       orc_program_add_temporary (p, 1, "t3");
309       orc_program_add_temporary (p, 1, "t4");
310
311       orc_program_append_2 (p, "loadb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
312           ORC_VAR_D1);
313       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
314           ORC_VAR_D1);
315       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
316           ORC_VAR_D1);
317       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
318           ORC_VAR_D1);
319       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
320           ORC_VAR_D1);
321       orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
322           ORC_VAR_D1);
323       orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_D1,
324           ORC_VAR_D1);
325       orc_program_append_2 (p, "addb", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
326           ORC_VAR_D1);
327
328       orc_program_compile (p);
329       c = orc_program_take_code (p);
330       orc_program_free (p);
331     }
332     p_inited = TRUE;
333     orc_once_mutex_unlock ();
334   }
335   ex->arrays[ORC_VAR_A2] = c;
336   ex->program = 0;
337
338   ex->n = n;
339   ex->arrays[ORC_VAR_D1] = d1;
340   ex->arrays[ORC_VAR_S1] = (void *) s1;
341   ex->arrays[ORC_VAR_S2] = (void *) s2;
342   ex->params[ORC_VAR_P1] = p1;
343
344   func = c->exec;
345   func (ex);
346 }
347 #endif
348
349
350 /* video_scale_orc_merge_linear_u16 */
351 #ifdef DISABLE_ORC
352 void
353 video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
354     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
355     int p1, int p2, int n)
356 {
357   int i;
358   orc_union16 *ORC_RESTRICT ptr0;
359   const orc_union16 *ORC_RESTRICT ptr4;
360   const orc_union16 *ORC_RESTRICT ptr5;
361   orc_union16 var34;
362   orc_union16 var35;
363   orc_union16 var36;
364   orc_union16 var37;
365   orc_union16 var38;
366   orc_union32 var39;
367   orc_union32 var40;
368   orc_union32 var41;
369   orc_union32 var42;
370
371   ptr0 = (orc_union16 *) d1;
372   ptr4 = (orc_union16 *) s1;
373   ptr5 = (orc_union16 *) s2;
374
375   /* 1: loadpw */
376   var35.i = p1;
377   /* 4: loadpw */
378   var37.i = p2;
379
380   for (i = 0; i < n; i++) {
381     /* 0: loadw */
382     var34 = ptr4[i];
383     /* 2: muluwl */
384     var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i);
385     /* 3: loadw */
386     var36 = ptr5[i];
387     /* 5: muluwl */
388     var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i);
389     /* 6: addl */
390     var41.i = var39.i + var40.i;
391     /* 7: shrul */
392     var42.i = ((orc_uint32) var41.i) >> 16;
393     /* 8: convlw */
394     var38.i = var42.i;
395     /* 9: storew */
396     ptr0[i] = var38;
397   }
398
399 }
400
401 #else
402 static void
403 _backup_video_scale_orc_merge_linear_u16 (OrcExecutor * ORC_RESTRICT ex)
404 {
405   int i;
406   int n = ex->n;
407   orc_union16 *ORC_RESTRICT ptr0;
408   const orc_union16 *ORC_RESTRICT ptr4;
409   const orc_union16 *ORC_RESTRICT ptr5;
410   orc_union16 var34;
411   orc_union16 var35;
412   orc_union16 var36;
413   orc_union16 var37;
414   orc_union16 var38;
415   orc_union32 var39;
416   orc_union32 var40;
417   orc_union32 var41;
418   orc_union32 var42;
419
420   ptr0 = (orc_union16 *) ex->arrays[0];
421   ptr4 = (orc_union16 *) ex->arrays[4];
422   ptr5 = (orc_union16 *) ex->arrays[5];
423
424   /* 1: loadpw */
425   var35.i = ex->params[24];
426   /* 4: loadpw */
427   var37.i = ex->params[25];
428
429   for (i = 0; i < n; i++) {
430     /* 0: loadw */
431     var34 = ptr4[i];
432     /* 2: muluwl */
433     var39.i = ((orc_uint16) var34.i) * ((orc_uint16) var35.i);
434     /* 3: loadw */
435     var36 = ptr5[i];
436     /* 5: muluwl */
437     var40.i = ((orc_uint16) var36.i) * ((orc_uint16) var37.i);
438     /* 6: addl */
439     var41.i = var39.i + var40.i;
440     /* 7: shrul */
441     var42.i = ((orc_uint32) var41.i) >> 16;
442     /* 8: convlw */
443     var38.i = var42.i;
444     /* 9: storew */
445     ptr0[i] = var38;
446   }
447
448 }
449
450 void
451 video_scale_orc_merge_linear_u16 (orc_uint16 * ORC_RESTRICT d1,
452     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
453     int p1, int p2, int n)
454 {
455   OrcExecutor _ex, *ex = &_ex;
456   static volatile int p_inited = 0;
457   static OrcCode *c = 0;
458   void (*func) (OrcExecutor *);
459
460   if (!p_inited) {
461     orc_once_mutex_lock ();
462     if (!p_inited) {
463       OrcProgram *p;
464
465       p = orc_program_new ();
466       orc_program_set_name (p, "video_scale_orc_merge_linear_u16");
467       orc_program_set_backup_function (p,
468           _backup_video_scale_orc_merge_linear_u16);
469       orc_program_add_destination (p, 2, "d1");
470       orc_program_add_source (p, 2, "s1");
471       orc_program_add_source (p, 2, "s2");
472       orc_program_add_constant (p, 4, 0x00000010, "c1");
473       orc_program_add_parameter (p, 2, "p1");
474       orc_program_add_parameter (p, 2, "p2");
475       orc_program_add_temporary (p, 4, "t1");
476       orc_program_add_temporary (p, 4, "t2");
477
478       orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_P1,
479           ORC_VAR_D1);
480       orc_program_append_2 (p, "muluwl", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_P2,
481           ORC_VAR_D1);
482       orc_program_append_2 (p, "addl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
483           ORC_VAR_D1);
484       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
485           ORC_VAR_D1);
486       orc_program_append_2 (p, "convlw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
487           ORC_VAR_D1);
488
489       orc_program_compile (p);
490       c = orc_program_take_code (p);
491       orc_program_free (p);
492     }
493     p_inited = TRUE;
494     orc_once_mutex_unlock ();
495   }
496   ex->arrays[ORC_VAR_A2] = c;
497   ex->program = 0;
498
499   ex->n = n;
500   ex->arrays[ORC_VAR_D1] = d1;
501   ex->arrays[ORC_VAR_S1] = (void *) s1;
502   ex->arrays[ORC_VAR_S2] = (void *) s2;
503   ex->params[ORC_VAR_P1] = p1;
504   ex->params[ORC_VAR_P2] = p2;
505
506   func = c->exec;
507   func (ex);
508 }
509 #endif
510
511
512 /* video_scale_orc_splat_u16 */
513 #ifdef DISABLE_ORC
514 void
515 video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
516 {
517   int i;
518   orc_union16 *ORC_RESTRICT ptr0;
519   orc_union16 var32;
520   orc_union16 var33;
521
522   ptr0 = (orc_union16 *) d1;
523
524   /* 0: loadpw */
525   var32.i = p1;
526
527   for (i = 0; i < n; i++) {
528     /* 1: copyw */
529     var33.i = var32.i;
530     /* 2: storew */
531     ptr0[i] = var33;
532   }
533
534 }
535
536 #else
537 static void
538 _backup_video_scale_orc_splat_u16 (OrcExecutor * ORC_RESTRICT ex)
539 {
540   int i;
541   int n = ex->n;
542   orc_union16 *ORC_RESTRICT ptr0;
543   orc_union16 var32;
544   orc_union16 var33;
545
546   ptr0 = (orc_union16 *) ex->arrays[0];
547
548   /* 0: loadpw */
549   var32.i = ex->params[24];
550
551   for (i = 0; i < n; i++) {
552     /* 1: copyw */
553     var33.i = var32.i;
554     /* 2: storew */
555     ptr0[i] = var33;
556   }
557
558 }
559
560 void
561 video_scale_orc_splat_u16 (orc_uint16 * ORC_RESTRICT d1, int p1, int n)
562 {
563   OrcExecutor _ex, *ex = &_ex;
564   static volatile int p_inited = 0;
565   static OrcCode *c = 0;
566   void (*func) (OrcExecutor *);
567
568   if (!p_inited) {
569     orc_once_mutex_lock ();
570     if (!p_inited) {
571       OrcProgram *p;
572
573       p = orc_program_new ();
574       orc_program_set_name (p, "video_scale_orc_splat_u16");
575       orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u16);
576       orc_program_add_destination (p, 2, "d1");
577       orc_program_add_parameter (p, 2, "p1");
578
579       orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
580           ORC_VAR_D1);
581
582       orc_program_compile (p);
583       c = orc_program_take_code (p);
584       orc_program_free (p);
585     }
586     p_inited = TRUE;
587     orc_once_mutex_unlock ();
588   }
589   ex->arrays[ORC_VAR_A2] = c;
590   ex->program = 0;
591
592   ex->n = n;
593   ex->arrays[ORC_VAR_D1] = d1;
594   ex->params[ORC_VAR_P1] = p1;
595
596   func = c->exec;
597   func (ex);
598 }
599 #endif
600
601
602 /* video_scale_orc_splat_u32 */
603 #ifdef DISABLE_ORC
604 void
605 video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
606 {
607   int i;
608   orc_union32 *ORC_RESTRICT ptr0;
609   orc_union32 var32;
610   orc_union32 var33;
611
612   ptr0 = (orc_union32 *) d1;
613
614   /* 0: loadpl */
615   var32.i = p1;
616
617   for (i = 0; i < n; i++) {
618     /* 1: copyl */
619     var33.i = var32.i;
620     /* 2: storel */
621     ptr0[i] = var33;
622   }
623
624 }
625
626 #else
627 static void
628 _backup_video_scale_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
629 {
630   int i;
631   int n = ex->n;
632   orc_union32 *ORC_RESTRICT ptr0;
633   orc_union32 var32;
634   orc_union32 var33;
635
636   ptr0 = (orc_union32 *) ex->arrays[0];
637
638   /* 0: loadpl */
639   var32.i = ex->params[24];
640
641   for (i = 0; i < n; i++) {
642     /* 1: copyl */
643     var33.i = var32.i;
644     /* 2: storel */
645     ptr0[i] = var33;
646   }
647
648 }
649
650 void
651 video_scale_orc_splat_u32 (orc_uint32 * ORC_RESTRICT d1, int p1, int n)
652 {
653   OrcExecutor _ex, *ex = &_ex;
654   static volatile int p_inited = 0;
655   static OrcCode *c = 0;
656   void (*func) (OrcExecutor *);
657
658   if (!p_inited) {
659     orc_once_mutex_lock ();
660     if (!p_inited) {
661       OrcProgram *p;
662
663       p = orc_program_new ();
664       orc_program_set_name (p, "video_scale_orc_splat_u32");
665       orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u32);
666       orc_program_add_destination (p, 4, "d1");
667       orc_program_add_parameter (p, 4, "p1");
668
669       orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
670           ORC_VAR_D1);
671
672       orc_program_compile (p);
673       c = orc_program_take_code (p);
674       orc_program_free (p);
675     }
676     p_inited = TRUE;
677     orc_once_mutex_unlock ();
678   }
679   ex->arrays[ORC_VAR_A2] = c;
680   ex->program = 0;
681
682   ex->n = n;
683   ex->arrays[ORC_VAR_D1] = d1;
684   ex->params[ORC_VAR_P1] = p1;
685
686   func = c->exec;
687   func (ex);
688 }
689 #endif
690
691
692 /* video_scale_orc_splat_u64 */
693 #ifdef DISABLE_ORC
694 void
695 video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
696 {
697   int i;
698   orc_union64 *ORC_RESTRICT ptr0;
699   orc_union64 var32;
700   orc_union64 var33;
701
702   ptr0 = (orc_union64 *) d1;
703
704   /* 0: loadpq */
705   var32.i = p1;
706
707   for (i = 0; i < n; i++) {
708     /* 1: copyq */
709     var33.i = var32.i;
710     /* 2: storeq */
711     ptr0[i] = var33;
712   }
713
714 }
715
716 #else
717 static void
718 _backup_video_scale_orc_splat_u64 (OrcExecutor * ORC_RESTRICT ex)
719 {
720   int i;
721   int n = ex->n;
722   orc_union64 *ORC_RESTRICT ptr0;
723   orc_union64 var32;
724   orc_union64 var33;
725
726   ptr0 = (orc_union64 *) ex->arrays[0];
727
728   /* 0: loadpq */
729   var32.i =
730       (ex->params[24] & 0xffffffff) | ((orc_uint64) (ex->params[24 +
731               (ORC_VAR_T1 - ORC_VAR_P1)]) << 32);
732
733   for (i = 0; i < n; i++) {
734     /* 1: copyq */
735     var33.i = var32.i;
736     /* 2: storeq */
737     ptr0[i] = var33;
738   }
739
740 }
741
742 void
743 video_scale_orc_splat_u64 (orc_uint64 * ORC_RESTRICT d1, orc_int64 p1, int n)
744 {
745   OrcExecutor _ex, *ex = &_ex;
746   static volatile int p_inited = 0;
747   static OrcCode *c = 0;
748   void (*func) (OrcExecutor *);
749
750   if (!p_inited) {
751     orc_once_mutex_lock ();
752     if (!p_inited) {
753       OrcProgram *p;
754
755       p = orc_program_new ();
756       orc_program_set_name (p, "video_scale_orc_splat_u64");
757       orc_program_set_backup_function (p, _backup_video_scale_orc_splat_u64);
758       orc_program_add_destination (p, 8, "d1");
759       orc_program_add_parameter_int64 (p, 8, "p1");
760
761       orc_program_append_2 (p, "copyq", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
762           ORC_VAR_D1);
763
764       orc_program_compile (p);
765       c = orc_program_take_code (p);
766       orc_program_free (p);
767     }
768     p_inited = TRUE;
769     orc_once_mutex_unlock ();
770   }
771   ex->arrays[ORC_VAR_A2] = c;
772   ex->program = 0;
773
774   ex->n = n;
775   ex->arrays[ORC_VAR_D1] = d1;
776   {
777     orc_union64 tmp;
778     tmp.i = p1;
779     ex->params[ORC_VAR_P1] = tmp.x2[0];
780     ex->params[ORC_VAR_T1] = tmp.x2[1];
781   }
782
783   func = c->exec;
784   func (ex);
785 }
786 #endif
787
788
789 /* video_scale_orc_downsample_u8 */
790 #ifdef DISABLE_ORC
791 void
792 video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
793     const guint8 * ORC_RESTRICT s1, int n)
794 {
795   int i;
796   orc_int8 *ORC_RESTRICT ptr0;
797   const orc_union16 *ORC_RESTRICT ptr4;
798   orc_union16 var34;
799   orc_int8 var35;
800   orc_int8 var36;
801   orc_int8 var37;
802
803   ptr0 = (orc_int8 *) d1;
804   ptr4 = (orc_union16 *) s1;
805
806
807   for (i = 0; i < n; i++) {
808     /* 0: loadw */
809     var34 = ptr4[i];
810     /* 1: splitwb */
811     {
812       orc_union16 _src;
813       _src.i = var34.i;
814       var36 = _src.x2[1];
815       var37 = _src.x2[0];
816     }
817     /* 2: avgub */
818     var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
819     /* 3: storeb */
820     ptr0[i] = var35;
821   }
822
823 }
824
825 #else
826 static void
827 _backup_video_scale_orc_downsample_u8 (OrcExecutor * ORC_RESTRICT ex)
828 {
829   int i;
830   int n = ex->n;
831   orc_int8 *ORC_RESTRICT ptr0;
832   const orc_union16 *ORC_RESTRICT ptr4;
833   orc_union16 var34;
834   orc_int8 var35;
835   orc_int8 var36;
836   orc_int8 var37;
837
838   ptr0 = (orc_int8 *) ex->arrays[0];
839   ptr4 = (orc_union16 *) ex->arrays[4];
840
841
842   for (i = 0; i < n; i++) {
843     /* 0: loadw */
844     var34 = ptr4[i];
845     /* 1: splitwb */
846     {
847       orc_union16 _src;
848       _src.i = var34.i;
849       var36 = _src.x2[1];
850       var37 = _src.x2[0];
851     }
852     /* 2: avgub */
853     var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
854     /* 3: storeb */
855     ptr0[i] = var35;
856   }
857
858 }
859
860 void
861 video_scale_orc_downsample_u8 (guint8 * ORC_RESTRICT d1,
862     const guint8 * ORC_RESTRICT s1, int n)
863 {
864   OrcExecutor _ex, *ex = &_ex;
865   static volatile int p_inited = 0;
866   static OrcCode *c = 0;
867   void (*func) (OrcExecutor *);
868
869   if (!p_inited) {
870     orc_once_mutex_lock ();
871     if (!p_inited) {
872       OrcProgram *p;
873
874       p = orc_program_new ();
875       orc_program_set_name (p, "video_scale_orc_downsample_u8");
876       orc_program_set_backup_function (p,
877           _backup_video_scale_orc_downsample_u8);
878       orc_program_add_destination (p, 1, "d1");
879       orc_program_add_source (p, 2, "s1");
880       orc_program_add_temporary (p, 1, "t1");
881       orc_program_add_temporary (p, 1, "t2");
882
883       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
884           ORC_VAR_D1);
885       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
886           ORC_VAR_D1);
887
888       orc_program_compile (p);
889       c = orc_program_take_code (p);
890       orc_program_free (p);
891     }
892     p_inited = TRUE;
893     orc_once_mutex_unlock ();
894   }
895   ex->arrays[ORC_VAR_A2] = c;
896   ex->program = 0;
897
898   ex->n = n;
899   ex->arrays[ORC_VAR_D1] = d1;
900   ex->arrays[ORC_VAR_S1] = (void *) s1;
901
902   func = c->exec;
903   func (ex);
904 }
905 #endif
906
907
908 /* video_scale_orc_downsample_u16 */
909 #ifdef DISABLE_ORC
910 void
911 video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
912     const guint16 * ORC_RESTRICT s1, int n)
913 {
914   int i;
915   orc_union16 *ORC_RESTRICT ptr0;
916   const orc_union32 *ORC_RESTRICT ptr4;
917   orc_union32 var34;
918   orc_union16 var35;
919   orc_union16 var36;
920   orc_union16 var37;
921
922   ptr0 = (orc_union16 *) d1;
923   ptr4 = (orc_union32 *) s1;
924
925
926   for (i = 0; i < n; i++) {
927     /* 0: loadl */
928     var34 = ptr4[i];
929     /* 1: splitlw */
930     {
931       orc_union32 _src;
932       _src.i = var34.i;
933       var36.i = _src.x2[1];
934       var37.i = _src.x2[0];
935     }
936     /* 2: avguw */
937     var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
938     /* 3: storew */
939     ptr0[i] = var35;
940   }
941
942 }
943
944 #else
945 static void
946 _backup_video_scale_orc_downsample_u16 (OrcExecutor * ORC_RESTRICT ex)
947 {
948   int i;
949   int n = ex->n;
950   orc_union16 *ORC_RESTRICT ptr0;
951   const orc_union32 *ORC_RESTRICT ptr4;
952   orc_union32 var34;
953   orc_union16 var35;
954   orc_union16 var36;
955   orc_union16 var37;
956
957   ptr0 = (orc_union16 *) ex->arrays[0];
958   ptr4 = (orc_union32 *) ex->arrays[4];
959
960
961   for (i = 0; i < n; i++) {
962     /* 0: loadl */
963     var34 = ptr4[i];
964     /* 1: splitlw */
965     {
966       orc_union32 _src;
967       _src.i = var34.i;
968       var36.i = _src.x2[1];
969       var37.i = _src.x2[0];
970     }
971     /* 2: avguw */
972     var35.i = ((orc_uint16) var36.i + (orc_uint16) var37.i + 1) >> 1;
973     /* 3: storew */
974     ptr0[i] = var35;
975   }
976
977 }
978
979 void
980 video_scale_orc_downsample_u16 (guint16 * ORC_RESTRICT d1,
981     const guint16 * ORC_RESTRICT s1, int n)
982 {
983   OrcExecutor _ex, *ex = &_ex;
984   static volatile int p_inited = 0;
985   static OrcCode *c = 0;
986   void (*func) (OrcExecutor *);
987
988   if (!p_inited) {
989     orc_once_mutex_lock ();
990     if (!p_inited) {
991       OrcProgram *p;
992
993       p = orc_program_new ();
994       orc_program_set_name (p, "video_scale_orc_downsample_u16");
995       orc_program_set_backup_function (p,
996           _backup_video_scale_orc_downsample_u16);
997       orc_program_add_destination (p, 2, "d1");
998       orc_program_add_source (p, 4, "s1");
999       orc_program_add_temporary (p, 2, "t1");
1000       orc_program_add_temporary (p, 2, "t2");
1001
1002       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
1003           ORC_VAR_D1);
1004       orc_program_append_2 (p, "avguw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
1005           ORC_VAR_D1);
1006
1007       orc_program_compile (p);
1008       c = orc_program_take_code (p);
1009       orc_program_free (p);
1010     }
1011     p_inited = TRUE;
1012     orc_once_mutex_unlock ();
1013   }
1014   ex->arrays[ORC_VAR_A2] = c;
1015   ex->program = 0;
1016
1017   ex->n = n;
1018   ex->arrays[ORC_VAR_D1] = d1;
1019   ex->arrays[ORC_VAR_S1] = (void *) s1;
1020
1021   func = c->exec;
1022   func (ex);
1023 }
1024 #endif
1025
1026
1027 /* video_scale_orc_downsample_u32 */
1028 #ifdef DISABLE_ORC
1029 void
1030 video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
1031     const guint8 * ORC_RESTRICT s1, int n)
1032 {
1033   int i;
1034   orc_union32 *ORC_RESTRICT ptr0;
1035   const orc_union64 *ORC_RESTRICT ptr4;
1036   orc_union64 var34;
1037   orc_union32 var35;
1038   orc_union32 var36;
1039   orc_union32 var37;
1040
1041   ptr0 = (orc_union32 *) d1;
1042   ptr4 = (orc_union64 *) s1;
1043
1044
1045   for (i = 0; i < n; i++) {
1046     /* 0: loadq */
1047     var34 = ptr4[i];
1048     /* 1: splitql */
1049     {
1050       orc_union64 _src;
1051       _src.i = var34.i;
1052       var36.i = _src.x2[1];
1053       var37.i = _src.x2[0];
1054     }
1055     /* 2: avgub */
1056     var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
1057     var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
1058     var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
1059     var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
1060     /* 3: storel */
1061     ptr0[i] = var35;
1062   }
1063
1064 }
1065
1066 #else
1067 static void
1068 _backup_video_scale_orc_downsample_u32 (OrcExecutor * ORC_RESTRICT ex)
1069 {
1070   int i;
1071   int n = ex->n;
1072   orc_union32 *ORC_RESTRICT ptr0;
1073   const orc_union64 *ORC_RESTRICT ptr4;
1074   orc_union64 var34;
1075   orc_union32 var35;
1076   orc_union32 var36;
1077   orc_union32 var37;
1078
1079   ptr0 = (orc_union32 *) ex->arrays[0];
1080   ptr4 = (orc_union64 *) ex->arrays[4];
1081
1082
1083   for (i = 0; i < n; i++) {
1084     /* 0: loadq */
1085     var34 = ptr4[i];
1086     /* 1: splitql */
1087     {
1088       orc_union64 _src;
1089       _src.i = var34.i;
1090       var36.i = _src.x2[1];
1091       var37.i = _src.x2[0];
1092     }
1093     /* 2: avgub */
1094     var35.x4[0] = ((orc_uint8) var36.x4[0] + (orc_uint8) var37.x4[0] + 1) >> 1;
1095     var35.x4[1] = ((orc_uint8) var36.x4[1] + (orc_uint8) var37.x4[1] + 1) >> 1;
1096     var35.x4[2] = ((orc_uint8) var36.x4[2] + (orc_uint8) var37.x4[2] + 1) >> 1;
1097     var35.x4[3] = ((orc_uint8) var36.x4[3] + (orc_uint8) var37.x4[3] + 1) >> 1;
1098     /* 3: storel */
1099     ptr0[i] = var35;
1100   }
1101
1102 }
1103
1104 void
1105 video_scale_orc_downsample_u32 (guint8 * ORC_RESTRICT d1,
1106     const guint8 * ORC_RESTRICT s1, int n)
1107 {
1108   OrcExecutor _ex, *ex = &_ex;
1109   static volatile int p_inited = 0;
1110   static OrcCode *c = 0;
1111   void (*func) (OrcExecutor *);
1112
1113   if (!p_inited) {
1114     orc_once_mutex_lock ();
1115     if (!p_inited) {
1116       OrcProgram *p;
1117
1118       p = orc_program_new ();
1119       orc_program_set_name (p, "video_scale_orc_downsample_u32");
1120       orc_program_set_backup_function (p,
1121           _backup_video_scale_orc_downsample_u32);
1122       orc_program_add_destination (p, 4, "d1");
1123       orc_program_add_source (p, 8, "s1");
1124       orc_program_add_temporary (p, 4, "t1");
1125       orc_program_add_temporary (p, 4, "t2");
1126
1127       orc_program_append_2 (p, "splitql", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
1128           ORC_VAR_D1);
1129       orc_program_append_2 (p, "avgub", 2, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
1130           ORC_VAR_D1);
1131
1132       orc_program_compile (p);
1133       c = orc_program_take_code (p);
1134       orc_program_free (p);
1135     }
1136     p_inited = TRUE;
1137     orc_once_mutex_unlock ();
1138   }
1139   ex->arrays[ORC_VAR_A2] = c;
1140   ex->program = 0;
1141
1142   ex->n = n;
1143   ex->arrays[ORC_VAR_D1] = d1;
1144   ex->arrays[ORC_VAR_S1] = (void *) s1;
1145
1146   func = c->exec;
1147   func (ex);
1148 }
1149 #endif
1150
1151
1152 /* video_scale_orc_downsample_yuyv */
1153 #ifdef DISABLE_ORC
1154 void
1155 video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
1156     const guint8 * ORC_RESTRICT s1, int n)
1157 {
1158   int i;
1159   orc_union32 *ORC_RESTRICT ptr0;
1160   const orc_union64 *ORC_RESTRICT ptr4;
1161   orc_union64 var38;
1162   orc_union32 var39;
1163   orc_union32 var40;
1164   orc_union32 var41;
1165   orc_union16 var42;
1166   orc_union16 var43;
1167   orc_union16 var44;
1168   orc_union16 var45;
1169   orc_union16 var46;
1170   orc_union16 var47;
1171
1172   ptr0 = (orc_union32 *) d1;
1173   ptr4 = (orc_union64 *) s1;
1174
1175
1176   for (i = 0; i < n; i++) {
1177     /* 0: loadq */
1178     var38 = ptr4[i];
1179     /* 1: splitwb */
1180     {
1181       orc_union16 _src;
1182       _src.i = var38.x4[0];
1183       var40.x4[0] = _src.x2[1];
1184       var41.x4[0] = _src.x2[0];
1185     }
1186     {
1187       orc_union16 _src;
1188       _src.i = var38.x4[1];
1189       var40.x4[1] = _src.x2[1];
1190       var41.x4[1] = _src.x2[0];
1191     }
1192     {
1193       orc_union16 _src;
1194       _src.i = var38.x4[2];
1195       var40.x4[2] = _src.x2[1];
1196       var41.x4[2] = _src.x2[0];
1197     }
1198     {
1199       orc_union16 _src;
1200       _src.i = var38.x4[3];
1201       var40.x4[3] = _src.x2[1];
1202       var41.x4[3] = _src.x2[0];
1203     }
1204     /* 2: splitwb */
1205     {
1206       orc_union16 _src;
1207       _src.i = var40.x2[0];
1208       var42.x2[0] = _src.x2[1];
1209       var43.x2[0] = _src.x2[0];
1210     }
1211     {
1212       orc_union16 _src;
1213       _src.i = var40.x2[1];
1214       var42.x2[1] = _src.x2[1];
1215       var43.x2[1] = _src.x2[0];
1216     }
1217     /* 3: avgub */
1218     var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
1219     var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
1220     /* 4: splitlw */
1221     {
1222       orc_union32 _src;
1223       _src.i = var41.i;
1224       var45.i = _src.x2[1];
1225       var46.i = _src.x2[0];
1226     }
1227     /* 5: avgub */
1228     var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
1229     var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
1230     /* 6: mergebw */
1231     {
1232       orc_union16 _dest;
1233       _dest.x2[0] = var44.x2[0];
1234       _dest.x2[1] = var47.x2[0];
1235       var39.x2[0] = _dest.i;
1236     }
1237     {
1238       orc_union16 _dest;
1239       _dest.x2[0] = var44.x2[1];
1240       _dest.x2[1] = var47.x2[1];
1241       var39.x2[1] = _dest.i;
1242     }
1243     /* 7: storel */
1244     ptr0[i] = var39;
1245   }
1246
1247 }
1248
1249 #else
1250 static void
1251 _backup_video_scale_orc_downsample_yuyv (OrcExecutor * ORC_RESTRICT ex)
1252 {
1253   int i;
1254   int n = ex->n;
1255   orc_union32 *ORC_RESTRICT ptr0;
1256   const orc_union64 *ORC_RESTRICT ptr4;
1257   orc_union64 var38;
1258   orc_union32 var39;
1259   orc_union32 var40;
1260   orc_union32 var41;
1261   orc_union16 var42;
1262   orc_union16 var43;
1263   orc_union16 var44;
1264   orc_union16 var45;
1265   orc_union16 var46;
1266   orc_union16 var47;
1267
1268   ptr0 = (orc_union32 *) ex->arrays[0];
1269   ptr4 = (orc_union64 *) ex->arrays[4];
1270
1271
1272   for (i = 0; i < n; i++) {
1273     /* 0: loadq */
1274     var38 = ptr4[i];
1275     /* 1: splitwb */
1276     {
1277       orc_union16 _src;
1278       _src.i = var38.x4[0];
1279       var40.x4[0] = _src.x2[1];
1280       var41.x4[0] = _src.x2[0];
1281     }
1282     {
1283       orc_union16 _src;
1284       _src.i = var38.x4[1];
1285       var40.x4[1] = _src.x2[1];
1286       var41.x4[1] = _src.x2[0];
1287     }
1288     {
1289       orc_union16 _src;
1290       _src.i = var38.x4[2];
1291       var40.x4[2] = _src.x2[1];
1292       var41.x4[2] = _src.x2[0];
1293     }
1294     {
1295       orc_union16 _src;
1296       _src.i = var38.x4[3];
1297       var40.x4[3] = _src.x2[1];
1298       var41.x4[3] = _src.x2[0];
1299     }
1300     /* 2: splitwb */
1301     {
1302       orc_union16 _src;
1303       _src.i = var40.x2[0];
1304       var42.x2[0] = _src.x2[1];
1305       var43.x2[0] = _src.x2[0];
1306     }
1307     {
1308       orc_union16 _src;
1309       _src.i = var40.x2[1];
1310       var42.x2[1] = _src.x2[1];
1311       var43.x2[1] = _src.x2[0];
1312     }
1313     /* 3: avgub */
1314     var44.x2[0] = ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
1315     var44.x2[1] = ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
1316     /* 4: splitlw */
1317     {
1318       orc_union32 _src;
1319       _src.i = var41.i;
1320       var45.i = _src.x2[1];
1321       var46.i = _src.x2[0];
1322     }
1323     /* 5: avgub */
1324     var47.x2[0] = ((orc_uint8) var45.x2[0] + (orc_uint8) var46.x2[0] + 1) >> 1;
1325     var47.x2[1] = ((orc_uint8) var45.x2[1] + (orc_uint8) var46.x2[1] + 1) >> 1;
1326     /* 6: mergebw */
1327     {
1328       orc_union16 _dest;
1329       _dest.x2[0] = var44.x2[0];
1330       _dest.x2[1] = var47.x2[0];
1331       var39.x2[0] = _dest.i;
1332     }
1333     {
1334       orc_union16 _dest;
1335       _dest.x2[0] = var44.x2[1];
1336       _dest.x2[1] = var47.x2[1];
1337       var39.x2[1] = _dest.i;
1338     }
1339     /* 7: storel */
1340     ptr0[i] = var39;
1341   }
1342
1343 }
1344
1345 void
1346 video_scale_orc_downsample_yuyv (guint8 * ORC_RESTRICT d1,
1347     const guint8 * ORC_RESTRICT s1, int n)
1348 {
1349   OrcExecutor _ex, *ex = &_ex;
1350   static volatile int p_inited = 0;
1351   static OrcCode *c = 0;
1352   void (*func) (OrcExecutor *);
1353
1354   if (!p_inited) {
1355     orc_once_mutex_lock ();
1356     if (!p_inited) {
1357       OrcProgram *p;
1358
1359       p = orc_program_new ();
1360       orc_program_set_name (p, "video_scale_orc_downsample_yuyv");
1361       orc_program_set_backup_function (p,
1362           _backup_video_scale_orc_downsample_yuyv);
1363       orc_program_add_destination (p, 4, "d1");
1364       orc_program_add_source (p, 8, "s1");
1365       orc_program_add_temporary (p, 4, "t1");
1366       orc_program_add_temporary (p, 4, "t2");
1367       orc_program_add_temporary (p, 2, "t3");
1368       orc_program_add_temporary (p, 2, "t4");
1369       orc_program_add_temporary (p, 2, "t5");
1370       orc_program_add_temporary (p, 2, "t6");
1371
1372       orc_program_append_2 (p, "splitwb", 2, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
1373           ORC_VAR_D1);
1374       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T1,
1375           ORC_VAR_D1);
1376       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T4,
1377           ORC_VAR_D1);
1378       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
1379           ORC_VAR_D1);
1380       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4,
1381           ORC_VAR_D1);
1382       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6,
1383           ORC_VAR_D1);
1384
1385       orc_program_compile (p);
1386       c = orc_program_take_code (p);
1387       orc_program_free (p);
1388     }
1389     p_inited = TRUE;
1390     orc_once_mutex_unlock ();
1391   }
1392   ex->arrays[ORC_VAR_A2] = c;
1393   ex->program = 0;
1394
1395   ex->n = n;
1396   ex->arrays[ORC_VAR_D1] = d1;
1397   ex->arrays[ORC_VAR_S1] = (void *) s1;
1398
1399   func = c->exec;
1400   func (ex);
1401 }
1402 #endif
1403
1404
1405 /* video_scale_orc_resample_nearest_u8 */
1406 #ifdef DISABLE_ORC
1407 void
1408 video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
1409     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1410 {
1411   int i;
1412   orc_int8 *ORC_RESTRICT ptr0;
1413   const orc_int8 *ORC_RESTRICT ptr4;
1414   orc_int8 var32;
1415
1416   ptr0 = (orc_int8 *) d1;
1417   ptr4 = (orc_int8 *) s1;
1418
1419
1420   for (i = 0; i < n; i++) {
1421     /* 0: ldresnearb */
1422     var32 = ptr4[(p1 + i * p2) >> 16];
1423     /* 1: storeb */
1424     ptr0[i] = var32;
1425   }
1426
1427 }
1428
1429 #else
1430 static void
1431 _backup_video_scale_orc_resample_nearest_u8 (OrcExecutor * ORC_RESTRICT ex)
1432 {
1433   int i;
1434   int n = ex->n;
1435   orc_int8 *ORC_RESTRICT ptr0;
1436   const orc_int8 *ORC_RESTRICT ptr4;
1437   orc_int8 var32;
1438
1439   ptr0 = (orc_int8 *) ex->arrays[0];
1440   ptr4 = (orc_int8 *) ex->arrays[4];
1441
1442
1443   for (i = 0; i < n; i++) {
1444     /* 0: ldresnearb */
1445     var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
1446     /* 1: storeb */
1447     ptr0[i] = var32;
1448   }
1449
1450 }
1451
1452 void
1453 video_scale_orc_resample_nearest_u8 (guint8 * ORC_RESTRICT d1,
1454     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1455 {
1456   OrcExecutor _ex, *ex = &_ex;
1457   static volatile int p_inited = 0;
1458   static OrcCode *c = 0;
1459   void (*func) (OrcExecutor *);
1460
1461   if (!p_inited) {
1462     orc_once_mutex_lock ();
1463     if (!p_inited) {
1464       OrcProgram *p;
1465
1466       p = orc_program_new ();
1467       orc_program_set_name (p, "video_scale_orc_resample_nearest_u8");
1468       orc_program_set_backup_function (p,
1469           _backup_video_scale_orc_resample_nearest_u8);
1470       orc_program_add_destination (p, 1, "d1");
1471       orc_program_add_source (p, 1, "s1");
1472       orc_program_add_parameter (p, 4, "p1");
1473       orc_program_add_parameter (p, 4, "p2");
1474
1475       orc_program_append_2 (p, "ldresnearb", 0, ORC_VAR_D1, ORC_VAR_S1,
1476           ORC_VAR_P1, ORC_VAR_P2);
1477
1478       orc_program_compile (p);
1479       c = orc_program_take_code (p);
1480       orc_program_free (p);
1481     }
1482     p_inited = TRUE;
1483     orc_once_mutex_unlock ();
1484   }
1485   ex->arrays[ORC_VAR_A2] = c;
1486   ex->program = 0;
1487
1488   ex->n = n;
1489   ex->arrays[ORC_VAR_D1] = d1;
1490   ex->arrays[ORC_VAR_S1] = (void *) s1;
1491   ex->params[ORC_VAR_P1] = p1;
1492   ex->params[ORC_VAR_P2] = p2;
1493
1494   func = c->exec;
1495   func (ex);
1496 }
1497 #endif
1498
1499
1500 /* video_scale_orc_resample_bilinear_u8 */
1501 #ifdef DISABLE_ORC
1502 void
1503 video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
1504     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1505 {
1506   int i;
1507   orc_int8 *ORC_RESTRICT ptr0;
1508   const orc_int8 *ORC_RESTRICT ptr4;
1509   orc_int8 var32;
1510
1511   ptr0 = (orc_int8 *) d1;
1512   ptr4 = (orc_int8 *) s1;
1513
1514
1515   for (i = 0; i < n; i++) {
1516     /* 0: ldreslinb */
1517     {
1518       int tmp = p1 + i * p2;
1519       var32 =
1520           ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
1521           (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
1522     }
1523     /* 1: storeb */
1524     ptr0[i] = var32;
1525   }
1526
1527 }
1528
1529 #else
1530 static void
1531 _backup_video_scale_orc_resample_bilinear_u8 (OrcExecutor * ORC_RESTRICT ex)
1532 {
1533   int i;
1534   int n = ex->n;
1535   orc_int8 *ORC_RESTRICT ptr0;
1536   const orc_int8 *ORC_RESTRICT ptr4;
1537   orc_int8 var32;
1538
1539   ptr0 = (orc_int8 *) ex->arrays[0];
1540   ptr4 = (orc_int8 *) ex->arrays[4];
1541
1542
1543   for (i = 0; i < n; i++) {
1544     /* 0: ldreslinb */
1545     {
1546       int tmp = ex->params[24] + i * ex->params[25];
1547       var32 =
1548           ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
1549           (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
1550     }
1551     /* 1: storeb */
1552     ptr0[i] = var32;
1553   }
1554
1555 }
1556
1557 void
1558 video_scale_orc_resample_bilinear_u8 (guint8 * ORC_RESTRICT d1,
1559     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1560 {
1561   OrcExecutor _ex, *ex = &_ex;
1562   static volatile int p_inited = 0;
1563   static OrcCode *c = 0;
1564   void (*func) (OrcExecutor *);
1565
1566   if (!p_inited) {
1567     orc_once_mutex_lock ();
1568     if (!p_inited) {
1569       OrcProgram *p;
1570
1571       p = orc_program_new ();
1572       orc_program_set_name (p, "video_scale_orc_resample_bilinear_u8");
1573       orc_program_set_backup_function (p,
1574           _backup_video_scale_orc_resample_bilinear_u8);
1575       orc_program_add_destination (p, 1, "d1");
1576       orc_program_add_source (p, 1, "s1");
1577       orc_program_add_parameter (p, 4, "p1");
1578       orc_program_add_parameter (p, 4, "p2");
1579
1580       orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1,
1581           ORC_VAR_P1, ORC_VAR_P2);
1582
1583       orc_program_compile (p);
1584       c = orc_program_take_code (p);
1585       orc_program_free (p);
1586     }
1587     p_inited = TRUE;
1588     orc_once_mutex_unlock ();
1589   }
1590   ex->arrays[ORC_VAR_A2] = c;
1591   ex->program = 0;
1592
1593   ex->n = n;
1594   ex->arrays[ORC_VAR_D1] = d1;
1595   ex->arrays[ORC_VAR_S1] = (void *) s1;
1596   ex->params[ORC_VAR_P1] = p1;
1597   ex->params[ORC_VAR_P2] = p2;
1598
1599   func = c->exec;
1600   func (ex);
1601 }
1602 #endif
1603
1604
1605 /* video_scale_orc_resample_nearest_u32 */
1606 #ifdef DISABLE_ORC
1607 void
1608 video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
1609     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1610 {
1611   int i;
1612   orc_union32 *ORC_RESTRICT ptr0;
1613   const orc_union32 *ORC_RESTRICT ptr4;
1614   orc_union32 var32;
1615
1616   ptr0 = (orc_union32 *) d1;
1617   ptr4 = (orc_union32 *) s1;
1618
1619
1620   for (i = 0; i < n; i++) {
1621     /* 0: ldresnearl */
1622     var32 = ptr4[(p1 + i * p2) >> 16];
1623     /* 1: storel */
1624     ptr0[i] = var32;
1625   }
1626
1627 }
1628
1629 #else
1630 static void
1631 _backup_video_scale_orc_resample_nearest_u32 (OrcExecutor * ORC_RESTRICT ex)
1632 {
1633   int i;
1634   int n = ex->n;
1635   orc_union32 *ORC_RESTRICT ptr0;
1636   const orc_union32 *ORC_RESTRICT ptr4;
1637   orc_union32 var32;
1638
1639   ptr0 = (orc_union32 *) ex->arrays[0];
1640   ptr4 = (orc_union32 *) ex->arrays[4];
1641
1642
1643   for (i = 0; i < n; i++) {
1644     /* 0: ldresnearl */
1645     var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
1646     /* 1: storel */
1647     ptr0[i] = var32;
1648   }
1649
1650 }
1651
1652 void
1653 video_scale_orc_resample_nearest_u32 (guint8 * ORC_RESTRICT d1,
1654     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1655 {
1656   OrcExecutor _ex, *ex = &_ex;
1657   static volatile int p_inited = 0;
1658   static OrcCode *c = 0;
1659   void (*func) (OrcExecutor *);
1660
1661   if (!p_inited) {
1662     orc_once_mutex_lock ();
1663     if (!p_inited) {
1664       OrcProgram *p;
1665
1666       p = orc_program_new ();
1667       orc_program_set_name (p, "video_scale_orc_resample_nearest_u32");
1668       orc_program_set_backup_function (p,
1669           _backup_video_scale_orc_resample_nearest_u32);
1670       orc_program_add_destination (p, 4, "d1");
1671       orc_program_add_source (p, 4, "s1");
1672       orc_program_add_parameter (p, 4, "p1");
1673       orc_program_add_parameter (p, 4, "p2");
1674
1675       orc_program_append_2 (p, "ldresnearl", 0, ORC_VAR_D1, ORC_VAR_S1,
1676           ORC_VAR_P1, ORC_VAR_P2);
1677
1678       orc_program_compile (p);
1679       c = orc_program_take_code (p);
1680       orc_program_free (p);
1681     }
1682     p_inited = TRUE;
1683     orc_once_mutex_unlock ();
1684   }
1685   ex->arrays[ORC_VAR_A2] = c;
1686   ex->program = 0;
1687
1688   ex->n = n;
1689   ex->arrays[ORC_VAR_D1] = d1;
1690   ex->arrays[ORC_VAR_S1] = (void *) s1;
1691   ex->params[ORC_VAR_P1] = p1;
1692   ex->params[ORC_VAR_P2] = p2;
1693
1694   func = c->exec;
1695   func (ex);
1696 }
1697 #endif
1698
1699
1700 /* video_scale_orc_resample_bilinear_u32 */
1701 #ifdef DISABLE_ORC
1702 void
1703 video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
1704     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1705 {
1706   int i;
1707   orc_union32 *ORC_RESTRICT ptr0;
1708   const orc_union32 *ORC_RESTRICT ptr4;
1709   orc_union32 var32;
1710
1711   ptr0 = (orc_union32 *) d1;
1712   ptr4 = (orc_union32 *) s1;
1713
1714
1715   for (i = 0; i < n; i++) {
1716     /* 0: ldreslinl */
1717     {
1718       int tmp = p1 + i * p2;
1719       orc_union32 a = ptr4[tmp >> 16];
1720       orc_union32 b = ptr4[(tmp >> 16) + 1];
1721       var32.x4[0] =
1722           ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
1723           (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
1724       var32.x4[1] =
1725           ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
1726           (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
1727       var32.x4[2] =
1728           ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
1729           (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
1730       var32.x4[3] =
1731           ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
1732           (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
1733     }
1734     /* 1: storel */
1735     ptr0[i] = var32;
1736   }
1737
1738 }
1739
1740 #else
1741 static void
1742 _backup_video_scale_orc_resample_bilinear_u32 (OrcExecutor * ORC_RESTRICT ex)
1743 {
1744   int i;
1745   int n = ex->n;
1746   orc_union32 *ORC_RESTRICT ptr0;
1747   const orc_union32 *ORC_RESTRICT ptr4;
1748   orc_union32 var32;
1749
1750   ptr0 = (orc_union32 *) ex->arrays[0];
1751   ptr4 = (orc_union32 *) ex->arrays[4];
1752
1753
1754   for (i = 0; i < n; i++) {
1755     /* 0: ldreslinl */
1756     {
1757       int tmp = ex->params[24] + i * ex->params[25];
1758       orc_union32 a = ptr4[tmp >> 16];
1759       orc_union32 b = ptr4[(tmp >> 16) + 1];
1760       var32.x4[0] =
1761           ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
1762           (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
1763       var32.x4[1] =
1764           ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
1765           (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
1766       var32.x4[2] =
1767           ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
1768           (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
1769       var32.x4[3] =
1770           ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
1771           (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
1772     }
1773     /* 1: storel */
1774     ptr0[i] = var32;
1775   }
1776
1777 }
1778
1779 void
1780 video_scale_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1,
1781     const guint8 * ORC_RESTRICT s1, int p1, int p2, int n)
1782 {
1783   OrcExecutor _ex, *ex = &_ex;
1784   static volatile int p_inited = 0;
1785   static OrcCode *c = 0;
1786   void (*func) (OrcExecutor *);
1787
1788   if (!p_inited) {
1789     orc_once_mutex_lock ();
1790     if (!p_inited) {
1791       OrcProgram *p;
1792
1793       p = orc_program_new ();
1794       orc_program_set_name (p, "video_scale_orc_resample_bilinear_u32");
1795       orc_program_set_backup_function (p,
1796           _backup_video_scale_orc_resample_bilinear_u32);
1797       orc_program_add_destination (p, 4, "d1");
1798       orc_program_add_source (p, 4, "s1");
1799       orc_program_add_parameter (p, 4, "p1");
1800       orc_program_add_parameter (p, 4, "p2");
1801
1802       orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_D1, ORC_VAR_S1,
1803           ORC_VAR_P1, ORC_VAR_P2);
1804
1805       orc_program_compile (p);
1806       c = orc_program_take_code (p);
1807       orc_program_free (p);
1808     }
1809     p_inited = TRUE;
1810     orc_once_mutex_unlock ();
1811   }
1812   ex->arrays[ORC_VAR_A2] = c;
1813   ex->program = 0;
1814
1815   ex->n = n;
1816   ex->arrays[ORC_VAR_D1] = d1;
1817   ex->arrays[ORC_VAR_S1] = (void *) s1;
1818   ex->params[ORC_VAR_P1] = p1;
1819   ex->params[ORC_VAR_P2] = p2;
1820
1821   func = c->exec;
1822   func (ex);
1823 }
1824 #endif
1825
1826
1827 /* video_scale_orc_resample_merge_bilinear_u32 */
1828 #ifdef DISABLE_ORC
1829 void
1830 video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
1831     guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
1832     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
1833 {
1834   int i;
1835   orc_union32 *ORC_RESTRICT ptr0;
1836   orc_union32 *ORC_RESTRICT ptr1;
1837   const orc_union32 *ORC_RESTRICT ptr4;
1838   const orc_union32 *ORC_RESTRICT ptr5;
1839   orc_union64 var37;
1840   orc_union32 var38;
1841   orc_union32 var39;
1842   orc_union32 var40;
1843   orc_union64 var41;
1844   orc_union64 var42;
1845   orc_union64 var43;
1846   orc_union64 var44;
1847   orc_union32 var45;
1848
1849   ptr0 = (orc_union32 *) d1;
1850   ptr1 = (orc_union32 *) d2;
1851   ptr4 = (orc_union32 *) s1;
1852   ptr5 = (orc_union32 *) s2;
1853
1854   /* 6: loadpw */
1855   var37.x4[0] = p1;
1856   var37.x4[1] = p1;
1857   var37.x4[2] = p1;
1858   var37.x4[3] = p1;
1859
1860   for (i = 0; i < n; i++) {
1861     /* 0: ldreslinl */
1862     {
1863       int tmp = p2 + i * p3;
1864       orc_union32 a = ptr5[tmp >> 16];
1865       orc_union32 b = ptr5[(tmp >> 16) + 1];
1866       var39.x4[0] =
1867           ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
1868           (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
1869       var39.x4[1] =
1870           ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
1871           (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
1872       var39.x4[2] =
1873           ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
1874           (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
1875       var39.x4[3] =
1876           ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
1877           (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
1878     }
1879     /* 1: storel */
1880     ptr1[i] = var39;
1881     /* 2: loadl */
1882     var40 = ptr4[i];
1883     /* 3: convubw */
1884     var41.x4[0] = (orc_uint8) var40.x4[0];
1885     var41.x4[1] = (orc_uint8) var40.x4[1];
1886     var41.x4[2] = (orc_uint8) var40.x4[2];
1887     var41.x4[3] = (orc_uint8) var40.x4[3];
1888     /* 4: convubw */
1889     var42.x4[0] = (orc_uint8) var39.x4[0];
1890     var42.x4[1] = (orc_uint8) var39.x4[1];
1891     var42.x4[2] = (orc_uint8) var39.x4[2];
1892     var42.x4[3] = (orc_uint8) var39.x4[3];
1893     /* 5: subw */
1894     var43.x4[0] = var42.x4[0] - var41.x4[0];
1895     var43.x4[1] = var42.x4[1] - var41.x4[1];
1896     var43.x4[2] = var42.x4[2] - var41.x4[2];
1897     var43.x4[3] = var42.x4[3] - var41.x4[3];
1898     /* 7: mullw */
1899     var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
1900     var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
1901     var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
1902     var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
1903     /* 8: convhwb */
1904     var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
1905     var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
1906     var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
1907     var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
1908     /* 9: addb */
1909     var38.x4[0] = var45.x4[0] + var40.x4[0];
1910     var38.x4[1] = var45.x4[1] + var40.x4[1];
1911     var38.x4[2] = var45.x4[2] + var40.x4[2];
1912     var38.x4[3] = var45.x4[3] + var40.x4[3];
1913     /* 10: storel */
1914     ptr0[i] = var38;
1915   }
1916
1917 }
1918
1919 #else
1920 static void
1921 _backup_video_scale_orc_resample_merge_bilinear_u32 (OrcExecutor *
1922     ORC_RESTRICT ex)
1923 {
1924   int i;
1925   int n = ex->n;
1926   orc_union32 *ORC_RESTRICT ptr0;
1927   orc_union32 *ORC_RESTRICT ptr1;
1928   const orc_union32 *ORC_RESTRICT ptr4;
1929   const orc_union32 *ORC_RESTRICT ptr5;
1930   orc_union64 var37;
1931   orc_union32 var38;
1932   orc_union32 var39;
1933   orc_union32 var40;
1934   orc_union64 var41;
1935   orc_union64 var42;
1936   orc_union64 var43;
1937   orc_union64 var44;
1938   orc_union32 var45;
1939
1940   ptr0 = (orc_union32 *) ex->arrays[0];
1941   ptr1 = (orc_union32 *) ex->arrays[1];
1942   ptr4 = (orc_union32 *) ex->arrays[4];
1943   ptr5 = (orc_union32 *) ex->arrays[5];
1944
1945   /* 6: loadpw */
1946   var37.x4[0] = ex->params[24];
1947   var37.x4[1] = ex->params[24];
1948   var37.x4[2] = ex->params[24];
1949   var37.x4[3] = ex->params[24];
1950
1951   for (i = 0; i < n; i++) {
1952     /* 0: ldreslinl */
1953     {
1954       int tmp = ex->params[25] + i * ex->params[26];
1955       orc_union32 a = ptr5[tmp >> 16];
1956       orc_union32 b = ptr5[(tmp >> 16) + 1];
1957       var39.x4[0] =
1958           ((orc_uint8) a.x4[0] * (256 - ((tmp >> 8) & 0xff)) +
1959           (orc_uint8) b.x4[0] * ((tmp >> 8) & 0xff)) >> 8;
1960       var39.x4[1] =
1961           ((orc_uint8) a.x4[1] * (256 - ((tmp >> 8) & 0xff)) +
1962           (orc_uint8) b.x4[1] * ((tmp >> 8) & 0xff)) >> 8;
1963       var39.x4[2] =
1964           ((orc_uint8) a.x4[2] * (256 - ((tmp >> 8) & 0xff)) +
1965           (orc_uint8) b.x4[2] * ((tmp >> 8) & 0xff)) >> 8;
1966       var39.x4[3] =
1967           ((orc_uint8) a.x4[3] * (256 - ((tmp >> 8) & 0xff)) +
1968           (orc_uint8) b.x4[3] * ((tmp >> 8) & 0xff)) >> 8;
1969     }
1970     /* 1: storel */
1971     ptr1[i] = var39;
1972     /* 2: loadl */
1973     var40 = ptr4[i];
1974     /* 3: convubw */
1975     var41.x4[0] = (orc_uint8) var40.x4[0];
1976     var41.x4[1] = (orc_uint8) var40.x4[1];
1977     var41.x4[2] = (orc_uint8) var40.x4[2];
1978     var41.x4[3] = (orc_uint8) var40.x4[3];
1979     /* 4: convubw */
1980     var42.x4[0] = (orc_uint8) var39.x4[0];
1981     var42.x4[1] = (orc_uint8) var39.x4[1];
1982     var42.x4[2] = (orc_uint8) var39.x4[2];
1983     var42.x4[3] = (orc_uint8) var39.x4[3];
1984     /* 5: subw */
1985     var43.x4[0] = var42.x4[0] - var41.x4[0];
1986     var43.x4[1] = var42.x4[1] - var41.x4[1];
1987     var43.x4[2] = var42.x4[2] - var41.x4[2];
1988     var43.x4[3] = var42.x4[3] - var41.x4[3];
1989     /* 7: mullw */
1990     var44.x4[0] = (var43.x4[0] * var37.x4[0]) & 0xffff;
1991     var44.x4[1] = (var43.x4[1] * var37.x4[1]) & 0xffff;
1992     var44.x4[2] = (var43.x4[2] * var37.x4[2]) & 0xffff;
1993     var44.x4[3] = (var43.x4[3] * var37.x4[3]) & 0xffff;
1994     /* 8: convhwb */
1995     var45.x4[0] = ((orc_uint16) var44.x4[0]) >> 8;
1996     var45.x4[1] = ((orc_uint16) var44.x4[1]) >> 8;
1997     var45.x4[2] = ((orc_uint16) var44.x4[2]) >> 8;
1998     var45.x4[3] = ((orc_uint16) var44.x4[3]) >> 8;
1999     /* 9: addb */
2000     var38.x4[0] = var45.x4[0] + var40.x4[0];
2001     var38.x4[1] = var45.x4[1] + var40.x4[1];
2002     var38.x4[2] = var45.x4[2] + var40.x4[2];
2003     var38.x4[3] = var45.x4[3] + var40.x4[3];
2004     /* 10: storel */
2005     ptr0[i] = var38;
2006   }
2007
2008 }
2009
2010 void
2011 video_scale_orc_resample_merge_bilinear_u32 (guint8 * ORC_RESTRICT d1,
2012     guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1,
2013     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
2014 {
2015   OrcExecutor _ex, *ex = &_ex;
2016   static volatile int p_inited = 0;
2017   static OrcCode *c = 0;
2018   void (*func) (OrcExecutor *);
2019
2020   if (!p_inited) {
2021     orc_once_mutex_lock ();
2022     if (!p_inited) {
2023       OrcProgram *p;
2024
2025       p = orc_program_new ();
2026       orc_program_set_name (p, "video_scale_orc_resample_merge_bilinear_u32");
2027       orc_program_set_backup_function (p,
2028           _backup_video_scale_orc_resample_merge_bilinear_u32);
2029       orc_program_add_destination (p, 4, "d1");
2030       orc_program_add_destination (p, 4, "d2");
2031       orc_program_add_source (p, 4, "s1");
2032       orc_program_add_source (p, 4, "s2");
2033       orc_program_add_parameter (p, 4, "p1");
2034       orc_program_add_parameter (p, 4, "p2");
2035       orc_program_add_parameter (p, 4, "p3");
2036       orc_program_add_temporary (p, 4, "t1");
2037       orc_program_add_temporary (p, 4, "t2");
2038       orc_program_add_temporary (p, 4, "t3");
2039       orc_program_add_temporary (p, 8, "t4");
2040       orc_program_add_temporary (p, 8, "t5");
2041
2042       orc_program_append_2 (p, "ldreslinl", 0, ORC_VAR_T2, ORC_VAR_S2,
2043           ORC_VAR_P2, ORC_VAR_P3);
2044       orc_program_append_2 (p, "storel", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
2045           ORC_VAR_D1);
2046       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
2047           ORC_VAR_D1);
2048       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
2049           ORC_VAR_D1);
2050       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
2051           ORC_VAR_D1);
2052       orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
2053           ORC_VAR_D1);
2054       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
2055           ORC_VAR_D1);
2056       orc_program_append_2 (p, "convhwb", 2, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1,
2057           ORC_VAR_D1);
2058       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T1,
2059           ORC_VAR_D1);
2060
2061       orc_program_compile (p);
2062       c = orc_program_take_code (p);
2063       orc_program_free (p);
2064     }
2065     p_inited = TRUE;
2066     orc_once_mutex_unlock ();
2067   }
2068   ex->arrays[ORC_VAR_A2] = c;
2069   ex->program = 0;
2070
2071   ex->n = n;
2072   ex->arrays[ORC_VAR_D1] = d1;
2073   ex->arrays[ORC_VAR_D2] = d2;
2074   ex->arrays[ORC_VAR_S1] = (void *) s1;
2075   ex->arrays[ORC_VAR_S2] = (void *) s2;
2076   ex->params[ORC_VAR_P1] = p1;
2077   ex->params[ORC_VAR_P2] = p2;
2078   ex->params[ORC_VAR_P3] = p3;
2079
2080   func = c->exec;
2081   func (ex);
2082 }
2083 #endif
2084
2085
2086 /* video_scale_orc_merge_bicubic_u8 */
2087 #ifdef DISABLE_ORC
2088 void
2089 video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
2090     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
2091     const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
2092     int p2, int p3, int p4, int n)
2093 {
2094   int i;
2095   orc_int8 *ORC_RESTRICT ptr0;
2096   const orc_int8 *ORC_RESTRICT ptr4;
2097   const orc_int8 *ORC_RESTRICT ptr5;
2098   const orc_int8 *ORC_RESTRICT ptr6;
2099   const orc_int8 *ORC_RESTRICT ptr7;
2100   orc_int8 var34;
2101   orc_int8 var35;
2102   orc_int8 var36;
2103   orc_int8 var37;
2104   orc_int8 var38;
2105   orc_int8 var39;
2106   orc_int8 var40;
2107   orc_int8 var41;
2108   orc_union16 var42;
2109   orc_int8 var43;
2110   orc_union16 var44;
2111   orc_union16 var45;
2112   orc_union16 var46;
2113   orc_union16 var47;
2114   orc_union16 var48;
2115   orc_union16 var49;
2116   orc_union16 var50;
2117   orc_union16 var51;
2118   orc_union16 var52;
2119
2120   ptr0 = (orc_int8 *) d1;
2121   ptr4 = (orc_int8 *) s1;
2122   ptr5 = (orc_int8 *) s2;
2123   ptr6 = (orc_int8 *) s3;
2124   ptr7 = (orc_int8 *) s4;
2125
2126   /* 1: loadpb */
2127   var35 = p2;
2128   /* 4: loadpb */
2129   var37 = p3;
2130   /* 8: loadpb */
2131   var39 = p1;
2132   /* 12: loadpb */
2133   var41 = p4;
2134   /* 15: loadpw */
2135   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
2136
2137   for (i = 0; i < n; i++) {
2138     /* 0: loadb */
2139     var34 = ptr5[i];
2140     /* 2: mulubw */
2141     var44.i = ((orc_uint8) var34) * ((orc_uint8) var35);
2142     /* 3: loadb */
2143     var36 = ptr6[i];
2144     /* 5: mulubw */
2145     var45.i = ((orc_uint8) var36) * ((orc_uint8) var37);
2146     /* 6: addw */
2147     var46.i = var44.i + var45.i;
2148     /* 7: loadb */
2149     var38 = ptr4[i];
2150     /* 9: mulubw */
2151     var47.i = ((orc_uint8) var38) * ((orc_uint8) var39);
2152     /* 10: subw */
2153     var48.i = var46.i - var47.i;
2154     /* 11: loadb */
2155     var40 = ptr7[i];
2156     /* 13: mulubw */
2157     var49.i = ((orc_uint8) var40) * ((orc_uint8) var41);
2158     /* 14: subw */
2159     var50.i = var48.i - var49.i;
2160     /* 16: addw */
2161     var51.i = var50.i + var42.i;
2162     /* 17: shrsw */
2163     var52.i = var51.i >> 6;
2164     /* 18: convsuswb */
2165     var43 = ORC_CLAMP_UB (var52.i);
2166     /* 19: storeb */
2167     ptr0[i] = var43;
2168   }
2169
2170 }
2171
2172 #else
2173 static void
2174 _backup_video_scale_orc_merge_bicubic_u8 (OrcExecutor * ORC_RESTRICT ex)
2175 {
2176   int i;
2177   int n = ex->n;
2178   orc_int8 *ORC_RESTRICT ptr0;
2179   const orc_int8 *ORC_RESTRICT ptr4;
2180   const orc_int8 *ORC_RESTRICT ptr5;
2181   const orc_int8 *ORC_RESTRICT ptr6;
2182   const orc_int8 *ORC_RESTRICT ptr7;
2183   orc_int8 var34;
2184   orc_int8 var35;
2185   orc_int8 var36;
2186   orc_int8 var37;
2187   orc_int8 var38;
2188   orc_int8 var39;
2189   orc_int8 var40;
2190   orc_int8 var41;
2191   orc_union16 var42;
2192   orc_int8 var43;
2193   orc_union16 var44;
2194   orc_union16 var45;
2195   orc_union16 var46;
2196   orc_union16 var47;
2197   orc_union16 var48;
2198   orc_union16 var49;
2199   orc_union16 var50;
2200   orc_union16 var51;
2201   orc_union16 var52;
2202
2203   ptr0 = (orc_int8 *) ex->arrays[0];
2204   ptr4 = (orc_int8 *) ex->arrays[4];
2205   ptr5 = (orc_int8 *) ex->arrays[5];
2206   ptr6 = (orc_int8 *) ex->arrays[6];
2207   ptr7 = (orc_int8 *) ex->arrays[7];
2208
2209   /* 1: loadpb */
2210   var35 = ex->params[25];
2211   /* 4: loadpb */
2212   var37 = ex->params[26];
2213   /* 8: loadpb */
2214   var39 = ex->params[24];
2215   /* 12: loadpb */
2216   var41 = ex->params[27];
2217   /* 15: loadpw */
2218   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
2219
2220   for (i = 0; i < n; i++) {
2221     /* 0: loadb */
2222     var34 = ptr5[i];
2223     /* 2: mulubw */
2224     var44.i = ((orc_uint8) var34) * ((orc_uint8) var35);
2225     /* 3: loadb */
2226     var36 = ptr6[i];
2227     /* 5: mulubw */
2228     var45.i = ((orc_uint8) var36) * ((orc_uint8) var37);
2229     /* 6: addw */
2230     var46.i = var44.i + var45.i;
2231     /* 7: loadb */
2232     var38 = ptr4[i];
2233     /* 9: mulubw */
2234     var47.i = ((orc_uint8) var38) * ((orc_uint8) var39);
2235     /* 10: subw */
2236     var48.i = var46.i - var47.i;
2237     /* 11: loadb */
2238     var40 = ptr7[i];
2239     /* 13: mulubw */
2240     var49.i = ((orc_uint8) var40) * ((orc_uint8) var41);
2241     /* 14: subw */
2242     var50.i = var48.i - var49.i;
2243     /* 16: addw */
2244     var51.i = var50.i + var42.i;
2245     /* 17: shrsw */
2246     var52.i = var51.i >> 6;
2247     /* 18: convsuswb */
2248     var43 = ORC_CLAMP_UB (var52.i);
2249     /* 19: storeb */
2250     ptr0[i] = var43;
2251   }
2252
2253 }
2254
2255 void
2256 video_scale_orc_merge_bicubic_u8 (guint8 * ORC_RESTRICT d1,
2257     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
2258     const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int p1,
2259     int p2, int p3, int p4, int n)
2260 {
2261   OrcExecutor _ex, *ex = &_ex;
2262   static volatile int p_inited = 0;
2263   static OrcCode *c = 0;
2264   void (*func) (OrcExecutor *);
2265
2266   if (!p_inited) {
2267     orc_once_mutex_lock ();
2268     if (!p_inited) {
2269       OrcProgram *p;
2270
2271       p = orc_program_new ();
2272       orc_program_set_name (p, "video_scale_orc_merge_bicubic_u8");
2273       orc_program_set_backup_function (p,
2274           _backup_video_scale_orc_merge_bicubic_u8);
2275       orc_program_add_destination (p, 1, "d1");
2276       orc_program_add_source (p, 1, "s1");
2277       orc_program_add_source (p, 1, "s2");
2278       orc_program_add_source (p, 1, "s3");
2279       orc_program_add_source (p, 1, "s4");
2280       orc_program_add_constant (p, 4, 0x00000020, "c1");
2281       orc_program_add_constant (p, 4, 0x00000006, "c2");
2282       orc_program_add_parameter (p, 4, "p1");
2283       orc_program_add_parameter (p, 4, "p2");
2284       orc_program_add_parameter (p, 4, "p3");
2285       orc_program_add_parameter (p, 4, "p4");
2286       orc_program_add_temporary (p, 2, "t1");
2287       orc_program_add_temporary (p, 2, "t2");
2288
2289       orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_P2,
2290           ORC_VAR_D1);
2291       orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P3,
2292           ORC_VAR_D1);
2293       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
2294           ORC_VAR_D1);
2295       orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_P1,
2296           ORC_VAR_D1);
2297       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
2298           ORC_VAR_D1);
2299       orc_program_append_2 (p, "mulubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_P4,
2300           ORC_VAR_D1);
2301       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
2302           ORC_VAR_D1);
2303       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
2304           ORC_VAR_D1);
2305       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
2306           ORC_VAR_D1);
2307       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
2308           ORC_VAR_D1, ORC_VAR_D1);
2309
2310       orc_program_compile (p);
2311       c = orc_program_take_code (p);
2312       orc_program_free (p);
2313     }
2314     p_inited = TRUE;
2315     orc_once_mutex_unlock ();
2316   }
2317   ex->arrays[ORC_VAR_A2] = c;
2318   ex->program = 0;
2319
2320   ex->n = n;
2321   ex->arrays[ORC_VAR_D1] = d1;
2322   ex->arrays[ORC_VAR_S1] = (void *) s1;
2323   ex->arrays[ORC_VAR_S2] = (void *) s2;
2324   ex->arrays[ORC_VAR_S3] = (void *) s3;
2325   ex->arrays[ORC_VAR_S4] = (void *) s4;
2326   ex->params[ORC_VAR_P1] = p1;
2327   ex->params[ORC_VAR_P2] = p2;
2328   ex->params[ORC_VAR_P3] = p3;
2329   ex->params[ORC_VAR_P4] = p4;
2330
2331   func = c->exec;
2332   func (ex);
2333 }
2334 #endif