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