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