compositor: Add support for I420/I422 high bitdepth formats
[platform/upstream/gstreamer.git] / subprojects / gst-plugins-base / gst / compositor / compositororc-dist.c
1
2 /* autogenerated from compositororc.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 compositor_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n);
99 void compositor_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
100     const guint32 * ORC_RESTRICT s1, int n);
101 void compositor_orc_memset_u16_2d (guint8 * ORC_RESTRICT d1, int d1_stride,
102     int p1, int n, int m);
103 void compositor_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
104     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
105 void compositor_orc_blend_u10 (guint8 * ORC_RESTRICT d1, int d1_stride,
106     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
107 void compositor_orc_blend_u12 (guint8 * ORC_RESTRICT d1, int d1_stride,
108     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
109 void compositor_orc_blend_u16 (guint8 * ORC_RESTRICT d1, int d1_stride,
110     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
111 void compositor_orc_blend_u10_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
112     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
113 void compositor_orc_blend_u12_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
114     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
115 void compositor_orc_blend_u16_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
116     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
117 void compositor_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
118     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
119 void compositor_orc_source_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
120     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
121 void compositor_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
122     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
123 void compositor_orc_source_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
124     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
125 void compositor_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
126     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
127 void compositor_orc_overlay_argb_addition (guint8 * ORC_RESTRICT d1,
128     int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n,
129     int m);
130 void compositor_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
131     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m);
132 void compositor_orc_overlay_bgra_addition (guint8 * ORC_RESTRICT d1,
133     int d1_stride, const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n,
134     int m);
135
136
137 /* begin Orc C target preamble */
138 #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
139 #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
140 #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
141 #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
142 #define ORC_SB_MAX 127
143 #define ORC_SB_MIN (-1-ORC_SB_MAX)
144 #define ORC_UB_MAX (orc_uint8) 255
145 #define ORC_UB_MIN 0
146 #define ORC_SW_MAX 32767
147 #define ORC_SW_MIN (-1-ORC_SW_MAX)
148 #define ORC_UW_MAX (orc_uint16)65535
149 #define ORC_UW_MIN 0
150 #define ORC_SL_MAX 2147483647
151 #define ORC_SL_MIN (-1-ORC_SL_MAX)
152 #define ORC_UL_MAX 4294967295U
153 #define ORC_UL_MIN 0
154 #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
155 #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
156 #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
157 #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
158 #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
159 #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
160 #define ORC_SWAP_W(x) ((((x)&0xffU)<<8) | (((x)&0xff00U)>>8))
161 #define ORC_SWAP_L(x) ((((x)&0xffU)<<24) | (((x)&0xff00U)<<8) | (((x)&0xff0000U)>>8) | (((x)&0xff000000U)>>24))
162 #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))
163 #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
164 #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
165 #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
166 #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
167 #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
168 #ifndef ORC_RESTRICT
169 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
170 #define ORC_RESTRICT restrict
171 #elif defined(__GNUC__) && __GNUC__ >= 4
172 #define ORC_RESTRICT __restrict__
173 #else
174 #define ORC_RESTRICT
175 #endif
176 #endif
177 /* end Orc C target preamble */
178
179
180
181 /* compositor_orc_splat_u32 */
182 #ifdef DISABLE_ORC
183 void
184 compositor_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
185 {
186   int i;
187   orc_union32 *ORC_RESTRICT ptr0;
188   orc_union32 var32;
189   orc_union32 var33;
190
191   ptr0 = (orc_union32 *) d1;
192
193   /* 0: loadpl */
194   var32.i = p1;
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 #else
206 static void
207 _backup_compositor_orc_splat_u32 (OrcExecutor * ORC_RESTRICT ex)
208 {
209   int i;
210   int n = ex->n;
211   orc_union32 *ORC_RESTRICT ptr0;
212   orc_union32 var32;
213   orc_union32 var33;
214
215   ptr0 = (orc_union32 *) ex->arrays[0];
216
217   /* 0: loadpl */
218   var32.i = ex->params[24];
219
220   for (i = 0; i < n; i++) {
221     /* 1: copyl */
222     var33.i = var32.i;
223     /* 2: storel */
224     ptr0[i] = var33;
225   }
226
227 }
228
229 void
230 compositor_orc_splat_u32 (guint32 * ORC_RESTRICT d1, int p1, int n)
231 {
232   OrcExecutor _ex, *ex = &_ex;
233   static volatile int p_inited = 0;
234   static OrcCode *c = 0;
235   void (*func) (OrcExecutor *);
236
237   if (!p_inited) {
238     orc_once_mutex_lock ();
239     if (!p_inited) {
240       OrcProgram *p;
241
242 #if 1
243       static const orc_uint8 bc[] = {
244         1, 9, 24, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111, 114,
245         99, 95, 115, 112, 108, 97, 116, 95, 117, 51, 50, 11, 4, 4, 16, 4,
246         112, 0, 24, 2, 0,
247       };
248       p = orc_program_new_from_static_bytecode (bc);
249       orc_program_set_backup_function (p, _backup_compositor_orc_splat_u32);
250 #else
251       p = orc_program_new ();
252       orc_program_set_name (p, "compositor_orc_splat_u32");
253       orc_program_set_backup_function (p, _backup_compositor_orc_splat_u32);
254       orc_program_add_destination (p, 4, "d1");
255       orc_program_add_parameter (p, 4, "p1");
256
257       orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
258           ORC_VAR_D1);
259 #endif
260
261       orc_program_compile (p);
262       c = orc_program_take_code (p);
263       orc_program_free (p);
264     }
265     p_inited = TRUE;
266     orc_once_mutex_unlock ();
267   }
268   ex->arrays[ORC_VAR_A2] = c;
269   ex->program = 0;
270
271   ex->n = n;
272   ex->arrays[ORC_VAR_D1] = d1;
273   ex->params[ORC_VAR_P1] = p1;
274
275   func = c->exec;
276   func (ex);
277 }
278 #endif
279
280
281 /* compositor_orc_memcpy_u32 */
282 #ifdef DISABLE_ORC
283 void
284 compositor_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
285     const guint32 * ORC_RESTRICT s1, int n)
286 {
287   int i;
288   orc_union32 *ORC_RESTRICT ptr0;
289   const orc_union32 *ORC_RESTRICT ptr4;
290   orc_union32 var32;
291   orc_union32 var33;
292
293   ptr0 = (orc_union32 *) d1;
294   ptr4 = (orc_union32 *) s1;
295
296
297   for (i = 0; i < n; i++) {
298     /* 0: loadl */
299     var32 = ptr4[i];
300     /* 1: copyl */
301     var33.i = var32.i;
302     /* 2: storel */
303     ptr0[i] = var33;
304   }
305
306 }
307
308 #else
309 static void
310 _backup_compositor_orc_memcpy_u32 (OrcExecutor * ORC_RESTRICT ex)
311 {
312   int i;
313   int n = ex->n;
314   orc_union32 *ORC_RESTRICT ptr0;
315   const orc_union32 *ORC_RESTRICT ptr4;
316   orc_union32 var32;
317   orc_union32 var33;
318
319   ptr0 = (orc_union32 *) ex->arrays[0];
320   ptr4 = (orc_union32 *) ex->arrays[4];
321
322
323   for (i = 0; i < n; i++) {
324     /* 0: loadl */
325     var32 = ptr4[i];
326     /* 1: copyl */
327     var33.i = var32.i;
328     /* 2: storel */
329     ptr0[i] = var33;
330   }
331
332 }
333
334 void
335 compositor_orc_memcpy_u32 (guint32 * ORC_RESTRICT d1,
336     const guint32 * ORC_RESTRICT s1, int n)
337 {
338   OrcExecutor _ex, *ex = &_ex;
339   static volatile int p_inited = 0;
340   static OrcCode *c = 0;
341   void (*func) (OrcExecutor *);
342
343   if (!p_inited) {
344     orc_once_mutex_lock ();
345     if (!p_inited) {
346       OrcProgram *p;
347
348 #if 1
349       static const orc_uint8 bc[] = {
350         1, 9, 25, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111, 114,
351         99, 95, 109, 101, 109, 99, 112, 121, 95, 117, 51, 50, 11, 4, 4, 12,
352         4, 4, 112, 0, 4, 2, 0,
353       };
354       p = orc_program_new_from_static_bytecode (bc);
355       orc_program_set_backup_function (p, _backup_compositor_orc_memcpy_u32);
356 #else
357       p = orc_program_new ();
358       orc_program_set_name (p, "compositor_orc_memcpy_u32");
359       orc_program_set_backup_function (p, _backup_compositor_orc_memcpy_u32);
360       orc_program_add_destination (p, 4, "d1");
361       orc_program_add_source (p, 4, "s1");
362
363       orc_program_append_2 (p, "copyl", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
364           ORC_VAR_D1);
365 #endif
366
367       orc_program_compile (p);
368       c = orc_program_take_code (p);
369       orc_program_free (p);
370     }
371     p_inited = TRUE;
372     orc_once_mutex_unlock ();
373   }
374   ex->arrays[ORC_VAR_A2] = c;
375   ex->program = 0;
376
377   ex->n = n;
378   ex->arrays[ORC_VAR_D1] = d1;
379   ex->arrays[ORC_VAR_S1] = (void *) s1;
380
381   func = c->exec;
382   func (ex);
383 }
384 #endif
385
386
387 /* compositor_orc_memset_u16_2d */
388 #ifdef DISABLE_ORC
389 void
390 compositor_orc_memset_u16_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1,
391     int n, int m)
392 {
393   int i;
394   int j;
395   orc_union16 *ORC_RESTRICT ptr0;
396   orc_union16 var32;
397
398   for (j = 0; j < m; j++) {
399     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
400
401     /* 0: loadpw */
402     var32.i = p1;
403
404     for (i = 0; i < n; i++) {
405       /* 1: storew */
406       ptr0[i] = var32;
407     }
408   }
409
410 }
411
412 #else
413 static void
414 _backup_compositor_orc_memset_u16_2d (OrcExecutor * ORC_RESTRICT ex)
415 {
416   int i;
417   int j;
418   int n = ex->n;
419   int m = ex->params[ORC_VAR_A1];
420   orc_union16 *ORC_RESTRICT ptr0;
421   orc_union16 var32;
422
423   for (j = 0; j < m; j++) {
424     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
425
426     /* 0: loadpw */
427     var32.i = ex->params[24];
428
429     for (i = 0; i < n; i++) {
430       /* 1: storew */
431       ptr0[i] = var32;
432     }
433   }
434
435 }
436
437 void
438 compositor_orc_memset_u16_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1,
439     int n, int m)
440 {
441   OrcExecutor _ex, *ex = &_ex;
442   static volatile int p_inited = 0;
443   static OrcCode *c = 0;
444   void (*func) (OrcExecutor *);
445
446   if (!p_inited) {
447     orc_once_mutex_lock ();
448     if (!p_inited) {
449       OrcProgram *p;
450
451 #if 1
452       static const orc_uint8 bc[] = {
453         1, 7, 9, 28, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
454         114, 99, 95, 109, 101, 109, 115, 101, 116, 95, 117, 49, 54, 95, 50, 100,
455         11, 2, 2, 16, 2, 97, 0, 24, 2, 0,
456       };
457       p = orc_program_new_from_static_bytecode (bc);
458       orc_program_set_backup_function (p, _backup_compositor_orc_memset_u16_2d);
459 #else
460       p = orc_program_new ();
461       orc_program_set_2d (p);
462       orc_program_set_name (p, "compositor_orc_memset_u16_2d");
463       orc_program_set_backup_function (p, _backup_compositor_orc_memset_u16_2d);
464       orc_program_add_destination (p, 2, "d1");
465       orc_program_add_parameter (p, 2, "p1");
466
467       orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
468           ORC_VAR_D1);
469 #endif
470
471       orc_program_compile (p);
472       c = orc_program_take_code (p);
473       orc_program_free (p);
474     }
475     p_inited = TRUE;
476     orc_once_mutex_unlock ();
477   }
478   ex->arrays[ORC_VAR_A2] = c;
479   ex->program = 0;
480
481   ex->n = n;
482   ORC_EXECUTOR_M (ex) = m;
483   ex->arrays[ORC_VAR_D1] = d1;
484   ex->params[ORC_VAR_D1] = d1_stride;
485   ex->params[ORC_VAR_P1] = p1;
486
487   func = c->exec;
488   func (ex);
489 }
490 #endif
491
492
493 /* compositor_orc_blend_u8 */
494 #ifdef DISABLE_ORC
495 void
496 compositor_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
497     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
498 {
499   int i;
500   int j;
501   orc_int8 *ORC_RESTRICT ptr0;
502   const orc_int8 *ORC_RESTRICT ptr4;
503   orc_int8 var34;
504   orc_int8 var35;
505   orc_union16 var36;
506   orc_int8 var37;
507   orc_union16 var38;
508   orc_union16 var39;
509   orc_union16 var40;
510   orc_union16 var41;
511   orc_union16 var42;
512   orc_union16 var43;
513   orc_union16 var44;
514
515   for (j = 0; j < m; j++) {
516     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
517     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
518
519     /* 5: loadpw */
520     var36.i = p1;
521
522     for (i = 0; i < n; i++) {
523       /* 0: loadb */
524       var34 = ptr0[i];
525       /* 1: convubw */
526       var38.i = (orc_uint8) var34;
527       /* 2: loadb */
528       var35 = ptr4[i];
529       /* 3: convubw */
530       var39.i = (orc_uint8) var35;
531       /* 4: subw */
532       var40.i = var39.i - var38.i;
533       /* 6: mullw */
534       var41.i = (var40.i * var36.i) & 0xffff;
535       /* 7: shlw */
536       var42.i = ((orc_uint16) var38.i) << 8;
537       /* 8: addw */
538       var43.i = var42.i + var41.i;
539       /* 9: shruw */
540       var44.i = ((orc_uint16) var43.i) >> 8;
541       /* 10: convsuswb */
542       var37 = ORC_CLAMP_UB (var44.i);
543       /* 11: storeb */
544       ptr0[i] = var37;
545     }
546   }
547
548 }
549
550 #else
551 static void
552 _backup_compositor_orc_blend_u8 (OrcExecutor * ORC_RESTRICT ex)
553 {
554   int i;
555   int j;
556   int n = ex->n;
557   int m = ex->params[ORC_VAR_A1];
558   orc_int8 *ORC_RESTRICT ptr0;
559   const orc_int8 *ORC_RESTRICT ptr4;
560   orc_int8 var34;
561   orc_int8 var35;
562   orc_union16 var36;
563   orc_int8 var37;
564   orc_union16 var38;
565   orc_union16 var39;
566   orc_union16 var40;
567   orc_union16 var41;
568   orc_union16 var42;
569   orc_union16 var43;
570   orc_union16 var44;
571
572   for (j = 0; j < m; j++) {
573     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
574     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
575
576     /* 5: loadpw */
577     var36.i = ex->params[24];
578
579     for (i = 0; i < n; i++) {
580       /* 0: loadb */
581       var34 = ptr0[i];
582       /* 1: convubw */
583       var38.i = (orc_uint8) var34;
584       /* 2: loadb */
585       var35 = ptr4[i];
586       /* 3: convubw */
587       var39.i = (orc_uint8) var35;
588       /* 4: subw */
589       var40.i = var39.i - var38.i;
590       /* 6: mullw */
591       var41.i = (var40.i * var36.i) & 0xffff;
592       /* 7: shlw */
593       var42.i = ((orc_uint16) var38.i) << 8;
594       /* 8: addw */
595       var43.i = var42.i + var41.i;
596       /* 9: shruw */
597       var44.i = ((orc_uint16) var43.i) >> 8;
598       /* 10: convsuswb */
599       var37 = ORC_CLAMP_UB (var44.i);
600       /* 11: storeb */
601       ptr0[i] = var37;
602     }
603   }
604
605 }
606
607 void
608 compositor_orc_blend_u8 (guint8 * ORC_RESTRICT d1, int d1_stride,
609     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
610 {
611   OrcExecutor _ex, *ex = &_ex;
612   static volatile int p_inited = 0;
613   static OrcCode *c = 0;
614   void (*func) (OrcExecutor *);
615
616   if (!p_inited) {
617     orc_once_mutex_lock ();
618     if (!p_inited) {
619       OrcProgram *p;
620
621 #if 1
622       static const orc_uint8 bc[] = {
623         1, 7, 9, 23, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
624         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 56, 11, 1, 1, 12, 1,
625         1, 14, 1, 8, 0, 0, 0, 16, 2, 20, 2, 20, 2, 150, 32, 0,
626         150, 33, 4, 98, 33, 33, 32, 89, 33, 33, 24, 93, 32, 32, 16, 70,
627         33, 32, 33, 95, 33, 33, 16, 160, 0, 33, 2, 0,
628       };
629       p = orc_program_new_from_static_bytecode (bc);
630       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u8);
631 #else
632       p = orc_program_new ();
633       orc_program_set_2d (p);
634       orc_program_set_name (p, "compositor_orc_blend_u8");
635       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u8);
636       orc_program_add_destination (p, 1, "d1");
637       orc_program_add_source (p, 1, "s1");
638       orc_program_add_constant (p, 1, 0x00000008, "c1");
639       orc_program_add_parameter (p, 2, "p1");
640       orc_program_add_temporary (p, 2, "t1");
641       orc_program_add_temporary (p, 2, "t2");
642
643       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
644           ORC_VAR_D1);
645       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
646           ORC_VAR_D1);
647       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
648           ORC_VAR_D1);
649       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
650           ORC_VAR_D1);
651       orc_program_append_2 (p, "shlw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
652           ORC_VAR_D1);
653       orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
654           ORC_VAR_D1);
655       orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
656           ORC_VAR_D1);
657       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T2,
658           ORC_VAR_D1, ORC_VAR_D1);
659 #endif
660
661       orc_program_compile (p);
662       c = orc_program_take_code (p);
663       orc_program_free (p);
664     }
665     p_inited = TRUE;
666     orc_once_mutex_unlock ();
667   }
668   ex->arrays[ORC_VAR_A2] = c;
669   ex->program = 0;
670
671   ex->n = n;
672   ORC_EXECUTOR_M (ex) = m;
673   ex->arrays[ORC_VAR_D1] = d1;
674   ex->params[ORC_VAR_D1] = d1_stride;
675   ex->arrays[ORC_VAR_S1] = (void *) s1;
676   ex->params[ORC_VAR_S1] = s1_stride;
677   ex->params[ORC_VAR_P1] = p1;
678
679   func = c->exec;
680   func (ex);
681 }
682 #endif
683
684
685 /* compositor_orc_blend_u10 */
686 #ifdef DISABLE_ORC
687 void
688 compositor_orc_blend_u10 (guint8 * ORC_RESTRICT d1, int d1_stride,
689     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
690 {
691   int i;
692   int j;
693   orc_union16 *ORC_RESTRICT ptr0;
694   const orc_union16 *ORC_RESTRICT ptr4;
695   orc_union16 var34;
696   orc_union16 var35;
697   orc_union32 var36;
698   orc_union16 var37;
699   orc_union32 var38;
700   orc_union32 var39;
701   orc_union32 var40;
702   orc_union32 var41;
703   orc_union32 var42;
704   orc_union32 var43;
705   orc_union32 var44;
706
707   for (j = 0; j < m; j++) {
708     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
709     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
710
711     /* 5: loadpl */
712     var36.i = p1;
713
714     for (i = 0; i < n; i++) {
715       /* 0: loadw */
716       var34 = ptr0[i];
717       /* 1: convuwl */
718       var38.i = (orc_uint16) var34.i;
719       /* 2: loadw */
720       var35 = ptr4[i];
721       /* 3: convuwl */
722       var39.i = (orc_uint16) var35.i;
723       /* 4: subl */
724       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
725       /* 6: mulll */
726       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
727       /* 7: shll */
728       var42.i = ((orc_uint32) var38.i) << 10;
729       /* 8: addl */
730       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
731       /* 9: shrul */
732       var44.i = ((orc_uint32) var43.i) >> 10;
733       /* 10: convsuslw */
734       var37.i = ORC_CLAMP_UW (var44.i);
735       /* 11: storew */
736       ptr0[i] = var37;
737     }
738   }
739
740 }
741
742 #else
743 static void
744 _backup_compositor_orc_blend_u10 (OrcExecutor * ORC_RESTRICT ex)
745 {
746   int i;
747   int j;
748   int n = ex->n;
749   int m = ex->params[ORC_VAR_A1];
750   orc_union16 *ORC_RESTRICT ptr0;
751   const orc_union16 *ORC_RESTRICT ptr4;
752   orc_union16 var34;
753   orc_union16 var35;
754   orc_union32 var36;
755   orc_union16 var37;
756   orc_union32 var38;
757   orc_union32 var39;
758   orc_union32 var40;
759   orc_union32 var41;
760   orc_union32 var42;
761   orc_union32 var43;
762   orc_union32 var44;
763
764   for (j = 0; j < m; j++) {
765     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
766     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
767
768     /* 5: loadpl */
769     var36.i = ex->params[24];
770
771     for (i = 0; i < n; i++) {
772       /* 0: loadw */
773       var34 = ptr0[i];
774       /* 1: convuwl */
775       var38.i = (orc_uint16) var34.i;
776       /* 2: loadw */
777       var35 = ptr4[i];
778       /* 3: convuwl */
779       var39.i = (orc_uint16) var35.i;
780       /* 4: subl */
781       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
782       /* 6: mulll */
783       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
784       /* 7: shll */
785       var42.i = ((orc_uint32) var38.i) << 10;
786       /* 8: addl */
787       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
788       /* 9: shrul */
789       var44.i = ((orc_uint32) var43.i) >> 10;
790       /* 10: convsuslw */
791       var37.i = ORC_CLAMP_UW (var44.i);
792       /* 11: storew */
793       ptr0[i] = var37;
794     }
795   }
796
797 }
798
799 void
800 compositor_orc_blend_u10 (guint8 * ORC_RESTRICT d1, int d1_stride,
801     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
802 {
803   OrcExecutor _ex, *ex = &_ex;
804   static volatile int p_inited = 0;
805   static OrcCode *c = 0;
806   void (*func) (OrcExecutor *);
807
808   if (!p_inited) {
809     orc_once_mutex_lock ();
810     if (!p_inited) {
811       OrcProgram *p;
812
813 #if 1
814       static const orc_uint8 bc[] = {
815         1, 7, 9, 24, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
816         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 48, 11, 2, 2, 12,
817         2, 2, 14, 1, 10, 0, 0, 0, 16, 2, 20, 4, 20, 4, 154, 32,
818         0, 154, 33, 4, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16,
819         103, 33, 32, 33, 126, 33, 33, 16, 166, 0, 33, 2, 0,
820       };
821       p = orc_program_new_from_static_bytecode (bc);
822       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u10);
823 #else
824       p = orc_program_new ();
825       orc_program_set_2d (p);
826       orc_program_set_name (p, "compositor_orc_blend_u10");
827       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u10);
828       orc_program_add_destination (p, 2, "d1");
829       orc_program_add_source (p, 2, "s1");
830       orc_program_add_constant (p, 1, 0x0000000a, "c1");
831       orc_program_add_parameter (p, 2, "p1");
832       orc_program_add_temporary (p, 4, "t1");
833       orc_program_add_temporary (p, 4, "t2");
834
835       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
836           ORC_VAR_D1);
837       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
838           ORC_VAR_D1);
839       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
840           ORC_VAR_D1);
841       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
842           ORC_VAR_D1);
843       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
844           ORC_VAR_D1);
845       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
846           ORC_VAR_D1);
847       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
848           ORC_VAR_D1);
849       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T2,
850           ORC_VAR_D1, ORC_VAR_D1);
851 #endif
852
853       orc_program_compile (p);
854       c = orc_program_take_code (p);
855       orc_program_free (p);
856     }
857     p_inited = TRUE;
858     orc_once_mutex_unlock ();
859   }
860   ex->arrays[ORC_VAR_A2] = c;
861   ex->program = 0;
862
863   ex->n = n;
864   ORC_EXECUTOR_M (ex) = m;
865   ex->arrays[ORC_VAR_D1] = d1;
866   ex->params[ORC_VAR_D1] = d1_stride;
867   ex->arrays[ORC_VAR_S1] = (void *) s1;
868   ex->params[ORC_VAR_S1] = s1_stride;
869   ex->params[ORC_VAR_P1] = p1;
870
871   func = c->exec;
872   func (ex);
873 }
874 #endif
875
876
877 /* compositor_orc_blend_u12 */
878 #ifdef DISABLE_ORC
879 void
880 compositor_orc_blend_u12 (guint8 * ORC_RESTRICT d1, int d1_stride,
881     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
882 {
883   int i;
884   int j;
885   orc_union16 *ORC_RESTRICT ptr0;
886   const orc_union16 *ORC_RESTRICT ptr4;
887   orc_union16 var34;
888   orc_union16 var35;
889   orc_union32 var36;
890   orc_union16 var37;
891   orc_union32 var38;
892   orc_union32 var39;
893   orc_union32 var40;
894   orc_union32 var41;
895   orc_union32 var42;
896   orc_union32 var43;
897   orc_union32 var44;
898
899   for (j = 0; j < m; j++) {
900     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
901     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
902
903     /* 5: loadpl */
904     var36.i = p1;
905
906     for (i = 0; i < n; i++) {
907       /* 0: loadw */
908       var34 = ptr0[i];
909       /* 1: convuwl */
910       var38.i = (orc_uint16) var34.i;
911       /* 2: loadw */
912       var35 = ptr4[i];
913       /* 3: convuwl */
914       var39.i = (orc_uint16) var35.i;
915       /* 4: subl */
916       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
917       /* 6: mulll */
918       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
919       /* 7: shll */
920       var42.i = ((orc_uint32) var38.i) << 12;
921       /* 8: addl */
922       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
923       /* 9: shrul */
924       var44.i = ((orc_uint32) var43.i) >> 12;
925       /* 10: convsuslw */
926       var37.i = ORC_CLAMP_UW (var44.i);
927       /* 11: storew */
928       ptr0[i] = var37;
929     }
930   }
931
932 }
933
934 #else
935 static void
936 _backup_compositor_orc_blend_u12 (OrcExecutor * ORC_RESTRICT ex)
937 {
938   int i;
939   int j;
940   int n = ex->n;
941   int m = ex->params[ORC_VAR_A1];
942   orc_union16 *ORC_RESTRICT ptr0;
943   const orc_union16 *ORC_RESTRICT ptr4;
944   orc_union16 var34;
945   orc_union16 var35;
946   orc_union32 var36;
947   orc_union16 var37;
948   orc_union32 var38;
949   orc_union32 var39;
950   orc_union32 var40;
951   orc_union32 var41;
952   orc_union32 var42;
953   orc_union32 var43;
954   orc_union32 var44;
955
956   for (j = 0; j < m; j++) {
957     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
958     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
959
960     /* 5: loadpl */
961     var36.i = ex->params[24];
962
963     for (i = 0; i < n; i++) {
964       /* 0: loadw */
965       var34 = ptr0[i];
966       /* 1: convuwl */
967       var38.i = (orc_uint16) var34.i;
968       /* 2: loadw */
969       var35 = ptr4[i];
970       /* 3: convuwl */
971       var39.i = (orc_uint16) var35.i;
972       /* 4: subl */
973       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
974       /* 6: mulll */
975       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
976       /* 7: shll */
977       var42.i = ((orc_uint32) var38.i) << 12;
978       /* 8: addl */
979       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
980       /* 9: shrul */
981       var44.i = ((orc_uint32) var43.i) >> 12;
982       /* 10: convsuslw */
983       var37.i = ORC_CLAMP_UW (var44.i);
984       /* 11: storew */
985       ptr0[i] = var37;
986     }
987   }
988
989 }
990
991 void
992 compositor_orc_blend_u12 (guint8 * ORC_RESTRICT d1, int d1_stride,
993     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
994 {
995   OrcExecutor _ex, *ex = &_ex;
996   static volatile int p_inited = 0;
997   static OrcCode *c = 0;
998   void (*func) (OrcExecutor *);
999
1000   if (!p_inited) {
1001     orc_once_mutex_lock ();
1002     if (!p_inited) {
1003       OrcProgram *p;
1004
1005 #if 1
1006       static const orc_uint8 bc[] = {
1007         1, 7, 9, 24, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
1008         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 50, 11, 2, 2, 12,
1009         2, 2, 14, 1, 12, 0, 0, 0, 16, 2, 20, 4, 20, 4, 154, 32,
1010         0, 154, 33, 4, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16,
1011         103, 33, 32, 33, 126, 33, 33, 16, 166, 0, 33, 2, 0,
1012       };
1013       p = orc_program_new_from_static_bytecode (bc);
1014       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u12);
1015 #else
1016       p = orc_program_new ();
1017       orc_program_set_2d (p);
1018       orc_program_set_name (p, "compositor_orc_blend_u12");
1019       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u12);
1020       orc_program_add_destination (p, 2, "d1");
1021       orc_program_add_source (p, 2, "s1");
1022       orc_program_add_constant (p, 1, 0x0000000c, "c1");
1023       orc_program_add_parameter (p, 2, "p1");
1024       orc_program_add_temporary (p, 4, "t1");
1025       orc_program_add_temporary (p, 4, "t2");
1026
1027       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
1028           ORC_VAR_D1);
1029       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
1030           ORC_VAR_D1);
1031       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1032           ORC_VAR_D1);
1033       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
1034           ORC_VAR_D1);
1035       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1036           ORC_VAR_D1);
1037       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
1038           ORC_VAR_D1);
1039       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1040           ORC_VAR_D1);
1041       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T2,
1042           ORC_VAR_D1, ORC_VAR_D1);
1043 #endif
1044
1045       orc_program_compile (p);
1046       c = orc_program_take_code (p);
1047       orc_program_free (p);
1048     }
1049     p_inited = TRUE;
1050     orc_once_mutex_unlock ();
1051   }
1052   ex->arrays[ORC_VAR_A2] = c;
1053   ex->program = 0;
1054
1055   ex->n = n;
1056   ORC_EXECUTOR_M (ex) = m;
1057   ex->arrays[ORC_VAR_D1] = d1;
1058   ex->params[ORC_VAR_D1] = d1_stride;
1059   ex->arrays[ORC_VAR_S1] = (void *) s1;
1060   ex->params[ORC_VAR_S1] = s1_stride;
1061   ex->params[ORC_VAR_P1] = p1;
1062
1063   func = c->exec;
1064   func (ex);
1065 }
1066 #endif
1067
1068
1069 /* compositor_orc_blend_u16 */
1070 #ifdef DISABLE_ORC
1071 void
1072 compositor_orc_blend_u16 (guint8 * ORC_RESTRICT d1, int d1_stride,
1073     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1074 {
1075   int i;
1076   int j;
1077   orc_union16 *ORC_RESTRICT ptr0;
1078   const orc_union16 *ORC_RESTRICT ptr4;
1079   orc_union16 var34;
1080   orc_union16 var35;
1081   orc_union32 var36;
1082   orc_union16 var37;
1083   orc_union32 var38;
1084   orc_union32 var39;
1085   orc_union32 var40;
1086   orc_union32 var41;
1087   orc_union32 var42;
1088   orc_union32 var43;
1089   orc_union32 var44;
1090
1091   for (j = 0; j < m; j++) {
1092     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
1093     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
1094
1095     /* 5: loadpl */
1096     var36.i = p1;
1097
1098     for (i = 0; i < n; i++) {
1099       /* 0: loadw */
1100       var34 = ptr0[i];
1101       /* 1: convuwl */
1102       var38.i = (orc_uint16) var34.i;
1103       /* 2: loadw */
1104       var35 = ptr4[i];
1105       /* 3: convuwl */
1106       var39.i = (orc_uint16) var35.i;
1107       /* 4: subl */
1108       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
1109       /* 6: mulll */
1110       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
1111       /* 7: shll */
1112       var42.i = ((orc_uint32) var38.i) << 16;
1113       /* 8: addl */
1114       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
1115       /* 9: shrul */
1116       var44.i = ((orc_uint32) var43.i) >> 16;
1117       /* 10: convsuslw */
1118       var37.i = ORC_CLAMP_UW (var44.i);
1119       /* 11: storew */
1120       ptr0[i] = var37;
1121     }
1122   }
1123
1124 }
1125
1126 #else
1127 static void
1128 _backup_compositor_orc_blend_u16 (OrcExecutor * ORC_RESTRICT ex)
1129 {
1130   int i;
1131   int j;
1132   int n = ex->n;
1133   int m = ex->params[ORC_VAR_A1];
1134   orc_union16 *ORC_RESTRICT ptr0;
1135   const orc_union16 *ORC_RESTRICT ptr4;
1136   orc_union16 var34;
1137   orc_union16 var35;
1138   orc_union32 var36;
1139   orc_union16 var37;
1140   orc_union32 var38;
1141   orc_union32 var39;
1142   orc_union32 var40;
1143   orc_union32 var41;
1144   orc_union32 var42;
1145   orc_union32 var43;
1146   orc_union32 var44;
1147
1148   for (j = 0; j < m; j++) {
1149     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
1150     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
1151
1152     /* 5: loadpl */
1153     var36.i = ex->params[24];
1154
1155     for (i = 0; i < n; i++) {
1156       /* 0: loadw */
1157       var34 = ptr0[i];
1158       /* 1: convuwl */
1159       var38.i = (orc_uint16) var34.i;
1160       /* 2: loadw */
1161       var35 = ptr4[i];
1162       /* 3: convuwl */
1163       var39.i = (orc_uint16) var35.i;
1164       /* 4: subl */
1165       var40.i = ((orc_uint32) var39.i) - ((orc_uint32) var38.i);
1166       /* 6: mulll */
1167       var41.i = (((orc_uint32) var40.i) * ((orc_uint32) var36.i)) & 0xffffffff;
1168       /* 7: shll */
1169       var42.i = ((orc_uint32) var38.i) << 16;
1170       /* 8: addl */
1171       var43.i = ((orc_uint32) var42.i) + ((orc_uint32) var41.i);
1172       /* 9: shrul */
1173       var44.i = ((orc_uint32) var43.i) >> 16;
1174       /* 10: convsuslw */
1175       var37.i = ORC_CLAMP_UW (var44.i);
1176       /* 11: storew */
1177       ptr0[i] = var37;
1178     }
1179   }
1180
1181 }
1182
1183 void
1184 compositor_orc_blend_u16 (guint8 * ORC_RESTRICT d1, int d1_stride,
1185     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1186 {
1187   OrcExecutor _ex, *ex = &_ex;
1188   static volatile int p_inited = 0;
1189   static OrcCode *c = 0;
1190   void (*func) (OrcExecutor *);
1191
1192   if (!p_inited) {
1193     orc_once_mutex_lock ();
1194     if (!p_inited) {
1195       OrcProgram *p;
1196
1197 #if 1
1198       static const orc_uint8 bc[] = {
1199         1, 7, 9, 24, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
1200         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 54, 11, 2, 2, 12,
1201         2, 2, 14, 1, 16, 0, 0, 0, 16, 2, 20, 4, 20, 4, 154, 32,
1202         0, 154, 33, 4, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16,
1203         103, 33, 32, 33, 126, 33, 33, 16, 166, 0, 33, 2, 0,
1204       };
1205       p = orc_program_new_from_static_bytecode (bc);
1206       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u16);
1207 #else
1208       p = orc_program_new ();
1209       orc_program_set_2d (p);
1210       orc_program_set_name (p, "compositor_orc_blend_u16");
1211       orc_program_set_backup_function (p, _backup_compositor_orc_blend_u16);
1212       orc_program_add_destination (p, 2, "d1");
1213       orc_program_add_source (p, 2, "s1");
1214       orc_program_add_constant (p, 1, 0x00000010, "c1");
1215       orc_program_add_parameter (p, 2, "p1");
1216       orc_program_add_temporary (p, 4, "t1");
1217       orc_program_add_temporary (p, 4, "t2");
1218
1219       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
1220           ORC_VAR_D1);
1221       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_D1,
1222           ORC_VAR_D1);
1223       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1224           ORC_VAR_D1);
1225       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
1226           ORC_VAR_D1);
1227       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1228           ORC_VAR_D1);
1229       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
1230           ORC_VAR_D1);
1231       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1232           ORC_VAR_D1);
1233       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_D1, ORC_VAR_T2,
1234           ORC_VAR_D1, ORC_VAR_D1);
1235 #endif
1236
1237       orc_program_compile (p);
1238       c = orc_program_take_code (p);
1239       orc_program_free (p);
1240     }
1241     p_inited = TRUE;
1242     orc_once_mutex_unlock ();
1243   }
1244   ex->arrays[ORC_VAR_A2] = c;
1245   ex->program = 0;
1246
1247   ex->n = n;
1248   ORC_EXECUTOR_M (ex) = m;
1249   ex->arrays[ORC_VAR_D1] = d1;
1250   ex->params[ORC_VAR_D1] = d1_stride;
1251   ex->arrays[ORC_VAR_S1] = (void *) s1;
1252   ex->params[ORC_VAR_S1] = s1_stride;
1253   ex->params[ORC_VAR_P1] = p1;
1254
1255   func = c->exec;
1256   func (ex);
1257 }
1258 #endif
1259
1260
1261 /* compositor_orc_blend_u10_swap */
1262 #ifdef DISABLE_ORC
1263 void
1264 compositor_orc_blend_u10_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1265     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1266 {
1267   int i;
1268   int j;
1269   orc_union16 *ORC_RESTRICT ptr0;
1270   const orc_union16 *ORC_RESTRICT ptr4;
1271   orc_union16 var35;
1272   orc_union16 var36;
1273   orc_union32 var37;
1274   orc_union16 var38;
1275   orc_union16 var39;
1276   orc_union32 var40;
1277   orc_union16 var41;
1278   orc_union32 var42;
1279   orc_union32 var43;
1280   orc_union32 var44;
1281   orc_union32 var45;
1282   orc_union32 var46;
1283   orc_union32 var47;
1284   orc_union16 var48;
1285
1286   for (j = 0; j < m; j++) {
1287     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
1288     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
1289
1290     /* 7: loadpl */
1291     var37.i = p1;
1292
1293     for (i = 0; i < n; i++) {
1294       /* 0: loadw */
1295       var35 = ptr0[i];
1296       /* 1: swapw */
1297       var39.i = ORC_SWAP_W (var35.i);
1298       /* 2: convuwl */
1299       var40.i = (orc_uint16) var39.i;
1300       /* 3: loadw */
1301       var36 = ptr4[i];
1302       /* 4: swapw */
1303       var41.i = ORC_SWAP_W (var36.i);
1304       /* 5: convuwl */
1305       var42.i = (orc_uint16) var41.i;
1306       /* 6: subl */
1307       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1308       /* 8: mulll */
1309       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1310       /* 9: shll */
1311       var45.i = ((orc_uint32) var40.i) << 10;
1312       /* 10: addl */
1313       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1314       /* 11: shrul */
1315       var47.i = ((orc_uint32) var46.i) >> 10;
1316       /* 12: convsuslw */
1317       var48.i = ORC_CLAMP_UW (var47.i);
1318       /* 13: swapw */
1319       var38.i = ORC_SWAP_W (var48.i);
1320       /* 14: storew */
1321       ptr0[i] = var38;
1322     }
1323   }
1324
1325 }
1326
1327 #else
1328 static void
1329 _backup_compositor_orc_blend_u10_swap (OrcExecutor * ORC_RESTRICT ex)
1330 {
1331   int i;
1332   int j;
1333   int n = ex->n;
1334   int m = ex->params[ORC_VAR_A1];
1335   orc_union16 *ORC_RESTRICT ptr0;
1336   const orc_union16 *ORC_RESTRICT ptr4;
1337   orc_union16 var35;
1338   orc_union16 var36;
1339   orc_union32 var37;
1340   orc_union16 var38;
1341   orc_union16 var39;
1342   orc_union32 var40;
1343   orc_union16 var41;
1344   orc_union32 var42;
1345   orc_union32 var43;
1346   orc_union32 var44;
1347   orc_union32 var45;
1348   orc_union32 var46;
1349   orc_union32 var47;
1350   orc_union16 var48;
1351
1352   for (j = 0; j < m; j++) {
1353     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
1354     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
1355
1356     /* 7: loadpl */
1357     var37.i = ex->params[24];
1358
1359     for (i = 0; i < n; i++) {
1360       /* 0: loadw */
1361       var35 = ptr0[i];
1362       /* 1: swapw */
1363       var39.i = ORC_SWAP_W (var35.i);
1364       /* 2: convuwl */
1365       var40.i = (orc_uint16) var39.i;
1366       /* 3: loadw */
1367       var36 = ptr4[i];
1368       /* 4: swapw */
1369       var41.i = ORC_SWAP_W (var36.i);
1370       /* 5: convuwl */
1371       var42.i = (orc_uint16) var41.i;
1372       /* 6: subl */
1373       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1374       /* 8: mulll */
1375       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1376       /* 9: shll */
1377       var45.i = ((orc_uint32) var40.i) << 10;
1378       /* 10: addl */
1379       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1380       /* 11: shrul */
1381       var47.i = ((orc_uint32) var46.i) >> 10;
1382       /* 12: convsuslw */
1383       var48.i = ORC_CLAMP_UW (var47.i);
1384       /* 13: swapw */
1385       var38.i = ORC_SWAP_W (var48.i);
1386       /* 14: storew */
1387       ptr0[i] = var38;
1388     }
1389   }
1390
1391 }
1392
1393 void
1394 compositor_orc_blend_u10_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1395     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1396 {
1397   OrcExecutor _ex, *ex = &_ex;
1398   static volatile int p_inited = 0;
1399   static OrcCode *c = 0;
1400   void (*func) (OrcExecutor *);
1401
1402   if (!p_inited) {
1403     orc_once_mutex_lock ();
1404     if (!p_inited) {
1405       OrcProgram *p;
1406
1407 #if 1
1408       static const orc_uint8 bc[] = {
1409         1, 7, 9, 29, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
1410         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 48, 95, 115, 119, 97,
1411         112, 11, 2, 2, 12, 2, 2, 14, 1, 10, 0, 0, 0, 16, 2, 20,
1412         4, 20, 4, 20, 2, 183, 34, 0, 154, 32, 34, 183, 34, 4, 154, 33,
1413         34, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16, 103, 33, 32,
1414         33, 126, 33, 33, 16, 166, 34, 33, 183, 0, 34, 2, 0,
1415       };
1416       p = orc_program_new_from_static_bytecode (bc);
1417       orc_program_set_backup_function (p,
1418           _backup_compositor_orc_blend_u10_swap);
1419 #else
1420       p = orc_program_new ();
1421       orc_program_set_2d (p);
1422       orc_program_set_name (p, "compositor_orc_blend_u10_swap");
1423       orc_program_set_backup_function (p,
1424           _backup_compositor_orc_blend_u10_swap);
1425       orc_program_add_destination (p, 2, "d1");
1426       orc_program_add_source (p, 2, "s1");
1427       orc_program_add_constant (p, 1, 0x0000000a, "c1");
1428       orc_program_add_parameter (p, 2, "p1");
1429       orc_program_add_temporary (p, 4, "t1");
1430       orc_program_add_temporary (p, 4, "t2");
1431       orc_program_add_temporary (p, 2, "t3");
1432
1433       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_D1, ORC_VAR_D1,
1434           ORC_VAR_D1);
1435       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1,
1436           ORC_VAR_D1);
1437       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
1438           ORC_VAR_D1);
1439       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_D1,
1440           ORC_VAR_D1);
1441       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1442           ORC_VAR_D1);
1443       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
1444           ORC_VAR_D1);
1445       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1446           ORC_VAR_D1);
1447       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
1448           ORC_VAR_D1);
1449       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1450           ORC_VAR_D1);
1451       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T3, ORC_VAR_T2,
1452           ORC_VAR_D1, ORC_VAR_D1);
1453       orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
1454           ORC_VAR_D1);
1455 #endif
1456
1457       orc_program_compile (p);
1458       c = orc_program_take_code (p);
1459       orc_program_free (p);
1460     }
1461     p_inited = TRUE;
1462     orc_once_mutex_unlock ();
1463   }
1464   ex->arrays[ORC_VAR_A2] = c;
1465   ex->program = 0;
1466
1467   ex->n = n;
1468   ORC_EXECUTOR_M (ex) = m;
1469   ex->arrays[ORC_VAR_D1] = d1;
1470   ex->params[ORC_VAR_D1] = d1_stride;
1471   ex->arrays[ORC_VAR_S1] = (void *) s1;
1472   ex->params[ORC_VAR_S1] = s1_stride;
1473   ex->params[ORC_VAR_P1] = p1;
1474
1475   func = c->exec;
1476   func (ex);
1477 }
1478 #endif
1479
1480
1481 /* compositor_orc_blend_u12_swap */
1482 #ifdef DISABLE_ORC
1483 void
1484 compositor_orc_blend_u12_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1485     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1486 {
1487   int i;
1488   int j;
1489   orc_union16 *ORC_RESTRICT ptr0;
1490   const orc_union16 *ORC_RESTRICT ptr4;
1491   orc_union16 var35;
1492   orc_union16 var36;
1493   orc_union32 var37;
1494   orc_union16 var38;
1495   orc_union16 var39;
1496   orc_union32 var40;
1497   orc_union16 var41;
1498   orc_union32 var42;
1499   orc_union32 var43;
1500   orc_union32 var44;
1501   orc_union32 var45;
1502   orc_union32 var46;
1503   orc_union32 var47;
1504   orc_union16 var48;
1505
1506   for (j = 0; j < m; j++) {
1507     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
1508     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
1509
1510     /* 7: loadpl */
1511     var37.i = p1;
1512
1513     for (i = 0; i < n; i++) {
1514       /* 0: loadw */
1515       var35 = ptr0[i];
1516       /* 1: swapw */
1517       var39.i = ORC_SWAP_W (var35.i);
1518       /* 2: convuwl */
1519       var40.i = (orc_uint16) var39.i;
1520       /* 3: loadw */
1521       var36 = ptr4[i];
1522       /* 4: swapw */
1523       var41.i = ORC_SWAP_W (var36.i);
1524       /* 5: convuwl */
1525       var42.i = (orc_uint16) var41.i;
1526       /* 6: subl */
1527       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1528       /* 8: mulll */
1529       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1530       /* 9: shll */
1531       var45.i = ((orc_uint32) var40.i) << 12;
1532       /* 10: addl */
1533       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1534       /* 11: shrul */
1535       var47.i = ((orc_uint32) var46.i) >> 12;
1536       /* 12: convsuslw */
1537       var48.i = ORC_CLAMP_UW (var47.i);
1538       /* 13: swapw */
1539       var38.i = ORC_SWAP_W (var48.i);
1540       /* 14: storew */
1541       ptr0[i] = var38;
1542     }
1543   }
1544
1545 }
1546
1547 #else
1548 static void
1549 _backup_compositor_orc_blend_u12_swap (OrcExecutor * ORC_RESTRICT ex)
1550 {
1551   int i;
1552   int j;
1553   int n = ex->n;
1554   int m = ex->params[ORC_VAR_A1];
1555   orc_union16 *ORC_RESTRICT ptr0;
1556   const orc_union16 *ORC_RESTRICT ptr4;
1557   orc_union16 var35;
1558   orc_union16 var36;
1559   orc_union32 var37;
1560   orc_union16 var38;
1561   orc_union16 var39;
1562   orc_union32 var40;
1563   orc_union16 var41;
1564   orc_union32 var42;
1565   orc_union32 var43;
1566   orc_union32 var44;
1567   orc_union32 var45;
1568   orc_union32 var46;
1569   orc_union32 var47;
1570   orc_union16 var48;
1571
1572   for (j = 0; j < m; j++) {
1573     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
1574     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
1575
1576     /* 7: loadpl */
1577     var37.i = ex->params[24];
1578
1579     for (i = 0; i < n; i++) {
1580       /* 0: loadw */
1581       var35 = ptr0[i];
1582       /* 1: swapw */
1583       var39.i = ORC_SWAP_W (var35.i);
1584       /* 2: convuwl */
1585       var40.i = (orc_uint16) var39.i;
1586       /* 3: loadw */
1587       var36 = ptr4[i];
1588       /* 4: swapw */
1589       var41.i = ORC_SWAP_W (var36.i);
1590       /* 5: convuwl */
1591       var42.i = (orc_uint16) var41.i;
1592       /* 6: subl */
1593       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1594       /* 8: mulll */
1595       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1596       /* 9: shll */
1597       var45.i = ((orc_uint32) var40.i) << 12;
1598       /* 10: addl */
1599       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1600       /* 11: shrul */
1601       var47.i = ((orc_uint32) var46.i) >> 12;
1602       /* 12: convsuslw */
1603       var48.i = ORC_CLAMP_UW (var47.i);
1604       /* 13: swapw */
1605       var38.i = ORC_SWAP_W (var48.i);
1606       /* 14: storew */
1607       ptr0[i] = var38;
1608     }
1609   }
1610
1611 }
1612
1613 void
1614 compositor_orc_blend_u12_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1615     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1616 {
1617   OrcExecutor _ex, *ex = &_ex;
1618   static volatile int p_inited = 0;
1619   static OrcCode *c = 0;
1620   void (*func) (OrcExecutor *);
1621
1622   if (!p_inited) {
1623     orc_once_mutex_lock ();
1624     if (!p_inited) {
1625       OrcProgram *p;
1626
1627 #if 1
1628       static const orc_uint8 bc[] = {
1629         1, 7, 9, 29, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
1630         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 50, 95, 115, 119, 97,
1631         112, 11, 2, 2, 12, 2, 2, 14, 1, 12, 0, 0, 0, 16, 2, 20,
1632         4, 20, 4, 20, 2, 183, 34, 0, 154, 32, 34, 183, 34, 4, 154, 33,
1633         34, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16, 103, 33, 32,
1634         33, 126, 33, 33, 16, 166, 34, 33, 183, 0, 34, 2, 0,
1635       };
1636       p = orc_program_new_from_static_bytecode (bc);
1637       orc_program_set_backup_function (p,
1638           _backup_compositor_orc_blend_u12_swap);
1639 #else
1640       p = orc_program_new ();
1641       orc_program_set_2d (p);
1642       orc_program_set_name (p, "compositor_orc_blend_u12_swap");
1643       orc_program_set_backup_function (p,
1644           _backup_compositor_orc_blend_u12_swap);
1645       orc_program_add_destination (p, 2, "d1");
1646       orc_program_add_source (p, 2, "s1");
1647       orc_program_add_constant (p, 1, 0x0000000c, "c1");
1648       orc_program_add_parameter (p, 2, "p1");
1649       orc_program_add_temporary (p, 4, "t1");
1650       orc_program_add_temporary (p, 4, "t2");
1651       orc_program_add_temporary (p, 2, "t3");
1652
1653       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_D1, ORC_VAR_D1,
1654           ORC_VAR_D1);
1655       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1,
1656           ORC_VAR_D1);
1657       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
1658           ORC_VAR_D1);
1659       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_D1,
1660           ORC_VAR_D1);
1661       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1662           ORC_VAR_D1);
1663       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
1664           ORC_VAR_D1);
1665       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1666           ORC_VAR_D1);
1667       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
1668           ORC_VAR_D1);
1669       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1670           ORC_VAR_D1);
1671       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T3, ORC_VAR_T2,
1672           ORC_VAR_D1, ORC_VAR_D1);
1673       orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
1674           ORC_VAR_D1);
1675 #endif
1676
1677       orc_program_compile (p);
1678       c = orc_program_take_code (p);
1679       orc_program_free (p);
1680     }
1681     p_inited = TRUE;
1682     orc_once_mutex_unlock ();
1683   }
1684   ex->arrays[ORC_VAR_A2] = c;
1685   ex->program = 0;
1686
1687   ex->n = n;
1688   ORC_EXECUTOR_M (ex) = m;
1689   ex->arrays[ORC_VAR_D1] = d1;
1690   ex->params[ORC_VAR_D1] = d1_stride;
1691   ex->arrays[ORC_VAR_S1] = (void *) s1;
1692   ex->params[ORC_VAR_S1] = s1_stride;
1693   ex->params[ORC_VAR_P1] = p1;
1694
1695   func = c->exec;
1696   func (ex);
1697 }
1698 #endif
1699
1700
1701 /* compositor_orc_blend_u16_swap */
1702 #ifdef DISABLE_ORC
1703 void
1704 compositor_orc_blend_u16_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1705     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1706 {
1707   int i;
1708   int j;
1709   orc_union16 *ORC_RESTRICT ptr0;
1710   const orc_union16 *ORC_RESTRICT ptr4;
1711   orc_union16 var35;
1712   orc_union16 var36;
1713   orc_union32 var37;
1714   orc_union16 var38;
1715   orc_union16 var39;
1716   orc_union32 var40;
1717   orc_union16 var41;
1718   orc_union32 var42;
1719   orc_union32 var43;
1720   orc_union32 var44;
1721   orc_union32 var45;
1722   orc_union32 var46;
1723   orc_union32 var47;
1724   orc_union16 var48;
1725
1726   for (j = 0; j < m; j++) {
1727     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
1728     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
1729
1730     /* 7: loadpl */
1731     var37.i = p1;
1732
1733     for (i = 0; i < n; i++) {
1734       /* 0: loadw */
1735       var35 = ptr0[i];
1736       /* 1: swapw */
1737       var39.i = ORC_SWAP_W (var35.i);
1738       /* 2: convuwl */
1739       var40.i = (orc_uint16) var39.i;
1740       /* 3: loadw */
1741       var36 = ptr4[i];
1742       /* 4: swapw */
1743       var41.i = ORC_SWAP_W (var36.i);
1744       /* 5: convuwl */
1745       var42.i = (orc_uint16) var41.i;
1746       /* 6: subl */
1747       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1748       /* 8: mulll */
1749       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1750       /* 9: shll */
1751       var45.i = ((orc_uint32) var40.i) << 16;
1752       /* 10: addl */
1753       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1754       /* 11: shrul */
1755       var47.i = ((orc_uint32) var46.i) >> 16;
1756       /* 12: convsuslw */
1757       var48.i = ORC_CLAMP_UW (var47.i);
1758       /* 13: swapw */
1759       var38.i = ORC_SWAP_W (var48.i);
1760       /* 14: storew */
1761       ptr0[i] = var38;
1762     }
1763   }
1764
1765 }
1766
1767 #else
1768 static void
1769 _backup_compositor_orc_blend_u16_swap (OrcExecutor * ORC_RESTRICT ex)
1770 {
1771   int i;
1772   int j;
1773   int n = ex->n;
1774   int m = ex->params[ORC_VAR_A1];
1775   orc_union16 *ORC_RESTRICT ptr0;
1776   const orc_union16 *ORC_RESTRICT ptr4;
1777   orc_union16 var35;
1778   orc_union16 var36;
1779   orc_union32 var37;
1780   orc_union16 var38;
1781   orc_union16 var39;
1782   orc_union32 var40;
1783   orc_union16 var41;
1784   orc_union32 var42;
1785   orc_union32 var43;
1786   orc_union32 var44;
1787   orc_union32 var45;
1788   orc_union32 var46;
1789   orc_union32 var47;
1790   orc_union16 var48;
1791
1792   for (j = 0; j < m; j++) {
1793     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
1794     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
1795
1796     /* 7: loadpl */
1797     var37.i = ex->params[24];
1798
1799     for (i = 0; i < n; i++) {
1800       /* 0: loadw */
1801       var35 = ptr0[i];
1802       /* 1: swapw */
1803       var39.i = ORC_SWAP_W (var35.i);
1804       /* 2: convuwl */
1805       var40.i = (orc_uint16) var39.i;
1806       /* 3: loadw */
1807       var36 = ptr4[i];
1808       /* 4: swapw */
1809       var41.i = ORC_SWAP_W (var36.i);
1810       /* 5: convuwl */
1811       var42.i = (orc_uint16) var41.i;
1812       /* 6: subl */
1813       var43.i = ((orc_uint32) var42.i) - ((orc_uint32) var40.i);
1814       /* 8: mulll */
1815       var44.i = (((orc_uint32) var43.i) * ((orc_uint32) var37.i)) & 0xffffffff;
1816       /* 9: shll */
1817       var45.i = ((orc_uint32) var40.i) << 16;
1818       /* 10: addl */
1819       var46.i = ((orc_uint32) var45.i) + ((orc_uint32) var44.i);
1820       /* 11: shrul */
1821       var47.i = ((orc_uint32) var46.i) >> 16;
1822       /* 12: convsuslw */
1823       var48.i = ORC_CLAMP_UW (var47.i);
1824       /* 13: swapw */
1825       var38.i = ORC_SWAP_W (var48.i);
1826       /* 14: storew */
1827       ptr0[i] = var38;
1828     }
1829   }
1830
1831 }
1832
1833 void
1834 compositor_orc_blend_u16_swap (guint8 * ORC_RESTRICT d1, int d1_stride,
1835     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1836 {
1837   OrcExecutor _ex, *ex = &_ex;
1838   static volatile int p_inited = 0;
1839   static OrcCode *c = 0;
1840   void (*func) (OrcExecutor *);
1841
1842   if (!p_inited) {
1843     orc_once_mutex_lock ();
1844     if (!p_inited) {
1845       OrcProgram *p;
1846
1847 #if 1
1848       static const orc_uint8 bc[] = {
1849         1, 7, 9, 29, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
1850         114, 99, 95, 98, 108, 101, 110, 100, 95, 117, 49, 54, 95, 115, 119, 97,
1851         112, 11, 2, 2, 12, 2, 2, 14, 1, 16, 0, 0, 0, 16, 2, 20,
1852         4, 20, 4, 20, 2, 183, 34, 0, 154, 32, 34, 183, 34, 4, 154, 33,
1853         34, 129, 33, 33, 32, 120, 33, 33, 24, 124, 32, 32, 16, 103, 33, 32,
1854         33, 126, 33, 33, 16, 166, 34, 33, 183, 0, 34, 2, 0,
1855       };
1856       p = orc_program_new_from_static_bytecode (bc);
1857       orc_program_set_backup_function (p,
1858           _backup_compositor_orc_blend_u16_swap);
1859 #else
1860       p = orc_program_new ();
1861       orc_program_set_2d (p);
1862       orc_program_set_name (p, "compositor_orc_blend_u16_swap");
1863       orc_program_set_backup_function (p,
1864           _backup_compositor_orc_blend_u16_swap);
1865       orc_program_add_destination (p, 2, "d1");
1866       orc_program_add_source (p, 2, "s1");
1867       orc_program_add_constant (p, 1, 0x00000010, "c1");
1868       orc_program_add_parameter (p, 2, "p1");
1869       orc_program_add_temporary (p, 4, "t1");
1870       orc_program_add_temporary (p, 4, "t2");
1871       orc_program_add_temporary (p, 2, "t3");
1872
1873       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_D1, ORC_VAR_D1,
1874           ORC_VAR_D1);
1875       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_D1,
1876           ORC_VAR_D1);
1877       orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
1878           ORC_VAR_D1);
1879       orc_program_append_2 (p, "convuwl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_D1,
1880           ORC_VAR_D1);
1881       orc_program_append_2 (p, "subl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1882           ORC_VAR_D1);
1883       orc_program_append_2 (p, "mulll", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P1,
1884           ORC_VAR_D1);
1885       orc_program_append_2 (p, "shll", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1886           ORC_VAR_D1);
1887       orc_program_append_2 (p, "addl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_T2,
1888           ORC_VAR_D1);
1889       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1890           ORC_VAR_D1);
1891       orc_program_append_2 (p, "convsuslw", 0, ORC_VAR_T3, ORC_VAR_T2,
1892           ORC_VAR_D1, ORC_VAR_D1);
1893       orc_program_append_2 (p, "swapw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
1894           ORC_VAR_D1);
1895 #endif
1896
1897       orc_program_compile (p);
1898       c = orc_program_take_code (p);
1899       orc_program_free (p);
1900     }
1901     p_inited = TRUE;
1902     orc_once_mutex_unlock ();
1903   }
1904   ex->arrays[ORC_VAR_A2] = c;
1905   ex->program = 0;
1906
1907   ex->n = n;
1908   ORC_EXECUTOR_M (ex) = m;
1909   ex->arrays[ORC_VAR_D1] = d1;
1910   ex->params[ORC_VAR_D1] = d1_stride;
1911   ex->arrays[ORC_VAR_S1] = (void *) s1;
1912   ex->params[ORC_VAR_S1] = s1_stride;
1913   ex->params[ORC_VAR_P1] = p1;
1914
1915   func = c->exec;
1916   func (ex);
1917 }
1918 #endif
1919
1920
1921 /* compositor_orc_blend_argb */
1922 #ifdef DISABLE_ORC
1923 void
1924 compositor_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
1925     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
1926 {
1927   int i;
1928   int j;
1929   orc_union32 *ORC_RESTRICT ptr0;
1930   const orc_union32 *ORC_RESTRICT ptr4;
1931   orc_union64 var39;
1932 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
1933   volatile orc_union64 var40;
1934 #else
1935   orc_union64 var40;
1936 #endif
1937 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
1938   volatile orc_union32 var41;
1939 #else
1940   orc_union32 var41;
1941 #endif
1942   orc_union32 var42;
1943   orc_union16 var43;
1944   orc_int8 var44;
1945   orc_union32 var45;
1946   orc_union64 var46;
1947   orc_union64 var47;
1948   orc_union64 var48;
1949   orc_union64 var49;
1950   orc_union64 var50;
1951   orc_union64 var51;
1952   orc_union32 var52;
1953   orc_union64 var53;
1954   orc_union64 var54;
1955   orc_union64 var55;
1956   orc_union64 var56;
1957   orc_union32 var57;
1958   orc_union32 var58;
1959
1960   for (j = 0; j < m; j++) {
1961     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
1962     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
1963
1964     /* 5: loadpw */
1965     var39.x4[0] = p1;
1966     var39.x4[1] = p1;
1967     var39.x4[2] = p1;
1968     var39.x4[3] = p1;
1969     /* 10: loadpw */
1970     var40.x4[0] = 0x000000ff;   /* 255 or 1.25987e-321f */
1971     var40.x4[1] = 0x000000ff;   /* 255 or 1.25987e-321f */
1972     var40.x4[2] = 0x000000ff;   /* 255 or 1.25987e-321f */
1973     var40.x4[3] = 0x000000ff;   /* 255 or 1.25987e-321f */
1974     /* 18: loadpl */
1975     var41.i = 0x000000ff;       /* 255 or 1.25987e-321f */
1976
1977     for (i = 0; i < n; i++) {
1978       /* 0: loadl */
1979       var42 = ptr4[i];
1980       /* 1: convlw */
1981       var43.i = var42.i;
1982       /* 2: convwb */
1983       var44 = var43.i;
1984       /* 3: splatbl */
1985       var45.i =
1986           ((((orc_uint32) var44) & 0xff) << 24) | ((((orc_uint32) var44) & 0xff)
1987           << 16) | ((((orc_uint32) var44) & 0xff) << 8) | (((orc_uint32) var44)
1988           & 0xff);
1989       /* 4: convubw */
1990       var46.x4[0] = (orc_uint8) var45.x4[0];
1991       var46.x4[1] = (orc_uint8) var45.x4[1];
1992       var46.x4[2] = (orc_uint8) var45.x4[2];
1993       var46.x4[3] = (orc_uint8) var45.x4[3];
1994       /* 6: mullw */
1995       var47.x4[0] = (var46.x4[0] * var39.x4[0]) & 0xffff;
1996       var47.x4[1] = (var46.x4[1] * var39.x4[1]) & 0xffff;
1997       var47.x4[2] = (var46.x4[2] * var39.x4[2]) & 0xffff;
1998       var47.x4[3] = (var46.x4[3] * var39.x4[3]) & 0xffff;
1999       /* 7: div255w */
2000       var48.x4[0] =
2001           ((orc_uint16) (((orc_uint16) (var47.x4[0] + 128)) +
2002               (((orc_uint16) (var47.x4[0] + 128)) >> 8))) >> 8;
2003       var48.x4[1] =
2004           ((orc_uint16) (((orc_uint16) (var47.x4[1] + 128)) +
2005               (((orc_uint16) (var47.x4[1] + 128)) >> 8))) >> 8;
2006       var48.x4[2] =
2007           ((orc_uint16) (((orc_uint16) (var47.x4[2] + 128)) +
2008               (((orc_uint16) (var47.x4[2] + 128)) >> 8))) >> 8;
2009       var48.x4[3] =
2010           ((orc_uint16) (((orc_uint16) (var47.x4[3] + 128)) +
2011               (((orc_uint16) (var47.x4[3] + 128)) >> 8))) >> 8;
2012       /* 8: convubw */
2013       var49.x4[0] = (orc_uint8) var42.x4[0];
2014       var49.x4[1] = (orc_uint8) var42.x4[1];
2015       var49.x4[2] = (orc_uint8) var42.x4[2];
2016       var49.x4[3] = (orc_uint8) var42.x4[3];
2017       /* 9: mullw */
2018       var50.x4[0] = (var49.x4[0] * var48.x4[0]) & 0xffff;
2019       var50.x4[1] = (var49.x4[1] * var48.x4[1]) & 0xffff;
2020       var50.x4[2] = (var49.x4[2] * var48.x4[2]) & 0xffff;
2021       var50.x4[3] = (var49.x4[3] * var48.x4[3]) & 0xffff;
2022       /* 11: subw */
2023       var51.x4[0] = var40.x4[0] - var48.x4[0];
2024       var51.x4[1] = var40.x4[1] - var48.x4[1];
2025       var51.x4[2] = var40.x4[2] - var48.x4[2];
2026       var51.x4[3] = var40.x4[3] - var48.x4[3];
2027       /* 12: loadl */
2028       var52 = ptr0[i];
2029       /* 13: convubw */
2030       var53.x4[0] = (orc_uint8) var52.x4[0];
2031       var53.x4[1] = (orc_uint8) var52.x4[1];
2032       var53.x4[2] = (orc_uint8) var52.x4[2];
2033       var53.x4[3] = (orc_uint8) var52.x4[3];
2034       /* 14: mullw */
2035       var54.x4[0] = (var53.x4[0] * var51.x4[0]) & 0xffff;
2036       var54.x4[1] = (var53.x4[1] * var51.x4[1]) & 0xffff;
2037       var54.x4[2] = (var53.x4[2] * var51.x4[2]) & 0xffff;
2038       var54.x4[3] = (var53.x4[3] * var51.x4[3]) & 0xffff;
2039       /* 15: addw */
2040       var55.x4[0] = var54.x4[0] + var50.x4[0];
2041       var55.x4[1] = var54.x4[1] + var50.x4[1];
2042       var55.x4[2] = var54.x4[2] + var50.x4[2];
2043       var55.x4[3] = var54.x4[3] + var50.x4[3];
2044       /* 16: div255w */
2045       var56.x4[0] =
2046           ((orc_uint16) (((orc_uint16) (var55.x4[0] + 128)) +
2047               (((orc_uint16) (var55.x4[0] + 128)) >> 8))) >> 8;
2048       var56.x4[1] =
2049           ((orc_uint16) (((orc_uint16) (var55.x4[1] + 128)) +
2050               (((orc_uint16) (var55.x4[1] + 128)) >> 8))) >> 8;
2051       var56.x4[2] =
2052           ((orc_uint16) (((orc_uint16) (var55.x4[2] + 128)) +
2053               (((orc_uint16) (var55.x4[2] + 128)) >> 8))) >> 8;
2054       var56.x4[3] =
2055           ((orc_uint16) (((orc_uint16) (var55.x4[3] + 128)) +
2056               (((orc_uint16) (var55.x4[3] + 128)) >> 8))) >> 8;
2057       /* 17: convwb */
2058       var57.x4[0] = var56.x4[0];
2059       var57.x4[1] = var56.x4[1];
2060       var57.x4[2] = var56.x4[2];
2061       var57.x4[3] = var56.x4[3];
2062       /* 19: orl */
2063       var58.i = var57.i | var41.i;
2064       /* 20: storel */
2065       ptr0[i] = var58;
2066     }
2067   }
2068
2069 }
2070
2071 #else
2072 static void
2073 _backup_compositor_orc_blend_argb (OrcExecutor * ORC_RESTRICT ex)
2074 {
2075   int i;
2076   int j;
2077   int n = ex->n;
2078   int m = ex->params[ORC_VAR_A1];
2079   orc_union32 *ORC_RESTRICT ptr0;
2080   const orc_union32 *ORC_RESTRICT ptr4;
2081   orc_union64 var39;
2082 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2083   volatile orc_union64 var40;
2084 #else
2085   orc_union64 var40;
2086 #endif
2087 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2088   volatile orc_union32 var41;
2089 #else
2090   orc_union32 var41;
2091 #endif
2092   orc_union32 var42;
2093   orc_union16 var43;
2094   orc_int8 var44;
2095   orc_union32 var45;
2096   orc_union64 var46;
2097   orc_union64 var47;
2098   orc_union64 var48;
2099   orc_union64 var49;
2100   orc_union64 var50;
2101   orc_union64 var51;
2102   orc_union32 var52;
2103   orc_union64 var53;
2104   orc_union64 var54;
2105   orc_union64 var55;
2106   orc_union64 var56;
2107   orc_union32 var57;
2108   orc_union32 var58;
2109
2110   for (j = 0; j < m; j++) {
2111     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
2112     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
2113
2114     /* 5: loadpw */
2115     var39.x4[0] = ex->params[24];
2116     var39.x4[1] = ex->params[24];
2117     var39.x4[2] = ex->params[24];
2118     var39.x4[3] = ex->params[24];
2119     /* 10: loadpw */
2120     var40.x4[0] = 0x000000ff;   /* 255 or 1.25987e-321f */
2121     var40.x4[1] = 0x000000ff;   /* 255 or 1.25987e-321f */
2122     var40.x4[2] = 0x000000ff;   /* 255 or 1.25987e-321f */
2123     var40.x4[3] = 0x000000ff;   /* 255 or 1.25987e-321f */
2124     /* 18: loadpl */
2125     var41.i = 0x000000ff;       /* 255 or 1.25987e-321f */
2126
2127     for (i = 0; i < n; i++) {
2128       /* 0: loadl */
2129       var42 = ptr4[i];
2130       /* 1: convlw */
2131       var43.i = var42.i;
2132       /* 2: convwb */
2133       var44 = var43.i;
2134       /* 3: splatbl */
2135       var45.i =
2136           ((((orc_uint32) var44) & 0xff) << 24) | ((((orc_uint32) var44) & 0xff)
2137           << 16) | ((((orc_uint32) var44) & 0xff) << 8) | (((orc_uint32) var44)
2138           & 0xff);
2139       /* 4: convubw */
2140       var46.x4[0] = (orc_uint8) var45.x4[0];
2141       var46.x4[1] = (orc_uint8) var45.x4[1];
2142       var46.x4[2] = (orc_uint8) var45.x4[2];
2143       var46.x4[3] = (orc_uint8) var45.x4[3];
2144       /* 6: mullw */
2145       var47.x4[0] = (var46.x4[0] * var39.x4[0]) & 0xffff;
2146       var47.x4[1] = (var46.x4[1] * var39.x4[1]) & 0xffff;
2147       var47.x4[2] = (var46.x4[2] * var39.x4[2]) & 0xffff;
2148       var47.x4[3] = (var46.x4[3] * var39.x4[3]) & 0xffff;
2149       /* 7: div255w */
2150       var48.x4[0] =
2151           ((orc_uint16) (((orc_uint16) (var47.x4[0] + 128)) +
2152               (((orc_uint16) (var47.x4[0] + 128)) >> 8))) >> 8;
2153       var48.x4[1] =
2154           ((orc_uint16) (((orc_uint16) (var47.x4[1] + 128)) +
2155               (((orc_uint16) (var47.x4[1] + 128)) >> 8))) >> 8;
2156       var48.x4[2] =
2157           ((orc_uint16) (((orc_uint16) (var47.x4[2] + 128)) +
2158               (((orc_uint16) (var47.x4[2] + 128)) >> 8))) >> 8;
2159       var48.x4[3] =
2160           ((orc_uint16) (((orc_uint16) (var47.x4[3] + 128)) +
2161               (((orc_uint16) (var47.x4[3] + 128)) >> 8))) >> 8;
2162       /* 8: convubw */
2163       var49.x4[0] = (orc_uint8) var42.x4[0];
2164       var49.x4[1] = (orc_uint8) var42.x4[1];
2165       var49.x4[2] = (orc_uint8) var42.x4[2];
2166       var49.x4[3] = (orc_uint8) var42.x4[3];
2167       /* 9: mullw */
2168       var50.x4[0] = (var49.x4[0] * var48.x4[0]) & 0xffff;
2169       var50.x4[1] = (var49.x4[1] * var48.x4[1]) & 0xffff;
2170       var50.x4[2] = (var49.x4[2] * var48.x4[2]) & 0xffff;
2171       var50.x4[3] = (var49.x4[3] * var48.x4[3]) & 0xffff;
2172       /* 11: subw */
2173       var51.x4[0] = var40.x4[0] - var48.x4[0];
2174       var51.x4[1] = var40.x4[1] - var48.x4[1];
2175       var51.x4[2] = var40.x4[2] - var48.x4[2];
2176       var51.x4[3] = var40.x4[3] - var48.x4[3];
2177       /* 12: loadl */
2178       var52 = ptr0[i];
2179       /* 13: convubw */
2180       var53.x4[0] = (orc_uint8) var52.x4[0];
2181       var53.x4[1] = (orc_uint8) var52.x4[1];
2182       var53.x4[2] = (orc_uint8) var52.x4[2];
2183       var53.x4[3] = (orc_uint8) var52.x4[3];
2184       /* 14: mullw */
2185       var54.x4[0] = (var53.x4[0] * var51.x4[0]) & 0xffff;
2186       var54.x4[1] = (var53.x4[1] * var51.x4[1]) & 0xffff;
2187       var54.x4[2] = (var53.x4[2] * var51.x4[2]) & 0xffff;
2188       var54.x4[3] = (var53.x4[3] * var51.x4[3]) & 0xffff;
2189       /* 15: addw */
2190       var55.x4[0] = var54.x4[0] + var50.x4[0];
2191       var55.x4[1] = var54.x4[1] + var50.x4[1];
2192       var55.x4[2] = var54.x4[2] + var50.x4[2];
2193       var55.x4[3] = var54.x4[3] + var50.x4[3];
2194       /* 16: div255w */
2195       var56.x4[0] =
2196           ((orc_uint16) (((orc_uint16) (var55.x4[0] + 128)) +
2197               (((orc_uint16) (var55.x4[0] + 128)) >> 8))) >> 8;
2198       var56.x4[1] =
2199           ((orc_uint16) (((orc_uint16) (var55.x4[1] + 128)) +
2200               (((orc_uint16) (var55.x4[1] + 128)) >> 8))) >> 8;
2201       var56.x4[2] =
2202           ((orc_uint16) (((orc_uint16) (var55.x4[2] + 128)) +
2203               (((orc_uint16) (var55.x4[2] + 128)) >> 8))) >> 8;
2204       var56.x4[3] =
2205           ((orc_uint16) (((orc_uint16) (var55.x4[3] + 128)) +
2206               (((orc_uint16) (var55.x4[3] + 128)) >> 8))) >> 8;
2207       /* 17: convwb */
2208       var57.x4[0] = var56.x4[0];
2209       var57.x4[1] = var56.x4[1];
2210       var57.x4[2] = var56.x4[2];
2211       var57.x4[3] = var56.x4[3];
2212       /* 19: orl */
2213       var58.i = var57.i | var41.i;
2214       /* 20: storel */
2215       ptr0[i] = var58;
2216     }
2217   }
2218
2219 }
2220
2221 void
2222 compositor_orc_blend_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
2223     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
2224 {
2225   OrcExecutor _ex, *ex = &_ex;
2226   static volatile int p_inited = 0;
2227   static OrcCode *c = 0;
2228   void (*func) (OrcExecutor *);
2229
2230   if (!p_inited) {
2231     orc_once_mutex_lock ();
2232     if (!p_inited) {
2233       OrcProgram *p;
2234
2235 #if 1
2236       static const orc_uint8 bc[] = {
2237         1, 7, 9, 25, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
2238         114, 99, 95, 98, 108, 101, 110, 100, 95, 97, 114, 103, 98, 11, 4, 4,
2239         12, 4, 4, 14, 4, 255, 0, 0, 0, 14, 2, 255, 0, 0, 0, 16,
2240         2, 20, 4, 20, 2, 20, 1, 20, 4, 20, 8, 20, 8, 20, 8, 113,
2241         32, 4, 163, 33, 32, 157, 34, 33, 152, 35, 34, 21, 2, 150, 38, 35,
2242         21, 2, 89, 38, 38, 24, 21, 2, 80, 38, 38, 21, 2, 150, 37, 32,
2243         21, 2, 89, 37, 37, 38, 21, 2, 98, 38, 17, 38, 113, 32, 0, 21,
2244         2, 150, 36, 32, 21, 2, 89, 36, 36, 38, 21, 2, 70, 36, 36, 37,
2245         21, 2, 80, 36, 36, 21, 2, 157, 32, 36, 123, 32, 32, 16, 128, 0,
2246         32, 2, 0,
2247       };
2248       p = orc_program_new_from_static_bytecode (bc);
2249       orc_program_set_backup_function (p, _backup_compositor_orc_blend_argb);
2250 #else
2251       p = orc_program_new ();
2252       orc_program_set_2d (p);
2253       orc_program_set_name (p, "compositor_orc_blend_argb");
2254       orc_program_set_backup_function (p, _backup_compositor_orc_blend_argb);
2255       orc_program_add_destination (p, 4, "d1");
2256       orc_program_add_source (p, 4, "s1");
2257       orc_program_add_constant (p, 4, 0x000000ff, "c1");
2258       orc_program_add_constant (p, 2, 0x000000ff, "c2");
2259       orc_program_add_parameter (p, 2, "p1");
2260       orc_program_add_temporary (p, 4, "t1");
2261       orc_program_add_temporary (p, 2, "t2");
2262       orc_program_add_temporary (p, 1, "t3");
2263       orc_program_add_temporary (p, 4, "t4");
2264       orc_program_add_temporary (p, 8, "t5");
2265       orc_program_add_temporary (p, 8, "t6");
2266       orc_program_add_temporary (p, 8, "t7");
2267
2268       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
2269           ORC_VAR_D1);
2270       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
2271           ORC_VAR_D1);
2272       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
2273           ORC_VAR_D1);
2274       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
2275           ORC_VAR_D1);
2276       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
2277           ORC_VAR_D1);
2278       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_P1,
2279           ORC_VAR_D1);
2280       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_D1,
2281           ORC_VAR_D1);
2282       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_D1,
2283           ORC_VAR_D1);
2284       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T7,
2285           ORC_VAR_D1);
2286       orc_program_append_2 (p, "subw", 2, ORC_VAR_T7, ORC_VAR_C2, ORC_VAR_T7,
2287           ORC_VAR_D1);
2288       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
2289           ORC_VAR_D1);
2290       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_D1,
2291           ORC_VAR_D1);
2292       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T7,
2293           ORC_VAR_D1);
2294       orc_program_append_2 (p, "addw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T6,
2295           ORC_VAR_D1);
2296       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_D1,
2297           ORC_VAR_D1);
2298       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_D1,
2299           ORC_VAR_D1);
2300       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
2301           ORC_VAR_D1);
2302       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
2303           ORC_VAR_D1);
2304 #endif
2305
2306       orc_program_compile (p);
2307       c = orc_program_take_code (p);
2308       orc_program_free (p);
2309     }
2310     p_inited = TRUE;
2311     orc_once_mutex_unlock ();
2312   }
2313   ex->arrays[ORC_VAR_A2] = c;
2314   ex->program = 0;
2315
2316   ex->n = n;
2317   ORC_EXECUTOR_M (ex) = m;
2318   ex->arrays[ORC_VAR_D1] = d1;
2319   ex->params[ORC_VAR_D1] = d1_stride;
2320   ex->arrays[ORC_VAR_S1] = (void *) s1;
2321   ex->params[ORC_VAR_S1] = s1_stride;
2322   ex->params[ORC_VAR_P1] = p1;
2323
2324   func = c->exec;
2325   func (ex);
2326 }
2327 #endif
2328
2329
2330 /* compositor_orc_source_argb */
2331 #ifdef DISABLE_ORC
2332 void
2333 compositor_orc_source_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
2334     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
2335 {
2336   int i;
2337   int j;
2338   orc_union32 *ORC_RESTRICT ptr0;
2339   const orc_union32 *ORC_RESTRICT ptr4;
2340   orc_union64 var38;
2341 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2342   volatile orc_union32 var39;
2343 #else
2344   orc_union32 var39;
2345 #endif
2346 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2347   volatile orc_union32 var40;
2348 #else
2349   orc_union32 var40;
2350 #endif
2351   orc_union32 var41;
2352   orc_union16 var42;
2353   orc_int8 var43;
2354   orc_union32 var44;
2355   orc_union64 var45;
2356   orc_union64 var46;
2357   orc_union64 var47;
2358   orc_union32 var48;
2359   orc_union32 var49;
2360   orc_union32 var50;
2361   orc_union32 var51;
2362
2363   for (j = 0; j < m; j++) {
2364     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
2365     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
2366
2367     /* 5: loadpw */
2368     var38.x4[0] = p1;
2369     var38.x4[1] = p1;
2370     var38.x4[2] = p1;
2371     var38.x4[3] = p1;
2372     /* 8: loadpl */
2373     var39.i = 0xffffff00;       /* -256 or 2.122e-314f */
2374     /* 11: loadpl */
2375     var40.i = 0x000000ff;       /* 255 or 1.25987e-321f */
2376
2377     for (i = 0; i < n; i++) {
2378       /* 0: loadl */
2379       var41 = ptr4[i];
2380       /* 1: convlw */
2381       var42.i = var41.i;
2382       /* 2: convwb */
2383       var43 = var42.i;
2384       /* 3: splatbl */
2385       var44.i =
2386           ((((orc_uint32) var43) & 0xff) << 24) | ((((orc_uint32) var43) & 0xff)
2387           << 16) | ((((orc_uint32) var43) & 0xff) << 8) | (((orc_uint32) var43)
2388           & 0xff);
2389       /* 4: convubw */
2390       var45.x4[0] = (orc_uint8) var44.x4[0];
2391       var45.x4[1] = (orc_uint8) var44.x4[1];
2392       var45.x4[2] = (orc_uint8) var44.x4[2];
2393       var45.x4[3] = (orc_uint8) var44.x4[3];
2394       /* 6: mullw */
2395       var46.x4[0] = (var45.x4[0] * var38.x4[0]) & 0xffff;
2396       var46.x4[1] = (var45.x4[1] * var38.x4[1]) & 0xffff;
2397       var46.x4[2] = (var45.x4[2] * var38.x4[2]) & 0xffff;
2398       var46.x4[3] = (var45.x4[3] * var38.x4[3]) & 0xffff;
2399       /* 7: div255w */
2400       var47.x4[0] =
2401           ((orc_uint16) (((orc_uint16) (var46.x4[0] + 128)) +
2402               (((orc_uint16) (var46.x4[0] + 128)) >> 8))) >> 8;
2403       var47.x4[1] =
2404           ((orc_uint16) (((orc_uint16) (var46.x4[1] + 128)) +
2405               (((orc_uint16) (var46.x4[1] + 128)) >> 8))) >> 8;
2406       var47.x4[2] =
2407           ((orc_uint16) (((orc_uint16) (var46.x4[2] + 128)) +
2408               (((orc_uint16) (var46.x4[2] + 128)) >> 8))) >> 8;
2409       var47.x4[3] =
2410           ((orc_uint16) (((orc_uint16) (var46.x4[3] + 128)) +
2411               (((orc_uint16) (var46.x4[3] + 128)) >> 8))) >> 8;
2412       /* 9: andl */
2413       var48.i = var41.i & var39.i;
2414       /* 10: convwb */
2415       var49.x4[0] = var47.x4[0];
2416       var49.x4[1] = var47.x4[1];
2417       var49.x4[2] = var47.x4[2];
2418       var49.x4[3] = var47.x4[3];
2419       /* 12: andl */
2420       var50.i = var49.i & var40.i;
2421       /* 13: orl */
2422       var51.i = var48.i | var50.i;
2423       /* 14: storel */
2424       ptr0[i] = var51;
2425     }
2426   }
2427
2428 }
2429
2430 #else
2431 static void
2432 _backup_compositor_orc_source_argb (OrcExecutor * ORC_RESTRICT ex)
2433 {
2434   int i;
2435   int j;
2436   int n = ex->n;
2437   int m = ex->params[ORC_VAR_A1];
2438   orc_union32 *ORC_RESTRICT ptr0;
2439   const orc_union32 *ORC_RESTRICT ptr4;
2440   orc_union64 var38;
2441 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2442   volatile orc_union32 var39;
2443 #else
2444   orc_union32 var39;
2445 #endif
2446 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2447   volatile orc_union32 var40;
2448 #else
2449   orc_union32 var40;
2450 #endif
2451   orc_union32 var41;
2452   orc_union16 var42;
2453   orc_int8 var43;
2454   orc_union32 var44;
2455   orc_union64 var45;
2456   orc_union64 var46;
2457   orc_union64 var47;
2458   orc_union32 var48;
2459   orc_union32 var49;
2460   orc_union32 var50;
2461   orc_union32 var51;
2462
2463   for (j = 0; j < m; j++) {
2464     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
2465     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
2466
2467     /* 5: loadpw */
2468     var38.x4[0] = ex->params[24];
2469     var38.x4[1] = ex->params[24];
2470     var38.x4[2] = ex->params[24];
2471     var38.x4[3] = ex->params[24];
2472     /* 8: loadpl */
2473     var39.i = 0xffffff00;       /* -256 or 2.122e-314f */
2474     /* 11: loadpl */
2475     var40.i = 0x000000ff;       /* 255 or 1.25987e-321f */
2476
2477     for (i = 0; i < n; i++) {
2478       /* 0: loadl */
2479       var41 = ptr4[i];
2480       /* 1: convlw */
2481       var42.i = var41.i;
2482       /* 2: convwb */
2483       var43 = var42.i;
2484       /* 3: splatbl */
2485       var44.i =
2486           ((((orc_uint32) var43) & 0xff) << 24) | ((((orc_uint32) var43) & 0xff)
2487           << 16) | ((((orc_uint32) var43) & 0xff) << 8) | (((orc_uint32) var43)
2488           & 0xff);
2489       /* 4: convubw */
2490       var45.x4[0] = (orc_uint8) var44.x4[0];
2491       var45.x4[1] = (orc_uint8) var44.x4[1];
2492       var45.x4[2] = (orc_uint8) var44.x4[2];
2493       var45.x4[3] = (orc_uint8) var44.x4[3];
2494       /* 6: mullw */
2495       var46.x4[0] = (var45.x4[0] * var38.x4[0]) & 0xffff;
2496       var46.x4[1] = (var45.x4[1] * var38.x4[1]) & 0xffff;
2497       var46.x4[2] = (var45.x4[2] * var38.x4[2]) & 0xffff;
2498       var46.x4[3] = (var45.x4[3] * var38.x4[3]) & 0xffff;
2499       /* 7: div255w */
2500       var47.x4[0] =
2501           ((orc_uint16) (((orc_uint16) (var46.x4[0] + 128)) +
2502               (((orc_uint16) (var46.x4[0] + 128)) >> 8))) >> 8;
2503       var47.x4[1] =
2504           ((orc_uint16) (((orc_uint16) (var46.x4[1] + 128)) +
2505               (((orc_uint16) (var46.x4[1] + 128)) >> 8))) >> 8;
2506       var47.x4[2] =
2507           ((orc_uint16) (((orc_uint16) (var46.x4[2] + 128)) +
2508               (((orc_uint16) (var46.x4[2] + 128)) >> 8))) >> 8;
2509       var47.x4[3] =
2510           ((orc_uint16) (((orc_uint16) (var46.x4[3] + 128)) +
2511               (((orc_uint16) (var46.x4[3] + 128)) >> 8))) >> 8;
2512       /* 9: andl */
2513       var48.i = var41.i & var39.i;
2514       /* 10: convwb */
2515       var49.x4[0] = var47.x4[0];
2516       var49.x4[1] = var47.x4[1];
2517       var49.x4[2] = var47.x4[2];
2518       var49.x4[3] = var47.x4[3];
2519       /* 12: andl */
2520       var50.i = var49.i & var40.i;
2521       /* 13: orl */
2522       var51.i = var48.i | var50.i;
2523       /* 14: storel */
2524       ptr0[i] = var51;
2525     }
2526   }
2527
2528 }
2529
2530 void
2531 compositor_orc_source_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
2532     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
2533 {
2534   OrcExecutor _ex, *ex = &_ex;
2535   static volatile int p_inited = 0;
2536   static OrcCode *c = 0;
2537   void (*func) (OrcExecutor *);
2538
2539   if (!p_inited) {
2540     orc_once_mutex_lock ();
2541     if (!p_inited) {
2542       OrcProgram *p;
2543
2544 #if 1
2545       static const orc_uint8 bc[] = {
2546         1, 7, 9, 26, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
2547         114, 99, 95, 115, 111, 117, 114, 99, 101, 95, 97, 114, 103, 98, 11, 4,
2548         4, 12, 4, 4, 14, 4, 255, 0, 0, 0, 14, 4, 0, 255, 255, 255,
2549         16, 2, 20, 4, 20, 4, 20, 2, 20, 1, 20, 4, 20, 8, 113, 32,
2550         4, 163, 34, 32, 157, 35, 34, 152, 36, 35, 21, 2, 150, 37, 36, 21,
2551         2, 89, 37, 37, 24, 21, 2, 80, 37, 37, 106, 32, 32, 17, 21, 2,
2552         157, 33, 37, 106, 33, 33, 16, 123, 32, 32, 33, 128, 0, 32, 2, 0,
2553
2554       };
2555       p = orc_program_new_from_static_bytecode (bc);
2556       orc_program_set_backup_function (p, _backup_compositor_orc_source_argb);
2557 #else
2558       p = orc_program_new ();
2559       orc_program_set_2d (p);
2560       orc_program_set_name (p, "compositor_orc_source_argb");
2561       orc_program_set_backup_function (p, _backup_compositor_orc_source_argb);
2562       orc_program_add_destination (p, 4, "d1");
2563       orc_program_add_source (p, 4, "s1");
2564       orc_program_add_constant (p, 4, 0x000000ff, "c1");
2565       orc_program_add_constant (p, 4, 0xffffff00, "c2");
2566       orc_program_add_parameter (p, 2, "p1");
2567       orc_program_add_temporary (p, 4, "t1");
2568       orc_program_add_temporary (p, 4, "t2");
2569       orc_program_add_temporary (p, 2, "t3");
2570       orc_program_add_temporary (p, 1, "t4");
2571       orc_program_add_temporary (p, 4, "t5");
2572       orc_program_add_temporary (p, 8, "t6");
2573
2574       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
2575           ORC_VAR_D1);
2576       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_D1,
2577           ORC_VAR_D1);
2578       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
2579           ORC_VAR_D1);
2580       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1,
2581           ORC_VAR_D1);
2582       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_D1,
2583           ORC_VAR_D1);
2584       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_P1,
2585           ORC_VAR_D1);
2586       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_D1,
2587           ORC_VAR_D1);
2588       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
2589           ORC_VAR_D1);
2590       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T2, ORC_VAR_T6, ORC_VAR_D1,
2591           ORC_VAR_D1);
2592       orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
2593           ORC_VAR_D1);
2594       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
2595           ORC_VAR_D1);
2596       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
2597           ORC_VAR_D1);
2598 #endif
2599
2600       orc_program_compile (p);
2601       c = orc_program_take_code (p);
2602       orc_program_free (p);
2603     }
2604     p_inited = TRUE;
2605     orc_once_mutex_unlock ();
2606   }
2607   ex->arrays[ORC_VAR_A2] = c;
2608   ex->program = 0;
2609
2610   ex->n = n;
2611   ORC_EXECUTOR_M (ex) = m;
2612   ex->arrays[ORC_VAR_D1] = d1;
2613   ex->params[ORC_VAR_D1] = d1_stride;
2614   ex->arrays[ORC_VAR_S1] = (void *) s1;
2615   ex->params[ORC_VAR_S1] = s1_stride;
2616   ex->params[ORC_VAR_P1] = p1;
2617
2618   func = c->exec;
2619   func (ex);
2620 }
2621 #endif
2622
2623
2624 /* compositor_orc_blend_bgra */
2625 #ifdef DISABLE_ORC
2626 void
2627 compositor_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
2628     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
2629 {
2630   int i;
2631   int j;
2632   orc_union32 *ORC_RESTRICT ptr0;
2633   const orc_union32 *ORC_RESTRICT ptr4;
2634   orc_union64 var40;
2635 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2636   volatile orc_union64 var41;
2637 #else
2638   orc_union64 var41;
2639 #endif
2640 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2641   volatile orc_union32 var42;
2642 #else
2643   orc_union32 var42;
2644 #endif
2645   orc_union32 var43;
2646   orc_union32 var44;
2647   orc_union16 var45;
2648   orc_int8 var46;
2649   orc_union32 var47;
2650   orc_union64 var48;
2651   orc_union64 var49;
2652   orc_union64 var50;
2653   orc_union64 var51;
2654   orc_union64 var52;
2655   orc_union64 var53;
2656   orc_union32 var54;
2657   orc_union64 var55;
2658   orc_union64 var56;
2659   orc_union64 var57;
2660   orc_union64 var58;
2661   orc_union32 var59;
2662   orc_union32 var60;
2663
2664   for (j = 0; j < m; j++) {
2665     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
2666     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
2667
2668     /* 6: loadpw */
2669     var40.x4[0] = p1;
2670     var40.x4[1] = p1;
2671     var40.x4[2] = p1;
2672     var40.x4[3] = p1;
2673     /* 11: loadpw */
2674     var41.x4[0] = 0x000000ff;   /* 255 or 1.25987e-321f */
2675     var41.x4[1] = 0x000000ff;   /* 255 or 1.25987e-321f */
2676     var41.x4[2] = 0x000000ff;   /* 255 or 1.25987e-321f */
2677     var41.x4[3] = 0x000000ff;   /* 255 or 1.25987e-321f */
2678     /* 19: loadpl */
2679     var42.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
2680
2681     for (i = 0; i < n; i++) {
2682       /* 0: loadl */
2683       var43 = ptr4[i];
2684       /* 1: shrul */
2685       var44.i = ((orc_uint32) var43.i) >> 24;
2686       /* 2: convlw */
2687       var45.i = var44.i;
2688       /* 3: convwb */
2689       var46 = var45.i;
2690       /* 4: splatbl */
2691       var47.i =
2692           ((((orc_uint32) var46) & 0xff) << 24) | ((((orc_uint32) var46) & 0xff)
2693           << 16) | ((((orc_uint32) var46) & 0xff) << 8) | (((orc_uint32) var46)
2694           & 0xff);
2695       /* 5: convubw */
2696       var48.x4[0] = (orc_uint8) var47.x4[0];
2697       var48.x4[1] = (orc_uint8) var47.x4[1];
2698       var48.x4[2] = (orc_uint8) var47.x4[2];
2699       var48.x4[3] = (orc_uint8) var47.x4[3];
2700       /* 7: mullw */
2701       var49.x4[0] = (var48.x4[0] * var40.x4[0]) & 0xffff;
2702       var49.x4[1] = (var48.x4[1] * var40.x4[1]) & 0xffff;
2703       var49.x4[2] = (var48.x4[2] * var40.x4[2]) & 0xffff;
2704       var49.x4[3] = (var48.x4[3] * var40.x4[3]) & 0xffff;
2705       /* 8: div255w */
2706       var50.x4[0] =
2707           ((orc_uint16) (((orc_uint16) (var49.x4[0] + 128)) +
2708               (((orc_uint16) (var49.x4[0] + 128)) >> 8))) >> 8;
2709       var50.x4[1] =
2710           ((orc_uint16) (((orc_uint16) (var49.x4[1] + 128)) +
2711               (((orc_uint16) (var49.x4[1] + 128)) >> 8))) >> 8;
2712       var50.x4[2] =
2713           ((orc_uint16) (((orc_uint16) (var49.x4[2] + 128)) +
2714               (((orc_uint16) (var49.x4[2] + 128)) >> 8))) >> 8;
2715       var50.x4[3] =
2716           ((orc_uint16) (((orc_uint16) (var49.x4[3] + 128)) +
2717               (((orc_uint16) (var49.x4[3] + 128)) >> 8))) >> 8;
2718       /* 9: convubw */
2719       var51.x4[0] = (orc_uint8) var43.x4[0];
2720       var51.x4[1] = (orc_uint8) var43.x4[1];
2721       var51.x4[2] = (orc_uint8) var43.x4[2];
2722       var51.x4[3] = (orc_uint8) var43.x4[3];
2723       /* 10: mullw */
2724       var52.x4[0] = (var51.x4[0] * var50.x4[0]) & 0xffff;
2725       var52.x4[1] = (var51.x4[1] * var50.x4[1]) & 0xffff;
2726       var52.x4[2] = (var51.x4[2] * var50.x4[2]) & 0xffff;
2727       var52.x4[3] = (var51.x4[3] * var50.x4[3]) & 0xffff;
2728       /* 12: subw */
2729       var53.x4[0] = var41.x4[0] - var50.x4[0];
2730       var53.x4[1] = var41.x4[1] - var50.x4[1];
2731       var53.x4[2] = var41.x4[2] - var50.x4[2];
2732       var53.x4[3] = var41.x4[3] - var50.x4[3];
2733       /* 13: loadl */
2734       var54 = ptr0[i];
2735       /* 14: convubw */
2736       var55.x4[0] = (orc_uint8) var54.x4[0];
2737       var55.x4[1] = (orc_uint8) var54.x4[1];
2738       var55.x4[2] = (orc_uint8) var54.x4[2];
2739       var55.x4[3] = (orc_uint8) var54.x4[3];
2740       /* 15: mullw */
2741       var56.x4[0] = (var55.x4[0] * var53.x4[0]) & 0xffff;
2742       var56.x4[1] = (var55.x4[1] * var53.x4[1]) & 0xffff;
2743       var56.x4[2] = (var55.x4[2] * var53.x4[2]) & 0xffff;
2744       var56.x4[3] = (var55.x4[3] * var53.x4[3]) & 0xffff;
2745       /* 16: addw */
2746       var57.x4[0] = var56.x4[0] + var52.x4[0];
2747       var57.x4[1] = var56.x4[1] + var52.x4[1];
2748       var57.x4[2] = var56.x4[2] + var52.x4[2];
2749       var57.x4[3] = var56.x4[3] + var52.x4[3];
2750       /* 17: div255w */
2751       var58.x4[0] =
2752           ((orc_uint16) (((orc_uint16) (var57.x4[0] + 128)) +
2753               (((orc_uint16) (var57.x4[0] + 128)) >> 8))) >> 8;
2754       var58.x4[1] =
2755           ((orc_uint16) (((orc_uint16) (var57.x4[1] + 128)) +
2756               (((orc_uint16) (var57.x4[1] + 128)) >> 8))) >> 8;
2757       var58.x4[2] =
2758           ((orc_uint16) (((orc_uint16) (var57.x4[2] + 128)) +
2759               (((orc_uint16) (var57.x4[2] + 128)) >> 8))) >> 8;
2760       var58.x4[3] =
2761           ((orc_uint16) (((orc_uint16) (var57.x4[3] + 128)) +
2762               (((orc_uint16) (var57.x4[3] + 128)) >> 8))) >> 8;
2763       /* 18: convwb */
2764       var59.x4[0] = var58.x4[0];
2765       var59.x4[1] = var58.x4[1];
2766       var59.x4[2] = var58.x4[2];
2767       var59.x4[3] = var58.x4[3];
2768       /* 20: orl */
2769       var60.i = var59.i | var42.i;
2770       /* 21: storel */
2771       ptr0[i] = var60;
2772     }
2773   }
2774
2775 }
2776
2777 #else
2778 static void
2779 _backup_compositor_orc_blend_bgra (OrcExecutor * ORC_RESTRICT ex)
2780 {
2781   int i;
2782   int j;
2783   int n = ex->n;
2784   int m = ex->params[ORC_VAR_A1];
2785   orc_union32 *ORC_RESTRICT ptr0;
2786   const orc_union32 *ORC_RESTRICT ptr4;
2787   orc_union64 var40;
2788 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2789   volatile orc_union64 var41;
2790 #else
2791   orc_union64 var41;
2792 #endif
2793 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
2794   volatile orc_union32 var42;
2795 #else
2796   orc_union32 var42;
2797 #endif
2798   orc_union32 var43;
2799   orc_union32 var44;
2800   orc_union16 var45;
2801   orc_int8 var46;
2802   orc_union32 var47;
2803   orc_union64 var48;
2804   orc_union64 var49;
2805   orc_union64 var50;
2806   orc_union64 var51;
2807   orc_union64 var52;
2808   orc_union64 var53;
2809   orc_union32 var54;
2810   orc_union64 var55;
2811   orc_union64 var56;
2812   orc_union64 var57;
2813   orc_union64 var58;
2814   orc_union32 var59;
2815   orc_union32 var60;
2816
2817   for (j = 0; j < m; j++) {
2818     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
2819     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
2820
2821     /* 6: loadpw */
2822     var40.x4[0] = ex->params[24];
2823     var40.x4[1] = ex->params[24];
2824     var40.x4[2] = ex->params[24];
2825     var40.x4[3] = ex->params[24];
2826     /* 11: loadpw */
2827     var41.x4[0] = 0x000000ff;   /* 255 or 1.25987e-321f */
2828     var41.x4[1] = 0x000000ff;   /* 255 or 1.25987e-321f */
2829     var41.x4[2] = 0x000000ff;   /* 255 or 1.25987e-321f */
2830     var41.x4[3] = 0x000000ff;   /* 255 or 1.25987e-321f */
2831     /* 19: loadpl */
2832     var42.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
2833
2834     for (i = 0; i < n; i++) {
2835       /* 0: loadl */
2836       var43 = ptr4[i];
2837       /* 1: shrul */
2838       var44.i = ((orc_uint32) var43.i) >> 24;
2839       /* 2: convlw */
2840       var45.i = var44.i;
2841       /* 3: convwb */
2842       var46 = var45.i;
2843       /* 4: splatbl */
2844       var47.i =
2845           ((((orc_uint32) var46) & 0xff) << 24) | ((((orc_uint32) var46) & 0xff)
2846           << 16) | ((((orc_uint32) var46) & 0xff) << 8) | (((orc_uint32) var46)
2847           & 0xff);
2848       /* 5: convubw */
2849       var48.x4[0] = (orc_uint8) var47.x4[0];
2850       var48.x4[1] = (orc_uint8) var47.x4[1];
2851       var48.x4[2] = (orc_uint8) var47.x4[2];
2852       var48.x4[3] = (orc_uint8) var47.x4[3];
2853       /* 7: mullw */
2854       var49.x4[0] = (var48.x4[0] * var40.x4[0]) & 0xffff;
2855       var49.x4[1] = (var48.x4[1] * var40.x4[1]) & 0xffff;
2856       var49.x4[2] = (var48.x4[2] * var40.x4[2]) & 0xffff;
2857       var49.x4[3] = (var48.x4[3] * var40.x4[3]) & 0xffff;
2858       /* 8: div255w */
2859       var50.x4[0] =
2860           ((orc_uint16) (((orc_uint16) (var49.x4[0] + 128)) +
2861               (((orc_uint16) (var49.x4[0] + 128)) >> 8))) >> 8;
2862       var50.x4[1] =
2863           ((orc_uint16) (((orc_uint16) (var49.x4[1] + 128)) +
2864               (((orc_uint16) (var49.x4[1] + 128)) >> 8))) >> 8;
2865       var50.x4[2] =
2866           ((orc_uint16) (((orc_uint16) (var49.x4[2] + 128)) +
2867               (((orc_uint16) (var49.x4[2] + 128)) >> 8))) >> 8;
2868       var50.x4[3] =
2869           ((orc_uint16) (((orc_uint16) (var49.x4[3] + 128)) +
2870               (((orc_uint16) (var49.x4[3] + 128)) >> 8))) >> 8;
2871       /* 9: convubw */
2872       var51.x4[0] = (orc_uint8) var43.x4[0];
2873       var51.x4[1] = (orc_uint8) var43.x4[1];
2874       var51.x4[2] = (orc_uint8) var43.x4[2];
2875       var51.x4[3] = (orc_uint8) var43.x4[3];
2876       /* 10: mullw */
2877       var52.x4[0] = (var51.x4[0] * var50.x4[0]) & 0xffff;
2878       var52.x4[1] = (var51.x4[1] * var50.x4[1]) & 0xffff;
2879       var52.x4[2] = (var51.x4[2] * var50.x4[2]) & 0xffff;
2880       var52.x4[3] = (var51.x4[3] * var50.x4[3]) & 0xffff;
2881       /* 12: subw */
2882       var53.x4[0] = var41.x4[0] - var50.x4[0];
2883       var53.x4[1] = var41.x4[1] - var50.x4[1];
2884       var53.x4[2] = var41.x4[2] - var50.x4[2];
2885       var53.x4[3] = var41.x4[3] - var50.x4[3];
2886       /* 13: loadl */
2887       var54 = ptr0[i];
2888       /* 14: convubw */
2889       var55.x4[0] = (orc_uint8) var54.x4[0];
2890       var55.x4[1] = (orc_uint8) var54.x4[1];
2891       var55.x4[2] = (orc_uint8) var54.x4[2];
2892       var55.x4[3] = (orc_uint8) var54.x4[3];
2893       /* 15: mullw */
2894       var56.x4[0] = (var55.x4[0] * var53.x4[0]) & 0xffff;
2895       var56.x4[1] = (var55.x4[1] * var53.x4[1]) & 0xffff;
2896       var56.x4[2] = (var55.x4[2] * var53.x4[2]) & 0xffff;
2897       var56.x4[3] = (var55.x4[3] * var53.x4[3]) & 0xffff;
2898       /* 16: addw */
2899       var57.x4[0] = var56.x4[0] + var52.x4[0];
2900       var57.x4[1] = var56.x4[1] + var52.x4[1];
2901       var57.x4[2] = var56.x4[2] + var52.x4[2];
2902       var57.x4[3] = var56.x4[3] + var52.x4[3];
2903       /* 17: div255w */
2904       var58.x4[0] =
2905           ((orc_uint16) (((orc_uint16) (var57.x4[0] + 128)) +
2906               (((orc_uint16) (var57.x4[0] + 128)) >> 8))) >> 8;
2907       var58.x4[1] =
2908           ((orc_uint16) (((orc_uint16) (var57.x4[1] + 128)) +
2909               (((orc_uint16) (var57.x4[1] + 128)) >> 8))) >> 8;
2910       var58.x4[2] =
2911           ((orc_uint16) (((orc_uint16) (var57.x4[2] + 128)) +
2912               (((orc_uint16) (var57.x4[2] + 128)) >> 8))) >> 8;
2913       var58.x4[3] =
2914           ((orc_uint16) (((orc_uint16) (var57.x4[3] + 128)) +
2915               (((orc_uint16) (var57.x4[3] + 128)) >> 8))) >> 8;
2916       /* 18: convwb */
2917       var59.x4[0] = var58.x4[0];
2918       var59.x4[1] = var58.x4[1];
2919       var59.x4[2] = var58.x4[2];
2920       var59.x4[3] = var58.x4[3];
2921       /* 20: orl */
2922       var60.i = var59.i | var42.i;
2923       /* 21: storel */
2924       ptr0[i] = var60;
2925     }
2926   }
2927
2928 }
2929
2930 void
2931 compositor_orc_blend_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
2932     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
2933 {
2934   OrcExecutor _ex, *ex = &_ex;
2935   static volatile int p_inited = 0;
2936   static OrcCode *c = 0;
2937   void (*func) (OrcExecutor *);
2938
2939   if (!p_inited) {
2940     orc_once_mutex_lock ();
2941     if (!p_inited) {
2942       OrcProgram *p;
2943
2944 #if 1
2945       static const orc_uint8 bc[] = {
2946         1, 7, 9, 25, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
2947         114, 99, 95, 98, 108, 101, 110, 100, 95, 98, 103, 114, 97, 11, 4, 4,
2948         12, 4, 4, 14, 4, 0, 0, 0, 255, 14, 4, 24, 0, 0, 0, 14,
2949         2, 255, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 2, 20, 1, 20,
2950         4, 20, 8, 20, 8, 20, 8, 113, 32, 4, 126, 33, 32, 17, 163, 34,
2951         33, 157, 35, 34, 152, 36, 35, 21, 2, 150, 39, 36, 21, 2, 89, 39,
2952         39, 24, 21, 2, 80, 39, 39, 21, 2, 150, 38, 32, 21, 2, 89, 38,
2953         38, 39, 21, 2, 98, 39, 18, 39, 113, 32, 0, 21, 2, 150, 37, 32,
2954         21, 2, 89, 37, 37, 39, 21, 2, 70, 37, 37, 38, 21, 2, 80, 37,
2955         37, 21, 2, 157, 32, 37, 123, 32, 32, 16, 128, 0, 32, 2, 0,
2956       };
2957       p = orc_program_new_from_static_bytecode (bc);
2958       orc_program_set_backup_function (p, _backup_compositor_orc_blend_bgra);
2959 #else
2960       p = orc_program_new ();
2961       orc_program_set_2d (p);
2962       orc_program_set_name (p, "compositor_orc_blend_bgra");
2963       orc_program_set_backup_function (p, _backup_compositor_orc_blend_bgra);
2964       orc_program_add_destination (p, 4, "d1");
2965       orc_program_add_source (p, 4, "s1");
2966       orc_program_add_constant (p, 4, 0xff000000, "c1");
2967       orc_program_add_constant (p, 4, 0x00000018, "c2");
2968       orc_program_add_constant (p, 2, 0x000000ff, "c3");
2969       orc_program_add_parameter (p, 2, "p1");
2970       orc_program_add_temporary (p, 4, "t1");
2971       orc_program_add_temporary (p, 4, "t2");
2972       orc_program_add_temporary (p, 2, "t3");
2973       orc_program_add_temporary (p, 1, "t4");
2974       orc_program_add_temporary (p, 4, "t5");
2975       orc_program_add_temporary (p, 8, "t6");
2976       orc_program_add_temporary (p, 8, "t7");
2977       orc_program_add_temporary (p, 8, "t8");
2978
2979       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
2980           ORC_VAR_D1);
2981       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C2,
2982           ORC_VAR_D1);
2983       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
2984           ORC_VAR_D1);
2985       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
2986           ORC_VAR_D1);
2987       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1,
2988           ORC_VAR_D1);
2989       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
2990           ORC_VAR_D1);
2991       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_P1,
2992           ORC_VAR_D1);
2993       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_D1,
2994           ORC_VAR_D1);
2995       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T7, ORC_VAR_T1, ORC_VAR_D1,
2996           ORC_VAR_D1);
2997       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T8,
2998           ORC_VAR_D1);
2999       orc_program_append_2 (p, "subw", 2, ORC_VAR_T8, ORC_VAR_C3, ORC_VAR_T8,
3000           ORC_VAR_D1);
3001       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
3002           ORC_VAR_D1);
3003       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_D1,
3004           ORC_VAR_D1);
3005       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T8,
3006           ORC_VAR_D1);
3007       orc_program_append_2 (p, "addw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T7,
3008           ORC_VAR_D1);
3009       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_D1,
3010           ORC_VAR_D1);
3011       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_D1,
3012           ORC_VAR_D1);
3013       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
3014           ORC_VAR_D1);
3015       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
3016           ORC_VAR_D1);
3017 #endif
3018
3019       orc_program_compile (p);
3020       c = orc_program_take_code (p);
3021       orc_program_free (p);
3022     }
3023     p_inited = TRUE;
3024     orc_once_mutex_unlock ();
3025   }
3026   ex->arrays[ORC_VAR_A2] = c;
3027   ex->program = 0;
3028
3029   ex->n = n;
3030   ORC_EXECUTOR_M (ex) = m;
3031   ex->arrays[ORC_VAR_D1] = d1;
3032   ex->params[ORC_VAR_D1] = d1_stride;
3033   ex->arrays[ORC_VAR_S1] = (void *) s1;
3034   ex->params[ORC_VAR_S1] = s1_stride;
3035   ex->params[ORC_VAR_P1] = p1;
3036
3037   func = c->exec;
3038   func (ex);
3039 }
3040 #endif
3041
3042
3043 /* compositor_orc_source_bgra */
3044 #ifdef DISABLE_ORC
3045 void
3046 compositor_orc_source_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
3047     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
3048 {
3049   int i;
3050   int j;
3051   orc_union32 *ORC_RESTRICT ptr0;
3052   const orc_union32 *ORC_RESTRICT ptr4;
3053   orc_union64 var38;
3054 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3055   volatile orc_union32 var39;
3056 #else
3057   orc_union32 var39;
3058 #endif
3059 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3060   volatile orc_union32 var40;
3061 #else
3062   orc_union32 var40;
3063 #endif
3064   orc_union32 var41;
3065   orc_union16 var42;
3066   orc_int8 var43;
3067   orc_union32 var44;
3068   orc_union64 var45;
3069   orc_union64 var46;
3070   orc_union64 var47;
3071   orc_union32 var48;
3072   orc_union32 var49;
3073   orc_union32 var50;
3074   orc_union32 var51;
3075
3076   for (j = 0; j < m; j++) {
3077     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
3078     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
3079
3080     /* 5: loadpw */
3081     var38.x4[0] = p1;
3082     var38.x4[1] = p1;
3083     var38.x4[2] = p1;
3084     var38.x4[3] = p1;
3085     /* 8: loadpl */
3086     var39.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
3087     /* 11: loadpl */
3088     var40.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
3089
3090     for (i = 0; i < n; i++) {
3091       /* 0: loadl */
3092       var41 = ptr4[i];
3093       /* 1: convhlw */
3094       var42.i = ((orc_uint32) var41.i) >> 16;
3095       /* 2: convhwb */
3096       var43 = ((orc_uint16) var42.i) >> 8;
3097       /* 3: splatbl */
3098       var44.i =
3099           ((((orc_uint32) var43) & 0xff) << 24) | ((((orc_uint32) var43) & 0xff)
3100           << 16) | ((((orc_uint32) var43) & 0xff) << 8) | (((orc_uint32) var43)
3101           & 0xff);
3102       /* 4: convubw */
3103       var45.x4[0] = (orc_uint8) var44.x4[0];
3104       var45.x4[1] = (orc_uint8) var44.x4[1];
3105       var45.x4[2] = (orc_uint8) var44.x4[2];
3106       var45.x4[3] = (orc_uint8) var44.x4[3];
3107       /* 6: mullw */
3108       var46.x4[0] = (var45.x4[0] * var38.x4[0]) & 0xffff;
3109       var46.x4[1] = (var45.x4[1] * var38.x4[1]) & 0xffff;
3110       var46.x4[2] = (var45.x4[2] * var38.x4[2]) & 0xffff;
3111       var46.x4[3] = (var45.x4[3] * var38.x4[3]) & 0xffff;
3112       /* 7: div255w */
3113       var47.x4[0] =
3114           ((orc_uint16) (((orc_uint16) (var46.x4[0] + 128)) +
3115               (((orc_uint16) (var46.x4[0] + 128)) >> 8))) >> 8;
3116       var47.x4[1] =
3117           ((orc_uint16) (((orc_uint16) (var46.x4[1] + 128)) +
3118               (((orc_uint16) (var46.x4[1] + 128)) >> 8))) >> 8;
3119       var47.x4[2] =
3120           ((orc_uint16) (((orc_uint16) (var46.x4[2] + 128)) +
3121               (((orc_uint16) (var46.x4[2] + 128)) >> 8))) >> 8;
3122       var47.x4[3] =
3123           ((orc_uint16) (((orc_uint16) (var46.x4[3] + 128)) +
3124               (((orc_uint16) (var46.x4[3] + 128)) >> 8))) >> 8;
3125       /* 9: andl */
3126       var48.i = var41.i & var39.i;
3127       /* 10: convwb */
3128       var49.x4[0] = var47.x4[0];
3129       var49.x4[1] = var47.x4[1];
3130       var49.x4[2] = var47.x4[2];
3131       var49.x4[3] = var47.x4[3];
3132       /* 12: andl */
3133       var50.i = var49.i & var40.i;
3134       /* 13: orl */
3135       var51.i = var48.i | var50.i;
3136       /* 14: storel */
3137       ptr0[i] = var51;
3138     }
3139   }
3140
3141 }
3142
3143 #else
3144 static void
3145 _backup_compositor_orc_source_bgra (OrcExecutor * ORC_RESTRICT ex)
3146 {
3147   int i;
3148   int j;
3149   int n = ex->n;
3150   int m = ex->params[ORC_VAR_A1];
3151   orc_union32 *ORC_RESTRICT ptr0;
3152   const orc_union32 *ORC_RESTRICT ptr4;
3153   orc_union64 var38;
3154 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3155   volatile orc_union32 var39;
3156 #else
3157   orc_union32 var39;
3158 #endif
3159 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3160   volatile orc_union32 var40;
3161 #else
3162   orc_union32 var40;
3163 #endif
3164   orc_union32 var41;
3165   orc_union16 var42;
3166   orc_int8 var43;
3167   orc_union32 var44;
3168   orc_union64 var45;
3169   orc_union64 var46;
3170   orc_union64 var47;
3171   orc_union32 var48;
3172   orc_union32 var49;
3173   orc_union32 var50;
3174   orc_union32 var51;
3175
3176   for (j = 0; j < m; j++) {
3177     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
3178     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
3179
3180     /* 5: loadpw */
3181     var38.x4[0] = ex->params[24];
3182     var38.x4[1] = ex->params[24];
3183     var38.x4[2] = ex->params[24];
3184     var38.x4[3] = ex->params[24];
3185     /* 8: loadpl */
3186     var39.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
3187     /* 11: loadpl */
3188     var40.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
3189
3190     for (i = 0; i < n; i++) {
3191       /* 0: loadl */
3192       var41 = ptr4[i];
3193       /* 1: convhlw */
3194       var42.i = ((orc_uint32) var41.i) >> 16;
3195       /* 2: convhwb */
3196       var43 = ((orc_uint16) var42.i) >> 8;
3197       /* 3: splatbl */
3198       var44.i =
3199           ((((orc_uint32) var43) & 0xff) << 24) | ((((orc_uint32) var43) & 0xff)
3200           << 16) | ((((orc_uint32) var43) & 0xff) << 8) | (((orc_uint32) var43)
3201           & 0xff);
3202       /* 4: convubw */
3203       var45.x4[0] = (orc_uint8) var44.x4[0];
3204       var45.x4[1] = (orc_uint8) var44.x4[1];
3205       var45.x4[2] = (orc_uint8) var44.x4[2];
3206       var45.x4[3] = (orc_uint8) var44.x4[3];
3207       /* 6: mullw */
3208       var46.x4[0] = (var45.x4[0] * var38.x4[0]) & 0xffff;
3209       var46.x4[1] = (var45.x4[1] * var38.x4[1]) & 0xffff;
3210       var46.x4[2] = (var45.x4[2] * var38.x4[2]) & 0xffff;
3211       var46.x4[3] = (var45.x4[3] * var38.x4[3]) & 0xffff;
3212       /* 7: div255w */
3213       var47.x4[0] =
3214           ((orc_uint16) (((orc_uint16) (var46.x4[0] + 128)) +
3215               (((orc_uint16) (var46.x4[0] + 128)) >> 8))) >> 8;
3216       var47.x4[1] =
3217           ((orc_uint16) (((orc_uint16) (var46.x4[1] + 128)) +
3218               (((orc_uint16) (var46.x4[1] + 128)) >> 8))) >> 8;
3219       var47.x4[2] =
3220           ((orc_uint16) (((orc_uint16) (var46.x4[2] + 128)) +
3221               (((orc_uint16) (var46.x4[2] + 128)) >> 8))) >> 8;
3222       var47.x4[3] =
3223           ((orc_uint16) (((orc_uint16) (var46.x4[3] + 128)) +
3224               (((orc_uint16) (var46.x4[3] + 128)) >> 8))) >> 8;
3225       /* 9: andl */
3226       var48.i = var41.i & var39.i;
3227       /* 10: convwb */
3228       var49.x4[0] = var47.x4[0];
3229       var49.x4[1] = var47.x4[1];
3230       var49.x4[2] = var47.x4[2];
3231       var49.x4[3] = var47.x4[3];
3232       /* 12: andl */
3233       var50.i = var49.i & var40.i;
3234       /* 13: orl */
3235       var51.i = var48.i | var50.i;
3236       /* 14: storel */
3237       ptr0[i] = var51;
3238     }
3239   }
3240
3241 }
3242
3243 void
3244 compositor_orc_source_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
3245     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
3246 {
3247   OrcExecutor _ex, *ex = &_ex;
3248   static volatile int p_inited = 0;
3249   static OrcCode *c = 0;
3250   void (*func) (OrcExecutor *);
3251
3252   if (!p_inited) {
3253     orc_once_mutex_lock ();
3254     if (!p_inited) {
3255       OrcProgram *p;
3256
3257 #if 1
3258       static const orc_uint8 bc[] = {
3259         1, 7, 9, 26, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
3260         114, 99, 95, 115, 111, 117, 114, 99, 101, 95, 98, 103, 114, 97, 11, 4,
3261         4, 12, 4, 4, 14, 4, 0, 0, 0, 255, 14, 4, 255, 255, 255, 0,
3262         16, 2, 20, 4, 20, 4, 20, 2, 20, 1, 20, 4, 20, 8, 113, 32,
3263         4, 164, 34, 32, 158, 35, 34, 152, 36, 35, 21, 2, 150, 37, 36, 21,
3264         2, 89, 37, 37, 24, 21, 2, 80, 37, 37, 106, 32, 32, 17, 21, 2,
3265         157, 33, 37, 106, 33, 33, 16, 123, 32, 32, 33, 128, 0, 32, 2, 0,
3266
3267       };
3268       p = orc_program_new_from_static_bytecode (bc);
3269       orc_program_set_backup_function (p, _backup_compositor_orc_source_bgra);
3270 #else
3271       p = orc_program_new ();
3272       orc_program_set_2d (p);
3273       orc_program_set_name (p, "compositor_orc_source_bgra");
3274       orc_program_set_backup_function (p, _backup_compositor_orc_source_bgra);
3275       orc_program_add_destination (p, 4, "d1");
3276       orc_program_add_source (p, 4, "s1");
3277       orc_program_add_constant (p, 4, 0xff000000, "c1");
3278       orc_program_add_constant (p, 4, 0x00ffffff, "c2");
3279       orc_program_add_parameter (p, 2, "p1");
3280       orc_program_add_temporary (p, 4, "t1");
3281       orc_program_add_temporary (p, 4, "t2");
3282       orc_program_add_temporary (p, 2, "t3");
3283       orc_program_add_temporary (p, 1, "t4");
3284       orc_program_add_temporary (p, 4, "t5");
3285       orc_program_add_temporary (p, 8, "t6");
3286
3287       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3288           ORC_VAR_D1);
3289       orc_program_append_2 (p, "convhlw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_D1,
3290           ORC_VAR_D1);
3291       orc_program_append_2 (p, "convhwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
3292           ORC_VAR_D1);
3293       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_D1,
3294           ORC_VAR_D1);
3295       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_D1,
3296           ORC_VAR_D1);
3297       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_P1,
3298           ORC_VAR_D1);
3299       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_D1,
3300           ORC_VAR_D1);
3301       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
3302           ORC_VAR_D1);
3303       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T2, ORC_VAR_T6, ORC_VAR_D1,
3304           ORC_VAR_D1);
3305       orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
3306           ORC_VAR_D1);
3307       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
3308           ORC_VAR_D1);
3309       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
3310           ORC_VAR_D1);
3311 #endif
3312
3313       orc_program_compile (p);
3314       c = orc_program_take_code (p);
3315       orc_program_free (p);
3316     }
3317     p_inited = TRUE;
3318     orc_once_mutex_unlock ();
3319   }
3320   ex->arrays[ORC_VAR_A2] = c;
3321   ex->program = 0;
3322
3323   ex->n = n;
3324   ORC_EXECUTOR_M (ex) = m;
3325   ex->arrays[ORC_VAR_D1] = d1;
3326   ex->params[ORC_VAR_D1] = d1_stride;
3327   ex->arrays[ORC_VAR_S1] = (void *) s1;
3328   ex->params[ORC_VAR_S1] = s1_stride;
3329   ex->params[ORC_VAR_P1] = p1;
3330
3331   func = c->exec;
3332   func (ex);
3333 }
3334 #endif
3335
3336
3337 /* compositor_orc_overlay_argb */
3338 #ifdef DISABLE_ORC
3339 void
3340 compositor_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
3341     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
3342 {
3343   int i;
3344   int j;
3345   orc_union32 *ORC_RESTRICT ptr0;
3346   const orc_union32 *ORC_RESTRICT ptr4;
3347   orc_union64 var41;
3348 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3349   volatile orc_union32 var42;
3350 #else
3351   orc_union32 var42;
3352 #endif
3353 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3354   volatile orc_union32 var43;
3355 #else
3356   orc_union32 var43;
3357 #endif
3358   orc_union32 var44;
3359   orc_union16 var45;
3360   orc_int8 var46;
3361   orc_union32 var47;
3362   orc_union64 var48;
3363   orc_union64 var49;
3364   orc_union64 var50;
3365   orc_union64 var51;
3366   orc_union64 var52;
3367   orc_union32 var53;
3368   orc_union64 var54;
3369   orc_union64 var55;
3370   orc_union32 var56;
3371   orc_union16 var57;
3372   orc_int8 var58;
3373   orc_union32 var59;
3374   orc_union64 var60;
3375   orc_union64 var61;
3376   orc_union64 var62;
3377   orc_union64 var63;
3378   orc_union64 var64;
3379   orc_union64 var65;
3380   orc_union64 var66;
3381   orc_union64 var67;
3382   orc_union32 var68;
3383   orc_union32 var69;
3384   orc_union32 var70;
3385   orc_union32 var71;
3386   orc_union32 var72;
3387
3388   for (j = 0; j < m; j++) {
3389     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
3390     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
3391
3392     /* 5: loadpw */
3393     var41.x4[0] = p1;
3394     var41.x4[1] = p1;
3395     var41.x4[2] = p1;
3396     var41.x4[3] = p1;
3397     /* 10: loadpl */
3398     var53.i = 0xffffffff;       /* -1 or 2.122e-314f */
3399     /* 26: loadpl */
3400     var42.i = 0xffffff00;       /* -256 or 2.122e-314f */
3401     /* 29: loadpl */
3402     var43.i = 0x000000ff;       /* 255 or 1.25987e-321f */
3403
3404     for (i = 0; i < n; i++) {
3405       /* 0: loadl */
3406       var44 = ptr4[i];
3407       /* 1: convlw */
3408       var45.i = var44.i;
3409       /* 2: convwb */
3410       var46 = var45.i;
3411       /* 3: splatbl */
3412       var47.i =
3413           ((((orc_uint32) var46) & 0xff) << 24) | ((((orc_uint32) var46) & 0xff)
3414           << 16) | ((((orc_uint32) var46) & 0xff) << 8) | (((orc_uint32) var46)
3415           & 0xff);
3416       /* 4: convubw */
3417       var48.x4[0] = (orc_uint8) var47.x4[0];
3418       var48.x4[1] = (orc_uint8) var47.x4[1];
3419       var48.x4[2] = (orc_uint8) var47.x4[2];
3420       var48.x4[3] = (orc_uint8) var47.x4[3];
3421       /* 6: mullw */
3422       var49.x4[0] = (var48.x4[0] * var41.x4[0]) & 0xffff;
3423       var49.x4[1] = (var48.x4[1] * var41.x4[1]) & 0xffff;
3424       var49.x4[2] = (var48.x4[2] * var41.x4[2]) & 0xffff;
3425       var49.x4[3] = (var48.x4[3] * var41.x4[3]) & 0xffff;
3426       /* 7: div255w */
3427       var50.x4[0] =
3428           ((orc_uint16) (((orc_uint16) (var49.x4[0] + 128)) +
3429               (((orc_uint16) (var49.x4[0] + 128)) >> 8))) >> 8;
3430       var50.x4[1] =
3431           ((orc_uint16) (((orc_uint16) (var49.x4[1] + 128)) +
3432               (((orc_uint16) (var49.x4[1] + 128)) >> 8))) >> 8;
3433       var50.x4[2] =
3434           ((orc_uint16) (((orc_uint16) (var49.x4[2] + 128)) +
3435               (((orc_uint16) (var49.x4[2] + 128)) >> 8))) >> 8;
3436       var50.x4[3] =
3437           ((orc_uint16) (((orc_uint16) (var49.x4[3] + 128)) +
3438               (((orc_uint16) (var49.x4[3] + 128)) >> 8))) >> 8;
3439       /* 8: convubw */
3440       var51.x4[0] = (orc_uint8) var44.x4[0];
3441       var51.x4[1] = (orc_uint8) var44.x4[1];
3442       var51.x4[2] = (orc_uint8) var44.x4[2];
3443       var51.x4[3] = (orc_uint8) var44.x4[3];
3444       /* 9: mullw */
3445       var52.x4[0] = (var51.x4[0] * var50.x4[0]) & 0xffff;
3446       var52.x4[1] = (var51.x4[1] * var50.x4[1]) & 0xffff;
3447       var52.x4[2] = (var51.x4[2] * var50.x4[2]) & 0xffff;
3448       var52.x4[3] = (var51.x4[3] * var50.x4[3]) & 0xffff;
3449       /* 11: convubw */
3450       var54.x4[0] = (orc_uint8) var53.x4[0];
3451       var54.x4[1] = (orc_uint8) var53.x4[1];
3452       var54.x4[2] = (orc_uint8) var53.x4[2];
3453       var54.x4[3] = (orc_uint8) var53.x4[3];
3454       /* 12: subw */
3455       var55.x4[0] = var54.x4[0] - var50.x4[0];
3456       var55.x4[1] = var54.x4[1] - var50.x4[1];
3457       var55.x4[2] = var54.x4[2] - var50.x4[2];
3458       var55.x4[3] = var54.x4[3] - var50.x4[3];
3459       /* 13: loadl */
3460       var56 = ptr0[i];
3461       /* 14: convlw */
3462       var57.i = var56.i;
3463       /* 15: convwb */
3464       var58 = var57.i;
3465       /* 16: splatbl */
3466       var59.i =
3467           ((((orc_uint32) var58) & 0xff) << 24) | ((((orc_uint32) var58) & 0xff)
3468           << 16) | ((((orc_uint32) var58) & 0xff) << 8) | (((orc_uint32) var58)
3469           & 0xff);
3470       /* 17: convubw */
3471       var60.x4[0] = (orc_uint8) var59.x4[0];
3472       var60.x4[1] = (orc_uint8) var59.x4[1];
3473       var60.x4[2] = (orc_uint8) var59.x4[2];
3474       var60.x4[3] = (orc_uint8) var59.x4[3];
3475       /* 18: mullw */
3476       var61.x4[0] = (var60.x4[0] * var55.x4[0]) & 0xffff;
3477       var61.x4[1] = (var60.x4[1] * var55.x4[1]) & 0xffff;
3478       var61.x4[2] = (var60.x4[2] * var55.x4[2]) & 0xffff;
3479       var61.x4[3] = (var60.x4[3] * var55.x4[3]) & 0xffff;
3480       /* 19: div255w */
3481       var62.x4[0] =
3482           ((orc_uint16) (((orc_uint16) (var61.x4[0] + 128)) +
3483               (((orc_uint16) (var61.x4[0] + 128)) >> 8))) >> 8;
3484       var62.x4[1] =
3485           ((orc_uint16) (((orc_uint16) (var61.x4[1] + 128)) +
3486               (((orc_uint16) (var61.x4[1] + 128)) >> 8))) >> 8;
3487       var62.x4[2] =
3488           ((orc_uint16) (((orc_uint16) (var61.x4[2] + 128)) +
3489               (((orc_uint16) (var61.x4[2] + 128)) >> 8))) >> 8;
3490       var62.x4[3] =
3491           ((orc_uint16) (((orc_uint16) (var61.x4[3] + 128)) +
3492               (((orc_uint16) (var61.x4[3] + 128)) >> 8))) >> 8;
3493       /* 20: convubw */
3494       var63.x4[0] = (orc_uint8) var56.x4[0];
3495       var63.x4[1] = (orc_uint8) var56.x4[1];
3496       var63.x4[2] = (orc_uint8) var56.x4[2];
3497       var63.x4[3] = (orc_uint8) var56.x4[3];
3498       /* 21: mullw */
3499       var64.x4[0] = (var63.x4[0] * var62.x4[0]) & 0xffff;
3500       var64.x4[1] = (var63.x4[1] * var62.x4[1]) & 0xffff;
3501       var64.x4[2] = (var63.x4[2] * var62.x4[2]) & 0xffff;
3502       var64.x4[3] = (var63.x4[3] * var62.x4[3]) & 0xffff;
3503       /* 22: addw */
3504       var65.x4[0] = var64.x4[0] + var52.x4[0];
3505       var65.x4[1] = var64.x4[1] + var52.x4[1];
3506       var65.x4[2] = var64.x4[2] + var52.x4[2];
3507       var65.x4[3] = var64.x4[3] + var52.x4[3];
3508       /* 23: addw */
3509       var66.x4[0] = var62.x4[0] + var50.x4[0];
3510       var66.x4[1] = var62.x4[1] + var50.x4[1];
3511       var66.x4[2] = var62.x4[2] + var50.x4[2];
3512       var66.x4[3] = var62.x4[3] + var50.x4[3];
3513       /* 24: divluw */
3514       var67.x4[0] =
3515           ((var66.x4[0] & 0xff) ==
3516           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[0]) /
3517           ((orc_uint16) var66.x4[0] & 0xff));
3518       var67.x4[1] =
3519           ((var66.x4[1] & 0xff) ==
3520           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[1]) /
3521           ((orc_uint16) var66.x4[1] & 0xff));
3522       var67.x4[2] =
3523           ((var66.x4[2] & 0xff) ==
3524           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[2]) /
3525           ((orc_uint16) var66.x4[2] & 0xff));
3526       var67.x4[3] =
3527           ((var66.x4[3] & 0xff) ==
3528           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[3]) /
3529           ((orc_uint16) var66.x4[3] & 0xff));
3530       /* 25: convwb */
3531       var68.x4[0] = var67.x4[0];
3532       var68.x4[1] = var67.x4[1];
3533       var68.x4[2] = var67.x4[2];
3534       var68.x4[3] = var67.x4[3];
3535       /* 27: andl */
3536       var69.i = var68.i & var42.i;
3537       /* 28: convwb */
3538       var70.x4[0] = var66.x4[0];
3539       var70.x4[1] = var66.x4[1];
3540       var70.x4[2] = var66.x4[2];
3541       var70.x4[3] = var66.x4[3];
3542       /* 30: andl */
3543       var71.i = var70.i & var43.i;
3544       /* 31: orl */
3545       var72.i = var69.i | var71.i;
3546       /* 32: storel */
3547       ptr0[i] = var72;
3548     }
3549   }
3550
3551 }
3552
3553 #else
3554 static void
3555 _backup_compositor_orc_overlay_argb (OrcExecutor * ORC_RESTRICT ex)
3556 {
3557   int i;
3558   int j;
3559   int n = ex->n;
3560   int m = ex->params[ORC_VAR_A1];
3561   orc_union32 *ORC_RESTRICT ptr0;
3562   const orc_union32 *ORC_RESTRICT ptr4;
3563   orc_union64 var41;
3564 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3565   volatile orc_union32 var42;
3566 #else
3567   orc_union32 var42;
3568 #endif
3569 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3570   volatile orc_union32 var43;
3571 #else
3572   orc_union32 var43;
3573 #endif
3574   orc_union32 var44;
3575   orc_union16 var45;
3576   orc_int8 var46;
3577   orc_union32 var47;
3578   orc_union64 var48;
3579   orc_union64 var49;
3580   orc_union64 var50;
3581   orc_union64 var51;
3582   orc_union64 var52;
3583   orc_union32 var53;
3584   orc_union64 var54;
3585   orc_union64 var55;
3586   orc_union32 var56;
3587   orc_union16 var57;
3588   orc_int8 var58;
3589   orc_union32 var59;
3590   orc_union64 var60;
3591   orc_union64 var61;
3592   orc_union64 var62;
3593   orc_union64 var63;
3594   orc_union64 var64;
3595   orc_union64 var65;
3596   orc_union64 var66;
3597   orc_union64 var67;
3598   orc_union32 var68;
3599   orc_union32 var69;
3600   orc_union32 var70;
3601   orc_union32 var71;
3602   orc_union32 var72;
3603
3604   for (j = 0; j < m; j++) {
3605     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
3606     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
3607
3608     /* 5: loadpw */
3609     var41.x4[0] = ex->params[24];
3610     var41.x4[1] = ex->params[24];
3611     var41.x4[2] = ex->params[24];
3612     var41.x4[3] = ex->params[24];
3613     /* 10: loadpl */
3614     var53.i = 0xffffffff;       /* -1 or 2.122e-314f */
3615     /* 26: loadpl */
3616     var42.i = 0xffffff00;       /* -256 or 2.122e-314f */
3617     /* 29: loadpl */
3618     var43.i = 0x000000ff;       /* 255 or 1.25987e-321f */
3619
3620     for (i = 0; i < n; i++) {
3621       /* 0: loadl */
3622       var44 = ptr4[i];
3623       /* 1: convlw */
3624       var45.i = var44.i;
3625       /* 2: convwb */
3626       var46 = var45.i;
3627       /* 3: splatbl */
3628       var47.i =
3629           ((((orc_uint32) var46) & 0xff) << 24) | ((((orc_uint32) var46) & 0xff)
3630           << 16) | ((((orc_uint32) var46) & 0xff) << 8) | (((orc_uint32) var46)
3631           & 0xff);
3632       /* 4: convubw */
3633       var48.x4[0] = (orc_uint8) var47.x4[0];
3634       var48.x4[1] = (orc_uint8) var47.x4[1];
3635       var48.x4[2] = (orc_uint8) var47.x4[2];
3636       var48.x4[3] = (orc_uint8) var47.x4[3];
3637       /* 6: mullw */
3638       var49.x4[0] = (var48.x4[0] * var41.x4[0]) & 0xffff;
3639       var49.x4[1] = (var48.x4[1] * var41.x4[1]) & 0xffff;
3640       var49.x4[2] = (var48.x4[2] * var41.x4[2]) & 0xffff;
3641       var49.x4[3] = (var48.x4[3] * var41.x4[3]) & 0xffff;
3642       /* 7: div255w */
3643       var50.x4[0] =
3644           ((orc_uint16) (((orc_uint16) (var49.x4[0] + 128)) +
3645               (((orc_uint16) (var49.x4[0] + 128)) >> 8))) >> 8;
3646       var50.x4[1] =
3647           ((orc_uint16) (((orc_uint16) (var49.x4[1] + 128)) +
3648               (((orc_uint16) (var49.x4[1] + 128)) >> 8))) >> 8;
3649       var50.x4[2] =
3650           ((orc_uint16) (((orc_uint16) (var49.x4[2] + 128)) +
3651               (((orc_uint16) (var49.x4[2] + 128)) >> 8))) >> 8;
3652       var50.x4[3] =
3653           ((orc_uint16) (((orc_uint16) (var49.x4[3] + 128)) +
3654               (((orc_uint16) (var49.x4[3] + 128)) >> 8))) >> 8;
3655       /* 8: convubw */
3656       var51.x4[0] = (orc_uint8) var44.x4[0];
3657       var51.x4[1] = (orc_uint8) var44.x4[1];
3658       var51.x4[2] = (orc_uint8) var44.x4[2];
3659       var51.x4[3] = (orc_uint8) var44.x4[3];
3660       /* 9: mullw */
3661       var52.x4[0] = (var51.x4[0] * var50.x4[0]) & 0xffff;
3662       var52.x4[1] = (var51.x4[1] * var50.x4[1]) & 0xffff;
3663       var52.x4[2] = (var51.x4[2] * var50.x4[2]) & 0xffff;
3664       var52.x4[3] = (var51.x4[3] * var50.x4[3]) & 0xffff;
3665       /* 11: convubw */
3666       var54.x4[0] = (orc_uint8) var53.x4[0];
3667       var54.x4[1] = (orc_uint8) var53.x4[1];
3668       var54.x4[2] = (orc_uint8) var53.x4[2];
3669       var54.x4[3] = (orc_uint8) var53.x4[3];
3670       /* 12: subw */
3671       var55.x4[0] = var54.x4[0] - var50.x4[0];
3672       var55.x4[1] = var54.x4[1] - var50.x4[1];
3673       var55.x4[2] = var54.x4[2] - var50.x4[2];
3674       var55.x4[3] = var54.x4[3] - var50.x4[3];
3675       /* 13: loadl */
3676       var56 = ptr0[i];
3677       /* 14: convlw */
3678       var57.i = var56.i;
3679       /* 15: convwb */
3680       var58 = var57.i;
3681       /* 16: splatbl */
3682       var59.i =
3683           ((((orc_uint32) var58) & 0xff) << 24) | ((((orc_uint32) var58) & 0xff)
3684           << 16) | ((((orc_uint32) var58) & 0xff) << 8) | (((orc_uint32) var58)
3685           & 0xff);
3686       /* 17: convubw */
3687       var60.x4[0] = (orc_uint8) var59.x4[0];
3688       var60.x4[1] = (orc_uint8) var59.x4[1];
3689       var60.x4[2] = (orc_uint8) var59.x4[2];
3690       var60.x4[3] = (orc_uint8) var59.x4[3];
3691       /* 18: mullw */
3692       var61.x4[0] = (var60.x4[0] * var55.x4[0]) & 0xffff;
3693       var61.x4[1] = (var60.x4[1] * var55.x4[1]) & 0xffff;
3694       var61.x4[2] = (var60.x4[2] * var55.x4[2]) & 0xffff;
3695       var61.x4[3] = (var60.x4[3] * var55.x4[3]) & 0xffff;
3696       /* 19: div255w */
3697       var62.x4[0] =
3698           ((orc_uint16) (((orc_uint16) (var61.x4[0] + 128)) +
3699               (((orc_uint16) (var61.x4[0] + 128)) >> 8))) >> 8;
3700       var62.x4[1] =
3701           ((orc_uint16) (((orc_uint16) (var61.x4[1] + 128)) +
3702               (((orc_uint16) (var61.x4[1] + 128)) >> 8))) >> 8;
3703       var62.x4[2] =
3704           ((orc_uint16) (((orc_uint16) (var61.x4[2] + 128)) +
3705               (((orc_uint16) (var61.x4[2] + 128)) >> 8))) >> 8;
3706       var62.x4[3] =
3707           ((orc_uint16) (((orc_uint16) (var61.x4[3] + 128)) +
3708               (((orc_uint16) (var61.x4[3] + 128)) >> 8))) >> 8;
3709       /* 20: convubw */
3710       var63.x4[0] = (orc_uint8) var56.x4[0];
3711       var63.x4[1] = (orc_uint8) var56.x4[1];
3712       var63.x4[2] = (orc_uint8) var56.x4[2];
3713       var63.x4[3] = (orc_uint8) var56.x4[3];
3714       /* 21: mullw */
3715       var64.x4[0] = (var63.x4[0] * var62.x4[0]) & 0xffff;
3716       var64.x4[1] = (var63.x4[1] * var62.x4[1]) & 0xffff;
3717       var64.x4[2] = (var63.x4[2] * var62.x4[2]) & 0xffff;
3718       var64.x4[3] = (var63.x4[3] * var62.x4[3]) & 0xffff;
3719       /* 22: addw */
3720       var65.x4[0] = var64.x4[0] + var52.x4[0];
3721       var65.x4[1] = var64.x4[1] + var52.x4[1];
3722       var65.x4[2] = var64.x4[2] + var52.x4[2];
3723       var65.x4[3] = var64.x4[3] + var52.x4[3];
3724       /* 23: addw */
3725       var66.x4[0] = var62.x4[0] + var50.x4[0];
3726       var66.x4[1] = var62.x4[1] + var50.x4[1];
3727       var66.x4[2] = var62.x4[2] + var50.x4[2];
3728       var66.x4[3] = var62.x4[3] + var50.x4[3];
3729       /* 24: divluw */
3730       var67.x4[0] =
3731           ((var66.x4[0] & 0xff) ==
3732           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[0]) /
3733           ((orc_uint16) var66.x4[0] & 0xff));
3734       var67.x4[1] =
3735           ((var66.x4[1] & 0xff) ==
3736           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[1]) /
3737           ((orc_uint16) var66.x4[1] & 0xff));
3738       var67.x4[2] =
3739           ((var66.x4[2] & 0xff) ==
3740           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[2]) /
3741           ((orc_uint16) var66.x4[2] & 0xff));
3742       var67.x4[3] =
3743           ((var66.x4[3] & 0xff) ==
3744           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var65.x4[3]) /
3745           ((orc_uint16) var66.x4[3] & 0xff));
3746       /* 25: convwb */
3747       var68.x4[0] = var67.x4[0];
3748       var68.x4[1] = var67.x4[1];
3749       var68.x4[2] = var67.x4[2];
3750       var68.x4[3] = var67.x4[3];
3751       /* 27: andl */
3752       var69.i = var68.i & var42.i;
3753       /* 28: convwb */
3754       var70.x4[0] = var66.x4[0];
3755       var70.x4[1] = var66.x4[1];
3756       var70.x4[2] = var66.x4[2];
3757       var70.x4[3] = var66.x4[3];
3758       /* 30: andl */
3759       var71.i = var70.i & var43.i;
3760       /* 31: orl */
3761       var72.i = var69.i | var71.i;
3762       /* 32: storel */
3763       ptr0[i] = var72;
3764     }
3765   }
3766
3767 }
3768
3769 void
3770 compositor_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride,
3771     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
3772 {
3773   OrcExecutor _ex, *ex = &_ex;
3774   static volatile int p_inited = 0;
3775   static OrcCode *c = 0;
3776   void (*func) (OrcExecutor *);
3777
3778   if (!p_inited) {
3779     orc_once_mutex_lock ();
3780     if (!p_inited) {
3781       OrcProgram *p;
3782
3783 #if 1
3784       static const orc_uint8 bc[] = {
3785         1, 7, 9, 27, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
3786         114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 97, 114, 103, 98, 11,
3787         4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 255, 0, 0,
3788         0, 14, 4, 0, 255, 255, 255, 16, 2, 20, 4, 20, 2, 20, 1, 20,
3789         8, 20, 8, 20, 8, 20, 4, 20, 8, 20, 8, 113, 32, 4, 163, 33,
3790         32, 157, 34, 33, 152, 38, 34, 21, 2, 150, 35, 38, 21, 2, 89, 35,
3791         35, 24, 21, 2, 80, 35, 35, 21, 2, 150, 40, 32, 21, 2, 89, 40,
3792         40, 35, 115, 38, 16, 21, 2, 150, 36, 38, 21, 2, 98, 36, 36, 35,
3793         113, 32, 0, 163, 33, 32, 157, 34, 33, 152, 38, 34, 21, 2, 150, 37,
3794         38, 21, 2, 89, 37, 37, 36, 21, 2, 80, 37, 37, 21, 2, 150, 39,
3795         32, 21, 2, 89, 39, 39, 37, 21, 2, 70, 39, 39, 40, 21, 2, 70,
3796         37, 37, 35, 21, 2, 81, 39, 39, 37, 21, 2, 157, 32, 39, 106, 32,
3797         32, 18, 21, 2, 157, 38, 37, 106, 38, 38, 17, 123, 32, 32, 38, 128,
3798         0, 32, 2, 0,
3799       };
3800       p = orc_program_new_from_static_bytecode (bc);
3801       orc_program_set_backup_function (p, _backup_compositor_orc_overlay_argb);
3802 #else
3803       p = orc_program_new ();
3804       orc_program_set_2d (p);
3805       orc_program_set_name (p, "compositor_orc_overlay_argb");
3806       orc_program_set_backup_function (p, _backup_compositor_orc_overlay_argb);
3807       orc_program_add_destination (p, 4, "d1");
3808       orc_program_add_source (p, 4, "s1");
3809       orc_program_add_constant (p, 4, 0xffffffff, "c1");
3810       orc_program_add_constant (p, 4, 0x000000ff, "c2");
3811       orc_program_add_constant (p, 4, 0xffffff00, "c3");
3812       orc_program_add_parameter (p, 2, "p1");
3813       orc_program_add_temporary (p, 4, "t1");
3814       orc_program_add_temporary (p, 2, "t2");
3815       orc_program_add_temporary (p, 1, "t3");
3816       orc_program_add_temporary (p, 8, "t4");
3817       orc_program_add_temporary (p, 8, "t5");
3818       orc_program_add_temporary (p, 8, "t6");
3819       orc_program_add_temporary (p, 4, "t7");
3820       orc_program_add_temporary (p, 8, "t8");
3821       orc_program_add_temporary (p, 8, "t9");
3822
3823       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3824           ORC_VAR_D1);
3825       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
3826           ORC_VAR_D1);
3827       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
3828           ORC_VAR_D1);
3829       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T7, ORC_VAR_T3, ORC_VAR_D1,
3830           ORC_VAR_D1);
3831       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T7, ORC_VAR_D1,
3832           ORC_VAR_D1);
3833       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_P1,
3834           ORC_VAR_D1);
3835       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_D1,
3836           ORC_VAR_D1);
3837       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T9, ORC_VAR_T1, ORC_VAR_D1,
3838           ORC_VAR_D1);
3839       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T4,
3840           ORC_VAR_D1);
3841       orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T7, ORC_VAR_C1, ORC_VAR_D1,
3842           ORC_VAR_D1);
3843       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T7, ORC_VAR_D1,
3844           ORC_VAR_D1);
3845       orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
3846           ORC_VAR_D1);
3847       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
3848           ORC_VAR_D1);
3849       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
3850           ORC_VAR_D1);
3851       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
3852           ORC_VAR_D1);
3853       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T7, ORC_VAR_T3, ORC_VAR_D1,
3854           ORC_VAR_D1);
3855       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T7, ORC_VAR_D1,
3856           ORC_VAR_D1);
3857       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T5,
3858           ORC_VAR_D1);
3859       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_D1,
3860           ORC_VAR_D1);
3861       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T8, ORC_VAR_T1, ORC_VAR_D1,
3862           ORC_VAR_D1);
3863       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T6,
3864           ORC_VAR_D1);
3865       orc_program_append_2 (p, "addw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T9,
3866           ORC_VAR_D1);
3867       orc_program_append_2 (p, "addw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T4,
3868           ORC_VAR_D1);
3869       orc_program_append_2 (p, "divluw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T6,
3870           ORC_VAR_D1);
3871       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_D1,
3872           ORC_VAR_D1);
3873       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C3,
3874           ORC_VAR_D1);
3875       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_D1,
3876           ORC_VAR_D1);
3877       orc_program_append_2 (p, "andl", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_C2,
3878           ORC_VAR_D1);
3879       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T7,
3880           ORC_VAR_D1);
3881       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
3882           ORC_VAR_D1);
3883 #endif
3884
3885       orc_program_compile (p);
3886       c = orc_program_take_code (p);
3887       orc_program_free (p);
3888     }
3889     p_inited = TRUE;
3890     orc_once_mutex_unlock ();
3891   }
3892   ex->arrays[ORC_VAR_A2] = c;
3893   ex->program = 0;
3894
3895   ex->n = n;
3896   ORC_EXECUTOR_M (ex) = m;
3897   ex->arrays[ORC_VAR_D1] = d1;
3898   ex->params[ORC_VAR_D1] = d1_stride;
3899   ex->arrays[ORC_VAR_S1] = (void *) s1;
3900   ex->params[ORC_VAR_S1] = s1_stride;
3901   ex->params[ORC_VAR_P1] = p1;
3902
3903   func = c->exec;
3904   func (ex);
3905 }
3906 #endif
3907
3908
3909 /* compositor_orc_overlay_argb_addition */
3910 #ifdef DISABLE_ORC
3911 void
3912 compositor_orc_overlay_argb_addition (guint8 * ORC_RESTRICT d1, int d1_stride,
3913     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
3914 {
3915   int i;
3916   int j;
3917   orc_union32 *ORC_RESTRICT ptr0;
3918   const orc_union32 *ORC_RESTRICT ptr4;
3919   orc_union64 var42;
3920 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3921   volatile orc_union32 var43;
3922 #else
3923   orc_union32 var43;
3924 #endif
3925 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
3926   volatile orc_union32 var44;
3927 #else
3928   orc_union32 var44;
3929 #endif
3930   orc_union32 var45;
3931   orc_union16 var46;
3932   orc_int8 var47;
3933   orc_union32 var48;
3934   orc_union64 var49;
3935   orc_union64 var50;
3936   orc_union64 var51;
3937   orc_union64 var52;
3938   orc_union64 var53;
3939   orc_union32 var54;
3940   orc_union64 var55;
3941   orc_union64 var56;
3942   orc_union32 var57;
3943   orc_union16 var58;
3944   orc_int8 var59;
3945   orc_union32 var60;
3946   orc_union64 var61;
3947   orc_union64 var62;
3948   orc_union64 var63;
3949   orc_union64 var64;
3950   orc_union64 var65;
3951   orc_union64 var66;
3952   orc_union64 var67;
3953   orc_union64 var68;
3954   orc_union32 var69;
3955   orc_union16 var70;
3956   orc_int8 var71;
3957   orc_union32 var72;
3958   orc_union64 var73;
3959   orc_union64 var74;
3960   orc_union32 var75;
3961   orc_union32 var76;
3962   orc_union32 var77;
3963   orc_union32 var78;
3964   orc_union32 var79;
3965
3966   for (j = 0; j < m; j++) {
3967     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
3968     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
3969
3970     /* 5: loadpw */
3971     var42.x4[0] = p1;
3972     var42.x4[1] = p1;
3973     var42.x4[2] = p1;
3974     var42.x4[3] = p1;
3975     /* 10: loadpl */
3976     var54.i = 0xffffffff;       /* -1 or 2.122e-314f */
3977     /* 32: loadpl */
3978     var43.i = 0xffffff00;       /* -256 or 2.122e-314f */
3979     /* 35: loadpl */
3980     var44.i = 0x000000ff;       /* 255 or 1.25987e-321f */
3981
3982     for (i = 0; i < n; i++) {
3983       /* 0: loadl */
3984       var45 = ptr4[i];
3985       /* 1: convlw */
3986       var46.i = var45.i;
3987       /* 2: convwb */
3988       var47 = var46.i;
3989       /* 3: splatbl */
3990       var48.i =
3991           ((((orc_uint32) var47) & 0xff) << 24) | ((((orc_uint32) var47) & 0xff)
3992           << 16) | ((((orc_uint32) var47) & 0xff) << 8) | (((orc_uint32) var47)
3993           & 0xff);
3994       /* 4: convubw */
3995       var49.x4[0] = (orc_uint8) var48.x4[0];
3996       var49.x4[1] = (orc_uint8) var48.x4[1];
3997       var49.x4[2] = (orc_uint8) var48.x4[2];
3998       var49.x4[3] = (orc_uint8) var48.x4[3];
3999       /* 6: mullw */
4000       var50.x4[0] = (var49.x4[0] * var42.x4[0]) & 0xffff;
4001       var50.x4[1] = (var49.x4[1] * var42.x4[1]) & 0xffff;
4002       var50.x4[2] = (var49.x4[2] * var42.x4[2]) & 0xffff;
4003       var50.x4[3] = (var49.x4[3] * var42.x4[3]) & 0xffff;
4004       /* 7: div255w */
4005       var51.x4[0] =
4006           ((orc_uint16) (((orc_uint16) (var50.x4[0] + 128)) +
4007               (((orc_uint16) (var50.x4[0] + 128)) >> 8))) >> 8;
4008       var51.x4[1] =
4009           ((orc_uint16) (((orc_uint16) (var50.x4[1] + 128)) +
4010               (((orc_uint16) (var50.x4[1] + 128)) >> 8))) >> 8;
4011       var51.x4[2] =
4012           ((orc_uint16) (((orc_uint16) (var50.x4[2] + 128)) +
4013               (((orc_uint16) (var50.x4[2] + 128)) >> 8))) >> 8;
4014       var51.x4[3] =
4015           ((orc_uint16) (((orc_uint16) (var50.x4[3] + 128)) +
4016               (((orc_uint16) (var50.x4[3] + 128)) >> 8))) >> 8;
4017       /* 8: convubw */
4018       var52.x4[0] = (orc_uint8) var45.x4[0];
4019       var52.x4[1] = (orc_uint8) var45.x4[1];
4020       var52.x4[2] = (orc_uint8) var45.x4[2];
4021       var52.x4[3] = (orc_uint8) var45.x4[3];
4022       /* 9: mullw */
4023       var53.x4[0] = (var52.x4[0] * var51.x4[0]) & 0xffff;
4024       var53.x4[1] = (var52.x4[1] * var51.x4[1]) & 0xffff;
4025       var53.x4[2] = (var52.x4[2] * var51.x4[2]) & 0xffff;
4026       var53.x4[3] = (var52.x4[3] * var51.x4[3]) & 0xffff;
4027       /* 11: convubw */
4028       var55.x4[0] = (orc_uint8) var54.x4[0];
4029       var55.x4[1] = (orc_uint8) var54.x4[1];
4030       var55.x4[2] = (orc_uint8) var54.x4[2];
4031       var55.x4[3] = (orc_uint8) var54.x4[3];
4032       /* 12: subw */
4033       var56.x4[0] = var55.x4[0] - var51.x4[0];
4034       var56.x4[1] = var55.x4[1] - var51.x4[1];
4035       var56.x4[2] = var55.x4[2] - var51.x4[2];
4036       var56.x4[3] = var55.x4[3] - var51.x4[3];
4037       /* 13: loadl */
4038       var57 = ptr0[i];
4039       /* 14: convlw */
4040       var58.i = var57.i;
4041       /* 15: convwb */
4042       var59 = var58.i;
4043       /* 16: splatbl */
4044       var60.i =
4045           ((((orc_uint32) var59) & 0xff) << 24) | ((((orc_uint32) var59) & 0xff)
4046           << 16) | ((((orc_uint32) var59) & 0xff) << 8) | (((orc_uint32) var59)
4047           & 0xff);
4048       /* 17: convubw */
4049       var61.x4[0] = (orc_uint8) var60.x4[0];
4050       var61.x4[1] = (orc_uint8) var60.x4[1];
4051       var61.x4[2] = (orc_uint8) var60.x4[2];
4052       var61.x4[3] = (orc_uint8) var60.x4[3];
4053       /* 18: mullw */
4054       var62.x4[0] = (var61.x4[0] * var56.x4[0]) & 0xffff;
4055       var62.x4[1] = (var61.x4[1] * var56.x4[1]) & 0xffff;
4056       var62.x4[2] = (var61.x4[2] * var56.x4[2]) & 0xffff;
4057       var62.x4[3] = (var61.x4[3] * var56.x4[3]) & 0xffff;
4058       /* 19: div255w */
4059       var63.x4[0] =
4060           ((orc_uint16) (((orc_uint16) (var62.x4[0] + 128)) +
4061               (((orc_uint16) (var62.x4[0] + 128)) >> 8))) >> 8;
4062       var63.x4[1] =
4063           ((orc_uint16) (((orc_uint16) (var62.x4[1] + 128)) +
4064               (((orc_uint16) (var62.x4[1] + 128)) >> 8))) >> 8;
4065       var63.x4[2] =
4066           ((orc_uint16) (((orc_uint16) (var62.x4[2] + 128)) +
4067               (((orc_uint16) (var62.x4[2] + 128)) >> 8))) >> 8;
4068       var63.x4[3] =
4069           ((orc_uint16) (((orc_uint16) (var62.x4[3] + 128)) +
4070               (((orc_uint16) (var62.x4[3] + 128)) >> 8))) >> 8;
4071       /* 20: convubw */
4072       var64.x4[0] = (orc_uint8) var57.x4[0];
4073       var64.x4[1] = (orc_uint8) var57.x4[1];
4074       var64.x4[2] = (orc_uint8) var57.x4[2];
4075       var64.x4[3] = (orc_uint8) var57.x4[3];
4076       /* 21: mullw */
4077       var65.x4[0] = (var64.x4[0] * var63.x4[0]) & 0xffff;
4078       var65.x4[1] = (var64.x4[1] * var63.x4[1]) & 0xffff;
4079       var65.x4[2] = (var64.x4[2] * var63.x4[2]) & 0xffff;
4080       var65.x4[3] = (var64.x4[3] * var63.x4[3]) & 0xffff;
4081       /* 22: addw */
4082       var66.x4[0] = var65.x4[0] + var53.x4[0];
4083       var66.x4[1] = var65.x4[1] + var53.x4[1];
4084       var66.x4[2] = var65.x4[2] + var53.x4[2];
4085       var66.x4[3] = var65.x4[3] + var53.x4[3];
4086       /* 23: addw */
4087       var67.x4[0] = var63.x4[0] + var51.x4[0];
4088       var67.x4[1] = var63.x4[1] + var51.x4[1];
4089       var67.x4[2] = var63.x4[2] + var51.x4[2];
4090       var67.x4[3] = var63.x4[3] + var51.x4[3];
4091       /* 24: divluw */
4092       var68.x4[0] =
4093           ((var67.x4[0] & 0xff) ==
4094           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[0]) /
4095           ((orc_uint16) var67.x4[0] & 0xff));
4096       var68.x4[1] =
4097           ((var67.x4[1] & 0xff) ==
4098           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[1]) /
4099           ((orc_uint16) var67.x4[1] & 0xff));
4100       var68.x4[2] =
4101           ((var67.x4[2] & 0xff) ==
4102           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[2]) /
4103           ((orc_uint16) var67.x4[2] & 0xff));
4104       var68.x4[3] =
4105           ((var67.x4[3] & 0xff) ==
4106           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[3]) /
4107           ((orc_uint16) var67.x4[3] & 0xff));
4108       /* 25: loadl */
4109       var69 = ptr0[i];
4110       /* 26: convlw */
4111       var70.i = var69.i;
4112       /* 27: convwb */
4113       var71 = var70.i;
4114       /* 28: splatbl */
4115       var72.i =
4116           ((((orc_uint32) var71) & 0xff) << 24) | ((((orc_uint32) var71) & 0xff)
4117           << 16) | ((((orc_uint32) var71) & 0xff) << 8) | (((orc_uint32) var71)
4118           & 0xff);
4119       /* 29: convubw */
4120       var73.x4[0] = (orc_uint8) var72.x4[0];
4121       var73.x4[1] = (orc_uint8) var72.x4[1];
4122       var73.x4[2] = (orc_uint8) var72.x4[2];
4123       var73.x4[3] = (orc_uint8) var72.x4[3];
4124       /* 30: addw */
4125       var74.x4[0] = var73.x4[0] + var51.x4[0];
4126       var74.x4[1] = var73.x4[1] + var51.x4[1];
4127       var74.x4[2] = var73.x4[2] + var51.x4[2];
4128       var74.x4[3] = var73.x4[3] + var51.x4[3];
4129       /* 31: convwb */
4130       var75.x4[0] = var68.x4[0];
4131       var75.x4[1] = var68.x4[1];
4132       var75.x4[2] = var68.x4[2];
4133       var75.x4[3] = var68.x4[3];
4134       /* 33: andl */
4135       var76.i = var75.i & var43.i;
4136       /* 34: convwb */
4137       var77.x4[0] = var74.x4[0];
4138       var77.x4[1] = var74.x4[1];
4139       var77.x4[2] = var74.x4[2];
4140       var77.x4[3] = var74.x4[3];
4141       /* 36: andl */
4142       var78.i = var77.i & var44.i;
4143       /* 37: orl */
4144       var79.i = var76.i | var78.i;
4145       /* 38: storel */
4146       ptr0[i] = var79;
4147     }
4148   }
4149
4150 }
4151
4152 #else
4153 static void
4154 _backup_compositor_orc_overlay_argb_addition (OrcExecutor * ORC_RESTRICT ex)
4155 {
4156   int i;
4157   int j;
4158   int n = ex->n;
4159   int m = ex->params[ORC_VAR_A1];
4160   orc_union32 *ORC_RESTRICT ptr0;
4161   const orc_union32 *ORC_RESTRICT ptr4;
4162   orc_union64 var42;
4163 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4164   volatile orc_union32 var43;
4165 #else
4166   orc_union32 var43;
4167 #endif
4168 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4169   volatile orc_union32 var44;
4170 #else
4171   orc_union32 var44;
4172 #endif
4173   orc_union32 var45;
4174   orc_union16 var46;
4175   orc_int8 var47;
4176   orc_union32 var48;
4177   orc_union64 var49;
4178   orc_union64 var50;
4179   orc_union64 var51;
4180   orc_union64 var52;
4181   orc_union64 var53;
4182   orc_union32 var54;
4183   orc_union64 var55;
4184   orc_union64 var56;
4185   orc_union32 var57;
4186   orc_union16 var58;
4187   orc_int8 var59;
4188   orc_union32 var60;
4189   orc_union64 var61;
4190   orc_union64 var62;
4191   orc_union64 var63;
4192   orc_union64 var64;
4193   orc_union64 var65;
4194   orc_union64 var66;
4195   orc_union64 var67;
4196   orc_union64 var68;
4197   orc_union32 var69;
4198   orc_union16 var70;
4199   orc_int8 var71;
4200   orc_union32 var72;
4201   orc_union64 var73;
4202   orc_union64 var74;
4203   orc_union32 var75;
4204   orc_union32 var76;
4205   orc_union32 var77;
4206   orc_union32 var78;
4207   orc_union32 var79;
4208
4209   for (j = 0; j < m; j++) {
4210     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
4211     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
4212
4213     /* 5: loadpw */
4214     var42.x4[0] = ex->params[24];
4215     var42.x4[1] = ex->params[24];
4216     var42.x4[2] = ex->params[24];
4217     var42.x4[3] = ex->params[24];
4218     /* 10: loadpl */
4219     var54.i = 0xffffffff;       /* -1 or 2.122e-314f */
4220     /* 32: loadpl */
4221     var43.i = 0xffffff00;       /* -256 or 2.122e-314f */
4222     /* 35: loadpl */
4223     var44.i = 0x000000ff;       /* 255 or 1.25987e-321f */
4224
4225     for (i = 0; i < n; i++) {
4226       /* 0: loadl */
4227       var45 = ptr4[i];
4228       /* 1: convlw */
4229       var46.i = var45.i;
4230       /* 2: convwb */
4231       var47 = var46.i;
4232       /* 3: splatbl */
4233       var48.i =
4234           ((((orc_uint32) var47) & 0xff) << 24) | ((((orc_uint32) var47) & 0xff)
4235           << 16) | ((((orc_uint32) var47) & 0xff) << 8) | (((orc_uint32) var47)
4236           & 0xff);
4237       /* 4: convubw */
4238       var49.x4[0] = (orc_uint8) var48.x4[0];
4239       var49.x4[1] = (orc_uint8) var48.x4[1];
4240       var49.x4[2] = (orc_uint8) var48.x4[2];
4241       var49.x4[3] = (orc_uint8) var48.x4[3];
4242       /* 6: mullw */
4243       var50.x4[0] = (var49.x4[0] * var42.x4[0]) & 0xffff;
4244       var50.x4[1] = (var49.x4[1] * var42.x4[1]) & 0xffff;
4245       var50.x4[2] = (var49.x4[2] * var42.x4[2]) & 0xffff;
4246       var50.x4[3] = (var49.x4[3] * var42.x4[3]) & 0xffff;
4247       /* 7: div255w */
4248       var51.x4[0] =
4249           ((orc_uint16) (((orc_uint16) (var50.x4[0] + 128)) +
4250               (((orc_uint16) (var50.x4[0] + 128)) >> 8))) >> 8;
4251       var51.x4[1] =
4252           ((orc_uint16) (((orc_uint16) (var50.x4[1] + 128)) +
4253               (((orc_uint16) (var50.x4[1] + 128)) >> 8))) >> 8;
4254       var51.x4[2] =
4255           ((orc_uint16) (((orc_uint16) (var50.x4[2] + 128)) +
4256               (((orc_uint16) (var50.x4[2] + 128)) >> 8))) >> 8;
4257       var51.x4[3] =
4258           ((orc_uint16) (((orc_uint16) (var50.x4[3] + 128)) +
4259               (((orc_uint16) (var50.x4[3] + 128)) >> 8))) >> 8;
4260       /* 8: convubw */
4261       var52.x4[0] = (orc_uint8) var45.x4[0];
4262       var52.x4[1] = (orc_uint8) var45.x4[1];
4263       var52.x4[2] = (orc_uint8) var45.x4[2];
4264       var52.x4[3] = (orc_uint8) var45.x4[3];
4265       /* 9: mullw */
4266       var53.x4[0] = (var52.x4[0] * var51.x4[0]) & 0xffff;
4267       var53.x4[1] = (var52.x4[1] * var51.x4[1]) & 0xffff;
4268       var53.x4[2] = (var52.x4[2] * var51.x4[2]) & 0xffff;
4269       var53.x4[3] = (var52.x4[3] * var51.x4[3]) & 0xffff;
4270       /* 11: convubw */
4271       var55.x4[0] = (orc_uint8) var54.x4[0];
4272       var55.x4[1] = (orc_uint8) var54.x4[1];
4273       var55.x4[2] = (orc_uint8) var54.x4[2];
4274       var55.x4[3] = (orc_uint8) var54.x4[3];
4275       /* 12: subw */
4276       var56.x4[0] = var55.x4[0] - var51.x4[0];
4277       var56.x4[1] = var55.x4[1] - var51.x4[1];
4278       var56.x4[2] = var55.x4[2] - var51.x4[2];
4279       var56.x4[3] = var55.x4[3] - var51.x4[3];
4280       /* 13: loadl */
4281       var57 = ptr0[i];
4282       /* 14: convlw */
4283       var58.i = var57.i;
4284       /* 15: convwb */
4285       var59 = var58.i;
4286       /* 16: splatbl */
4287       var60.i =
4288           ((((orc_uint32) var59) & 0xff) << 24) | ((((orc_uint32) var59) & 0xff)
4289           << 16) | ((((orc_uint32) var59) & 0xff) << 8) | (((orc_uint32) var59)
4290           & 0xff);
4291       /* 17: convubw */
4292       var61.x4[0] = (orc_uint8) var60.x4[0];
4293       var61.x4[1] = (orc_uint8) var60.x4[1];
4294       var61.x4[2] = (orc_uint8) var60.x4[2];
4295       var61.x4[3] = (orc_uint8) var60.x4[3];
4296       /* 18: mullw */
4297       var62.x4[0] = (var61.x4[0] * var56.x4[0]) & 0xffff;
4298       var62.x4[1] = (var61.x4[1] * var56.x4[1]) & 0xffff;
4299       var62.x4[2] = (var61.x4[2] * var56.x4[2]) & 0xffff;
4300       var62.x4[3] = (var61.x4[3] * var56.x4[3]) & 0xffff;
4301       /* 19: div255w */
4302       var63.x4[0] =
4303           ((orc_uint16) (((orc_uint16) (var62.x4[0] + 128)) +
4304               (((orc_uint16) (var62.x4[0] + 128)) >> 8))) >> 8;
4305       var63.x4[1] =
4306           ((orc_uint16) (((orc_uint16) (var62.x4[1] + 128)) +
4307               (((orc_uint16) (var62.x4[1] + 128)) >> 8))) >> 8;
4308       var63.x4[2] =
4309           ((orc_uint16) (((orc_uint16) (var62.x4[2] + 128)) +
4310               (((orc_uint16) (var62.x4[2] + 128)) >> 8))) >> 8;
4311       var63.x4[3] =
4312           ((orc_uint16) (((orc_uint16) (var62.x4[3] + 128)) +
4313               (((orc_uint16) (var62.x4[3] + 128)) >> 8))) >> 8;
4314       /* 20: convubw */
4315       var64.x4[0] = (orc_uint8) var57.x4[0];
4316       var64.x4[1] = (orc_uint8) var57.x4[1];
4317       var64.x4[2] = (orc_uint8) var57.x4[2];
4318       var64.x4[3] = (orc_uint8) var57.x4[3];
4319       /* 21: mullw */
4320       var65.x4[0] = (var64.x4[0] * var63.x4[0]) & 0xffff;
4321       var65.x4[1] = (var64.x4[1] * var63.x4[1]) & 0xffff;
4322       var65.x4[2] = (var64.x4[2] * var63.x4[2]) & 0xffff;
4323       var65.x4[3] = (var64.x4[3] * var63.x4[3]) & 0xffff;
4324       /* 22: addw */
4325       var66.x4[0] = var65.x4[0] + var53.x4[0];
4326       var66.x4[1] = var65.x4[1] + var53.x4[1];
4327       var66.x4[2] = var65.x4[2] + var53.x4[2];
4328       var66.x4[3] = var65.x4[3] + var53.x4[3];
4329       /* 23: addw */
4330       var67.x4[0] = var63.x4[0] + var51.x4[0];
4331       var67.x4[1] = var63.x4[1] + var51.x4[1];
4332       var67.x4[2] = var63.x4[2] + var51.x4[2];
4333       var67.x4[3] = var63.x4[3] + var51.x4[3];
4334       /* 24: divluw */
4335       var68.x4[0] =
4336           ((var67.x4[0] & 0xff) ==
4337           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[0]) /
4338           ((orc_uint16) var67.x4[0] & 0xff));
4339       var68.x4[1] =
4340           ((var67.x4[1] & 0xff) ==
4341           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[1]) /
4342           ((orc_uint16) var67.x4[1] & 0xff));
4343       var68.x4[2] =
4344           ((var67.x4[2] & 0xff) ==
4345           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[2]) /
4346           ((orc_uint16) var67.x4[2] & 0xff));
4347       var68.x4[3] =
4348           ((var67.x4[3] & 0xff) ==
4349           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var66.x4[3]) /
4350           ((orc_uint16) var67.x4[3] & 0xff));
4351       /* 25: loadl */
4352       var69 = ptr0[i];
4353       /* 26: convlw */
4354       var70.i = var69.i;
4355       /* 27: convwb */
4356       var71 = var70.i;
4357       /* 28: splatbl */
4358       var72.i =
4359           ((((orc_uint32) var71) & 0xff) << 24) | ((((orc_uint32) var71) & 0xff)
4360           << 16) | ((((orc_uint32) var71) & 0xff) << 8) | (((orc_uint32) var71)
4361           & 0xff);
4362       /* 29: convubw */
4363       var73.x4[0] = (orc_uint8) var72.x4[0];
4364       var73.x4[1] = (orc_uint8) var72.x4[1];
4365       var73.x4[2] = (orc_uint8) var72.x4[2];
4366       var73.x4[3] = (orc_uint8) var72.x4[3];
4367       /* 30: addw */
4368       var74.x4[0] = var73.x4[0] + var51.x4[0];
4369       var74.x4[1] = var73.x4[1] + var51.x4[1];
4370       var74.x4[2] = var73.x4[2] + var51.x4[2];
4371       var74.x4[3] = var73.x4[3] + var51.x4[3];
4372       /* 31: convwb */
4373       var75.x4[0] = var68.x4[0];
4374       var75.x4[1] = var68.x4[1];
4375       var75.x4[2] = var68.x4[2];
4376       var75.x4[3] = var68.x4[3];
4377       /* 33: andl */
4378       var76.i = var75.i & var43.i;
4379       /* 34: convwb */
4380       var77.x4[0] = var74.x4[0];
4381       var77.x4[1] = var74.x4[1];
4382       var77.x4[2] = var74.x4[2];
4383       var77.x4[3] = var74.x4[3];
4384       /* 36: andl */
4385       var78.i = var77.i & var44.i;
4386       /* 37: orl */
4387       var79.i = var76.i | var78.i;
4388       /* 38: storel */
4389       ptr0[i] = var79;
4390     }
4391   }
4392
4393 }
4394
4395 void
4396 compositor_orc_overlay_argb_addition (guint8 * ORC_RESTRICT d1, int d1_stride,
4397     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
4398 {
4399   OrcExecutor _ex, *ex = &_ex;
4400   static volatile int p_inited = 0;
4401   static OrcCode *c = 0;
4402   void (*func) (OrcExecutor *);
4403
4404   if (!p_inited) {
4405     orc_once_mutex_lock ();
4406     if (!p_inited) {
4407       OrcProgram *p;
4408
4409 #if 1
4410       static const orc_uint8 bc[] = {
4411         1, 7, 9, 36, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
4412         114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 97, 114, 103, 98, 95,
4413         97, 100, 100, 105, 116, 105, 111, 110, 11, 4, 4, 12, 4, 4, 14, 4,
4414         255, 255, 255, 255, 14, 4, 255, 0, 0, 0, 14, 4, 0, 255, 255, 255,
4415         16, 2, 20, 4, 20, 2, 20, 1, 20, 8, 20, 8, 20, 8, 20, 8,
4416         20, 4, 20, 8, 20, 8, 113, 32, 4, 163, 33, 32, 157, 34, 33, 152,
4417         39, 34, 21, 2, 150, 35, 39, 21, 2, 89, 35, 35, 24, 21, 2, 80,
4418         35, 35, 21, 2, 150, 41, 32, 21, 2, 89, 41, 41, 35, 115, 39, 16,
4419         21, 2, 150, 36, 39, 21, 2, 98, 36, 36, 35, 113, 32, 0, 163, 33,
4420         32, 157, 34, 33, 152, 39, 34, 21, 2, 150, 37, 39, 21, 2, 89, 37,
4421         37, 36, 21, 2, 80, 37, 37, 21, 2, 150, 40, 32, 21, 2, 89, 40,
4422         40, 37, 21, 2, 70, 40, 40, 41, 21, 2, 70, 37, 37, 35, 21, 2,
4423         81, 40, 40, 37, 113, 32, 0, 163, 33, 32, 157, 34, 33, 152, 39, 34,
4424         21, 2, 150, 38, 39, 21, 2, 70, 38, 38, 35, 21, 2, 157, 32, 40,
4425         106, 32, 32, 18, 21, 2, 157, 39, 38, 106, 39, 39, 17, 123, 32, 32,
4426         39, 128, 0, 32, 2, 0,
4427       };
4428       p = orc_program_new_from_static_bytecode (bc);
4429       orc_program_set_backup_function (p,
4430           _backup_compositor_orc_overlay_argb_addition);
4431 #else
4432       p = orc_program_new ();
4433       orc_program_set_2d (p);
4434       orc_program_set_name (p, "compositor_orc_overlay_argb_addition");
4435       orc_program_set_backup_function (p,
4436           _backup_compositor_orc_overlay_argb_addition);
4437       orc_program_add_destination (p, 4, "d1");
4438       orc_program_add_source (p, 4, "s1");
4439       orc_program_add_constant (p, 4, 0xffffffff, "c1");
4440       orc_program_add_constant (p, 4, 0x000000ff, "c2");
4441       orc_program_add_constant (p, 4, 0xffffff00, "c3");
4442       orc_program_add_parameter (p, 2, "p1");
4443       orc_program_add_temporary (p, 4, "t1");
4444       orc_program_add_temporary (p, 2, "t2");
4445       orc_program_add_temporary (p, 1, "t3");
4446       orc_program_add_temporary (p, 8, "t4");
4447       orc_program_add_temporary (p, 8, "t5");
4448       orc_program_add_temporary (p, 8, "t6");
4449       orc_program_add_temporary (p, 8, "t7");
4450       orc_program_add_temporary (p, 4, "t8");
4451       orc_program_add_temporary (p, 8, "t9");
4452       orc_program_add_temporary (p, 8, "t10");
4453
4454       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
4455           ORC_VAR_D1);
4456       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
4457           ORC_VAR_D1);
4458       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
4459           ORC_VAR_D1);
4460       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_D1,
4461           ORC_VAR_D1);
4462       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T4, ORC_VAR_T8, ORC_VAR_D1,
4463           ORC_VAR_D1);
4464       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_P1,
4465           ORC_VAR_D1);
4466       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_D1,
4467           ORC_VAR_D1);
4468       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T10, ORC_VAR_T1,
4469           ORC_VAR_D1, ORC_VAR_D1);
4470       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T10, ORC_VAR_T10, ORC_VAR_T4,
4471           ORC_VAR_D1);
4472       orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T8, ORC_VAR_C1, ORC_VAR_D1,
4473           ORC_VAR_D1);
4474       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T8, ORC_VAR_D1,
4475           ORC_VAR_D1);
4476       orc_program_append_2 (p, "subw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4,
4477           ORC_VAR_D1);
4478       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
4479           ORC_VAR_D1);
4480       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
4481           ORC_VAR_D1);
4482       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
4483           ORC_VAR_D1);
4484       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_D1,
4485           ORC_VAR_D1);
4486       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T8, ORC_VAR_D1,
4487           ORC_VAR_D1);
4488       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T5,
4489           ORC_VAR_D1);
4490       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_D1,
4491           ORC_VAR_D1);
4492       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T9, ORC_VAR_T1, ORC_VAR_D1,
4493           ORC_VAR_D1);
4494       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T6,
4495           ORC_VAR_D1);
4496       orc_program_append_2 (p, "addw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T10,
4497           ORC_VAR_D1);
4498       orc_program_append_2 (p, "addw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T4,
4499           ORC_VAR_D1);
4500       orc_program_append_2 (p, "divluw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T6,
4501           ORC_VAR_D1);
4502       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
4503           ORC_VAR_D1);
4504       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1,
4505           ORC_VAR_D1);
4506       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
4507           ORC_VAR_D1);
4508       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T8, ORC_VAR_T3, ORC_VAR_D1,
4509           ORC_VAR_D1);
4510       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_D1,
4511           ORC_VAR_D1);
4512       orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T4,
4513           ORC_VAR_D1);
4514       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_D1,
4515           ORC_VAR_D1);
4516       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C3,
4517           ORC_VAR_D1);
4518       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_D1,
4519           ORC_VAR_D1);
4520       orc_program_append_2 (p, "andl", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_C2,
4521           ORC_VAR_D1);
4522       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T8,
4523           ORC_VAR_D1);
4524       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
4525           ORC_VAR_D1);
4526 #endif
4527
4528       orc_program_compile (p);
4529       c = orc_program_take_code (p);
4530       orc_program_free (p);
4531     }
4532     p_inited = TRUE;
4533     orc_once_mutex_unlock ();
4534   }
4535   ex->arrays[ORC_VAR_A2] = c;
4536   ex->program = 0;
4537
4538   ex->n = n;
4539   ORC_EXECUTOR_M (ex) = m;
4540   ex->arrays[ORC_VAR_D1] = d1;
4541   ex->params[ORC_VAR_D1] = d1_stride;
4542   ex->arrays[ORC_VAR_S1] = (void *) s1;
4543   ex->params[ORC_VAR_S1] = s1_stride;
4544   ex->params[ORC_VAR_P1] = p1;
4545
4546   func = c->exec;
4547   func (ex);
4548 }
4549 #endif
4550
4551
4552 /* compositor_orc_overlay_bgra */
4553 #ifdef DISABLE_ORC
4554 void
4555 compositor_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
4556     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
4557 {
4558   int i;
4559   int j;
4560   orc_union32 *ORC_RESTRICT ptr0;
4561   const orc_union32 *ORC_RESTRICT ptr4;
4562   orc_union64 var42;
4563 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4564   volatile orc_union32 var43;
4565 #else
4566   orc_union32 var43;
4567 #endif
4568 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4569   volatile orc_union32 var44;
4570 #else
4571   orc_union32 var44;
4572 #endif
4573   orc_union32 var45;
4574   orc_union32 var46;
4575   orc_union16 var47;
4576   orc_int8 var48;
4577   orc_union32 var49;
4578   orc_union64 var50;
4579   orc_union64 var51;
4580   orc_union64 var52;
4581   orc_union64 var53;
4582   orc_union64 var54;
4583   orc_union32 var55;
4584   orc_union64 var56;
4585   orc_union64 var57;
4586   orc_union32 var58;
4587   orc_union32 var59;
4588   orc_union16 var60;
4589   orc_int8 var61;
4590   orc_union32 var62;
4591   orc_union64 var63;
4592   orc_union64 var64;
4593   orc_union64 var65;
4594   orc_union64 var66;
4595   orc_union64 var67;
4596   orc_union64 var68;
4597   orc_union64 var69;
4598   orc_union64 var70;
4599   orc_union32 var71;
4600   orc_union32 var72;
4601   orc_union32 var73;
4602   orc_union32 var74;
4603   orc_union32 var75;
4604
4605   for (j = 0; j < m; j++) {
4606     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
4607     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
4608
4609     /* 6: loadpw */
4610     var42.x4[0] = p1;
4611     var42.x4[1] = p1;
4612     var42.x4[2] = p1;
4613     var42.x4[3] = p1;
4614     /* 11: loadpl */
4615     var55.i = 0xffffffff;       /* -1 or 2.122e-314f */
4616     /* 28: loadpl */
4617     var43.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
4618     /* 31: loadpl */
4619     var44.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
4620
4621     for (i = 0; i < n; i++) {
4622       /* 0: loadl */
4623       var45 = ptr4[i];
4624       /* 1: shrul */
4625       var46.i = ((orc_uint32) var45.i) >> 24;
4626       /* 2: convlw */
4627       var47.i = var46.i;
4628       /* 3: convwb */
4629       var48 = var47.i;
4630       /* 4: splatbl */
4631       var49.i =
4632           ((((orc_uint32) var48) & 0xff) << 24) | ((((orc_uint32) var48) & 0xff)
4633           << 16) | ((((orc_uint32) var48) & 0xff) << 8) | (((orc_uint32) var48)
4634           & 0xff);
4635       /* 5: convubw */
4636       var50.x4[0] = (orc_uint8) var49.x4[0];
4637       var50.x4[1] = (orc_uint8) var49.x4[1];
4638       var50.x4[2] = (orc_uint8) var49.x4[2];
4639       var50.x4[3] = (orc_uint8) var49.x4[3];
4640       /* 7: mullw */
4641       var51.x4[0] = (var50.x4[0] * var42.x4[0]) & 0xffff;
4642       var51.x4[1] = (var50.x4[1] * var42.x4[1]) & 0xffff;
4643       var51.x4[2] = (var50.x4[2] * var42.x4[2]) & 0xffff;
4644       var51.x4[3] = (var50.x4[3] * var42.x4[3]) & 0xffff;
4645       /* 8: div255w */
4646       var52.x4[0] =
4647           ((orc_uint16) (((orc_uint16) (var51.x4[0] + 128)) +
4648               (((orc_uint16) (var51.x4[0] + 128)) >> 8))) >> 8;
4649       var52.x4[1] =
4650           ((orc_uint16) (((orc_uint16) (var51.x4[1] + 128)) +
4651               (((orc_uint16) (var51.x4[1] + 128)) >> 8))) >> 8;
4652       var52.x4[2] =
4653           ((orc_uint16) (((orc_uint16) (var51.x4[2] + 128)) +
4654               (((orc_uint16) (var51.x4[2] + 128)) >> 8))) >> 8;
4655       var52.x4[3] =
4656           ((orc_uint16) (((orc_uint16) (var51.x4[3] + 128)) +
4657               (((orc_uint16) (var51.x4[3] + 128)) >> 8))) >> 8;
4658       /* 9: convubw */
4659       var53.x4[0] = (orc_uint8) var45.x4[0];
4660       var53.x4[1] = (orc_uint8) var45.x4[1];
4661       var53.x4[2] = (orc_uint8) var45.x4[2];
4662       var53.x4[3] = (orc_uint8) var45.x4[3];
4663       /* 10: mullw */
4664       var54.x4[0] = (var53.x4[0] * var52.x4[0]) & 0xffff;
4665       var54.x4[1] = (var53.x4[1] * var52.x4[1]) & 0xffff;
4666       var54.x4[2] = (var53.x4[2] * var52.x4[2]) & 0xffff;
4667       var54.x4[3] = (var53.x4[3] * var52.x4[3]) & 0xffff;
4668       /* 12: convubw */
4669       var56.x4[0] = (orc_uint8) var55.x4[0];
4670       var56.x4[1] = (orc_uint8) var55.x4[1];
4671       var56.x4[2] = (orc_uint8) var55.x4[2];
4672       var56.x4[3] = (orc_uint8) var55.x4[3];
4673       /* 13: subw */
4674       var57.x4[0] = var56.x4[0] - var52.x4[0];
4675       var57.x4[1] = var56.x4[1] - var52.x4[1];
4676       var57.x4[2] = var56.x4[2] - var52.x4[2];
4677       var57.x4[3] = var56.x4[3] - var52.x4[3];
4678       /* 14: loadl */
4679       var58 = ptr0[i];
4680       /* 15: shrul */
4681       var59.i = ((orc_uint32) var58.i) >> 24;
4682       /* 16: convlw */
4683       var60.i = var59.i;
4684       /* 17: convwb */
4685       var61 = var60.i;
4686       /* 18: splatbl */
4687       var62.i =
4688           ((((orc_uint32) var61) & 0xff) << 24) | ((((orc_uint32) var61) & 0xff)
4689           << 16) | ((((orc_uint32) var61) & 0xff) << 8) | (((orc_uint32) var61)
4690           & 0xff);
4691       /* 19: convubw */
4692       var63.x4[0] = (orc_uint8) var62.x4[0];
4693       var63.x4[1] = (orc_uint8) var62.x4[1];
4694       var63.x4[2] = (orc_uint8) var62.x4[2];
4695       var63.x4[3] = (orc_uint8) var62.x4[3];
4696       /* 20: mullw */
4697       var64.x4[0] = (var63.x4[0] * var57.x4[0]) & 0xffff;
4698       var64.x4[1] = (var63.x4[1] * var57.x4[1]) & 0xffff;
4699       var64.x4[2] = (var63.x4[2] * var57.x4[2]) & 0xffff;
4700       var64.x4[3] = (var63.x4[3] * var57.x4[3]) & 0xffff;
4701       /* 21: div255w */
4702       var65.x4[0] =
4703           ((orc_uint16) (((orc_uint16) (var64.x4[0] + 128)) +
4704               (((orc_uint16) (var64.x4[0] + 128)) >> 8))) >> 8;
4705       var65.x4[1] =
4706           ((orc_uint16) (((orc_uint16) (var64.x4[1] + 128)) +
4707               (((orc_uint16) (var64.x4[1] + 128)) >> 8))) >> 8;
4708       var65.x4[2] =
4709           ((orc_uint16) (((orc_uint16) (var64.x4[2] + 128)) +
4710               (((orc_uint16) (var64.x4[2] + 128)) >> 8))) >> 8;
4711       var65.x4[3] =
4712           ((orc_uint16) (((orc_uint16) (var64.x4[3] + 128)) +
4713               (((orc_uint16) (var64.x4[3] + 128)) >> 8))) >> 8;
4714       /* 22: convubw */
4715       var66.x4[0] = (orc_uint8) var58.x4[0];
4716       var66.x4[1] = (orc_uint8) var58.x4[1];
4717       var66.x4[2] = (orc_uint8) var58.x4[2];
4718       var66.x4[3] = (orc_uint8) var58.x4[3];
4719       /* 23: mullw */
4720       var67.x4[0] = (var66.x4[0] * var65.x4[0]) & 0xffff;
4721       var67.x4[1] = (var66.x4[1] * var65.x4[1]) & 0xffff;
4722       var67.x4[2] = (var66.x4[2] * var65.x4[2]) & 0xffff;
4723       var67.x4[3] = (var66.x4[3] * var65.x4[3]) & 0xffff;
4724       /* 24: addw */
4725       var68.x4[0] = var67.x4[0] + var54.x4[0];
4726       var68.x4[1] = var67.x4[1] + var54.x4[1];
4727       var68.x4[2] = var67.x4[2] + var54.x4[2];
4728       var68.x4[3] = var67.x4[3] + var54.x4[3];
4729       /* 25: addw */
4730       var69.x4[0] = var65.x4[0] + var52.x4[0];
4731       var69.x4[1] = var65.x4[1] + var52.x4[1];
4732       var69.x4[2] = var65.x4[2] + var52.x4[2];
4733       var69.x4[3] = var65.x4[3] + var52.x4[3];
4734       /* 26: divluw */
4735       var70.x4[0] =
4736           ((var69.x4[0] & 0xff) ==
4737           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[0]) /
4738           ((orc_uint16) var69.x4[0] & 0xff));
4739       var70.x4[1] =
4740           ((var69.x4[1] & 0xff) ==
4741           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[1]) /
4742           ((orc_uint16) var69.x4[1] & 0xff));
4743       var70.x4[2] =
4744           ((var69.x4[2] & 0xff) ==
4745           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[2]) /
4746           ((orc_uint16) var69.x4[2] & 0xff));
4747       var70.x4[3] =
4748           ((var69.x4[3] & 0xff) ==
4749           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[3]) /
4750           ((orc_uint16) var69.x4[3] & 0xff));
4751       /* 27: convwb */
4752       var71.x4[0] = var70.x4[0];
4753       var71.x4[1] = var70.x4[1];
4754       var71.x4[2] = var70.x4[2];
4755       var71.x4[3] = var70.x4[3];
4756       /* 29: andl */
4757       var72.i = var71.i & var43.i;
4758       /* 30: convwb */
4759       var73.x4[0] = var69.x4[0];
4760       var73.x4[1] = var69.x4[1];
4761       var73.x4[2] = var69.x4[2];
4762       var73.x4[3] = var69.x4[3];
4763       /* 32: andl */
4764       var74.i = var73.i & var44.i;
4765       /* 33: orl */
4766       var75.i = var72.i | var74.i;
4767       /* 34: storel */
4768       ptr0[i] = var75;
4769     }
4770   }
4771
4772 }
4773
4774 #else
4775 static void
4776 _backup_compositor_orc_overlay_bgra (OrcExecutor * ORC_RESTRICT ex)
4777 {
4778   int i;
4779   int j;
4780   int n = ex->n;
4781   int m = ex->params[ORC_VAR_A1];
4782   orc_union32 *ORC_RESTRICT ptr0;
4783   const orc_union32 *ORC_RESTRICT ptr4;
4784   orc_union64 var42;
4785 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4786   volatile orc_union32 var43;
4787 #else
4788   orc_union32 var43;
4789 #endif
4790 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
4791   volatile orc_union32 var44;
4792 #else
4793   orc_union32 var44;
4794 #endif
4795   orc_union32 var45;
4796   orc_union32 var46;
4797   orc_union16 var47;
4798   orc_int8 var48;
4799   orc_union32 var49;
4800   orc_union64 var50;
4801   orc_union64 var51;
4802   orc_union64 var52;
4803   orc_union64 var53;
4804   orc_union64 var54;
4805   orc_union32 var55;
4806   orc_union64 var56;
4807   orc_union64 var57;
4808   orc_union32 var58;
4809   orc_union32 var59;
4810   orc_union16 var60;
4811   orc_int8 var61;
4812   orc_union32 var62;
4813   orc_union64 var63;
4814   orc_union64 var64;
4815   orc_union64 var65;
4816   orc_union64 var66;
4817   orc_union64 var67;
4818   orc_union64 var68;
4819   orc_union64 var69;
4820   orc_union64 var70;
4821   orc_union32 var71;
4822   orc_union32 var72;
4823   orc_union32 var73;
4824   orc_union32 var74;
4825   orc_union32 var75;
4826
4827   for (j = 0; j < m; j++) {
4828     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
4829     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
4830
4831     /* 6: loadpw */
4832     var42.x4[0] = ex->params[24];
4833     var42.x4[1] = ex->params[24];
4834     var42.x4[2] = ex->params[24];
4835     var42.x4[3] = ex->params[24];
4836     /* 11: loadpl */
4837     var55.i = 0xffffffff;       /* -1 or 2.122e-314f */
4838     /* 28: loadpl */
4839     var43.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
4840     /* 31: loadpl */
4841     var44.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
4842
4843     for (i = 0; i < n; i++) {
4844       /* 0: loadl */
4845       var45 = ptr4[i];
4846       /* 1: shrul */
4847       var46.i = ((orc_uint32) var45.i) >> 24;
4848       /* 2: convlw */
4849       var47.i = var46.i;
4850       /* 3: convwb */
4851       var48 = var47.i;
4852       /* 4: splatbl */
4853       var49.i =
4854           ((((orc_uint32) var48) & 0xff) << 24) | ((((orc_uint32) var48) & 0xff)
4855           << 16) | ((((orc_uint32) var48) & 0xff) << 8) | (((orc_uint32) var48)
4856           & 0xff);
4857       /* 5: convubw */
4858       var50.x4[0] = (orc_uint8) var49.x4[0];
4859       var50.x4[1] = (orc_uint8) var49.x4[1];
4860       var50.x4[2] = (orc_uint8) var49.x4[2];
4861       var50.x4[3] = (orc_uint8) var49.x4[3];
4862       /* 7: mullw */
4863       var51.x4[0] = (var50.x4[0] * var42.x4[0]) & 0xffff;
4864       var51.x4[1] = (var50.x4[1] * var42.x4[1]) & 0xffff;
4865       var51.x4[2] = (var50.x4[2] * var42.x4[2]) & 0xffff;
4866       var51.x4[3] = (var50.x4[3] * var42.x4[3]) & 0xffff;
4867       /* 8: div255w */
4868       var52.x4[0] =
4869           ((orc_uint16) (((orc_uint16) (var51.x4[0] + 128)) +
4870               (((orc_uint16) (var51.x4[0] + 128)) >> 8))) >> 8;
4871       var52.x4[1] =
4872           ((orc_uint16) (((orc_uint16) (var51.x4[1] + 128)) +
4873               (((orc_uint16) (var51.x4[1] + 128)) >> 8))) >> 8;
4874       var52.x4[2] =
4875           ((orc_uint16) (((orc_uint16) (var51.x4[2] + 128)) +
4876               (((orc_uint16) (var51.x4[2] + 128)) >> 8))) >> 8;
4877       var52.x4[3] =
4878           ((orc_uint16) (((orc_uint16) (var51.x4[3] + 128)) +
4879               (((orc_uint16) (var51.x4[3] + 128)) >> 8))) >> 8;
4880       /* 9: convubw */
4881       var53.x4[0] = (orc_uint8) var45.x4[0];
4882       var53.x4[1] = (orc_uint8) var45.x4[1];
4883       var53.x4[2] = (orc_uint8) var45.x4[2];
4884       var53.x4[3] = (orc_uint8) var45.x4[3];
4885       /* 10: mullw */
4886       var54.x4[0] = (var53.x4[0] * var52.x4[0]) & 0xffff;
4887       var54.x4[1] = (var53.x4[1] * var52.x4[1]) & 0xffff;
4888       var54.x4[2] = (var53.x4[2] * var52.x4[2]) & 0xffff;
4889       var54.x4[3] = (var53.x4[3] * var52.x4[3]) & 0xffff;
4890       /* 12: convubw */
4891       var56.x4[0] = (orc_uint8) var55.x4[0];
4892       var56.x4[1] = (orc_uint8) var55.x4[1];
4893       var56.x4[2] = (orc_uint8) var55.x4[2];
4894       var56.x4[3] = (orc_uint8) var55.x4[3];
4895       /* 13: subw */
4896       var57.x4[0] = var56.x4[0] - var52.x4[0];
4897       var57.x4[1] = var56.x4[1] - var52.x4[1];
4898       var57.x4[2] = var56.x4[2] - var52.x4[2];
4899       var57.x4[3] = var56.x4[3] - var52.x4[3];
4900       /* 14: loadl */
4901       var58 = ptr0[i];
4902       /* 15: shrul */
4903       var59.i = ((orc_uint32) var58.i) >> 24;
4904       /* 16: convlw */
4905       var60.i = var59.i;
4906       /* 17: convwb */
4907       var61 = var60.i;
4908       /* 18: splatbl */
4909       var62.i =
4910           ((((orc_uint32) var61) & 0xff) << 24) | ((((orc_uint32) var61) & 0xff)
4911           << 16) | ((((orc_uint32) var61) & 0xff) << 8) | (((orc_uint32) var61)
4912           & 0xff);
4913       /* 19: convubw */
4914       var63.x4[0] = (orc_uint8) var62.x4[0];
4915       var63.x4[1] = (orc_uint8) var62.x4[1];
4916       var63.x4[2] = (orc_uint8) var62.x4[2];
4917       var63.x4[3] = (orc_uint8) var62.x4[3];
4918       /* 20: mullw */
4919       var64.x4[0] = (var63.x4[0] * var57.x4[0]) & 0xffff;
4920       var64.x4[1] = (var63.x4[1] * var57.x4[1]) & 0xffff;
4921       var64.x4[2] = (var63.x4[2] * var57.x4[2]) & 0xffff;
4922       var64.x4[3] = (var63.x4[3] * var57.x4[3]) & 0xffff;
4923       /* 21: div255w */
4924       var65.x4[0] =
4925           ((orc_uint16) (((orc_uint16) (var64.x4[0] + 128)) +
4926               (((orc_uint16) (var64.x4[0] + 128)) >> 8))) >> 8;
4927       var65.x4[1] =
4928           ((orc_uint16) (((orc_uint16) (var64.x4[1] + 128)) +
4929               (((orc_uint16) (var64.x4[1] + 128)) >> 8))) >> 8;
4930       var65.x4[2] =
4931           ((orc_uint16) (((orc_uint16) (var64.x4[2] + 128)) +
4932               (((orc_uint16) (var64.x4[2] + 128)) >> 8))) >> 8;
4933       var65.x4[3] =
4934           ((orc_uint16) (((orc_uint16) (var64.x4[3] + 128)) +
4935               (((orc_uint16) (var64.x4[3] + 128)) >> 8))) >> 8;
4936       /* 22: convubw */
4937       var66.x4[0] = (orc_uint8) var58.x4[0];
4938       var66.x4[1] = (orc_uint8) var58.x4[1];
4939       var66.x4[2] = (orc_uint8) var58.x4[2];
4940       var66.x4[3] = (orc_uint8) var58.x4[3];
4941       /* 23: mullw */
4942       var67.x4[0] = (var66.x4[0] * var65.x4[0]) & 0xffff;
4943       var67.x4[1] = (var66.x4[1] * var65.x4[1]) & 0xffff;
4944       var67.x4[2] = (var66.x4[2] * var65.x4[2]) & 0xffff;
4945       var67.x4[3] = (var66.x4[3] * var65.x4[3]) & 0xffff;
4946       /* 24: addw */
4947       var68.x4[0] = var67.x4[0] + var54.x4[0];
4948       var68.x4[1] = var67.x4[1] + var54.x4[1];
4949       var68.x4[2] = var67.x4[2] + var54.x4[2];
4950       var68.x4[3] = var67.x4[3] + var54.x4[3];
4951       /* 25: addw */
4952       var69.x4[0] = var65.x4[0] + var52.x4[0];
4953       var69.x4[1] = var65.x4[1] + var52.x4[1];
4954       var69.x4[2] = var65.x4[2] + var52.x4[2];
4955       var69.x4[3] = var65.x4[3] + var52.x4[3];
4956       /* 26: divluw */
4957       var70.x4[0] =
4958           ((var69.x4[0] & 0xff) ==
4959           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[0]) /
4960           ((orc_uint16) var69.x4[0] & 0xff));
4961       var70.x4[1] =
4962           ((var69.x4[1] & 0xff) ==
4963           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[1]) /
4964           ((orc_uint16) var69.x4[1] & 0xff));
4965       var70.x4[2] =
4966           ((var69.x4[2] & 0xff) ==
4967           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[2]) /
4968           ((orc_uint16) var69.x4[2] & 0xff));
4969       var70.x4[3] =
4970           ((var69.x4[3] & 0xff) ==
4971           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var68.x4[3]) /
4972           ((orc_uint16) var69.x4[3] & 0xff));
4973       /* 27: convwb */
4974       var71.x4[0] = var70.x4[0];
4975       var71.x4[1] = var70.x4[1];
4976       var71.x4[2] = var70.x4[2];
4977       var71.x4[3] = var70.x4[3];
4978       /* 29: andl */
4979       var72.i = var71.i & var43.i;
4980       /* 30: convwb */
4981       var73.x4[0] = var69.x4[0];
4982       var73.x4[1] = var69.x4[1];
4983       var73.x4[2] = var69.x4[2];
4984       var73.x4[3] = var69.x4[3];
4985       /* 32: andl */
4986       var74.i = var73.i & var44.i;
4987       /* 33: orl */
4988       var75.i = var72.i | var74.i;
4989       /* 34: storel */
4990       ptr0[i] = var75;
4991     }
4992   }
4993
4994 }
4995
4996 void
4997 compositor_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride,
4998     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
4999 {
5000   OrcExecutor _ex, *ex = &_ex;
5001   static volatile int p_inited = 0;
5002   static OrcCode *c = 0;
5003   void (*func) (OrcExecutor *);
5004
5005   if (!p_inited) {
5006     orc_once_mutex_lock ();
5007     if (!p_inited) {
5008       OrcProgram *p;
5009
5010 #if 1
5011       static const orc_uint8 bc[] = {
5012         1, 7, 9, 27, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
5013         114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 98, 103, 114, 97, 11,
5014         4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 0, 0, 0,
5015         255, 14, 4, 255, 255, 255, 0, 14, 4, 24, 0, 0, 0, 16, 2, 20,
5016         4, 20, 4, 20, 2, 20, 1, 20, 8, 20, 8, 20, 8, 20, 4, 20,
5017         8, 20, 8, 113, 32, 4, 126, 33, 32, 19, 163, 34, 33, 157, 35, 34,
5018         152, 39, 35, 21, 2, 150, 36, 39, 21, 2, 89, 36, 36, 24, 21, 2,
5019         80, 36, 36, 21, 2, 150, 41, 32, 21, 2, 89, 41, 41, 36, 115, 39,
5020         16, 21, 2, 150, 37, 39, 21, 2, 98, 37, 37, 36, 113, 32, 0, 126,
5021         33, 32, 19, 163, 34, 33, 157, 35, 34, 152, 39, 35, 21, 2, 150, 38,
5022         39, 21, 2, 89, 38, 38, 37, 21, 2, 80, 38, 38, 21, 2, 150, 40,
5023         32, 21, 2, 89, 40, 40, 38, 21, 2, 70, 40, 40, 41, 21, 2, 70,
5024         38, 38, 36, 21, 2, 81, 40, 40, 38, 21, 2, 157, 32, 40, 106, 32,
5025         32, 18, 21, 2, 157, 39, 38, 106, 39, 39, 17, 123, 32, 32, 39, 128,
5026         0, 32, 2, 0,
5027       };
5028       p = orc_program_new_from_static_bytecode (bc);
5029       orc_program_set_backup_function (p, _backup_compositor_orc_overlay_bgra);
5030 #else
5031       p = orc_program_new ();
5032       orc_program_set_2d (p);
5033       orc_program_set_name (p, "compositor_orc_overlay_bgra");
5034       orc_program_set_backup_function (p, _backup_compositor_orc_overlay_bgra);
5035       orc_program_add_destination (p, 4, "d1");
5036       orc_program_add_source (p, 4, "s1");
5037       orc_program_add_constant (p, 4, 0xffffffff, "c1");
5038       orc_program_add_constant (p, 4, 0xff000000, "c2");
5039       orc_program_add_constant (p, 4, 0x00ffffff, "c3");
5040       orc_program_add_constant (p, 4, 0x00000018, "c4");
5041       orc_program_add_parameter (p, 2, "p1");
5042       orc_program_add_temporary (p, 4, "t1");
5043       orc_program_add_temporary (p, 4, "t2");
5044       orc_program_add_temporary (p, 2, "t3");
5045       orc_program_add_temporary (p, 1, "t4");
5046       orc_program_add_temporary (p, 8, "t5");
5047       orc_program_add_temporary (p, 8, "t6");
5048       orc_program_add_temporary (p, 8, "t7");
5049       orc_program_add_temporary (p, 4, "t8");
5050       orc_program_add_temporary (p, 8, "t9");
5051       orc_program_add_temporary (p, 8, "t10");
5052
5053       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
5054           ORC_VAR_D1);
5055       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C4,
5056           ORC_VAR_D1);
5057       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
5058           ORC_VAR_D1);
5059       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
5060           ORC_VAR_D1);
5061       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T8, ORC_VAR_T4, ORC_VAR_D1,
5062           ORC_VAR_D1);
5063       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T8, ORC_VAR_D1,
5064           ORC_VAR_D1);
5065       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
5066           ORC_VAR_D1);
5067       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_D1,
5068           ORC_VAR_D1);
5069       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T10, ORC_VAR_T1,
5070           ORC_VAR_D1, ORC_VAR_D1);
5071       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T10, ORC_VAR_T10, ORC_VAR_T5,
5072           ORC_VAR_D1);
5073       orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T8, ORC_VAR_C1, ORC_VAR_D1,
5074           ORC_VAR_D1);
5075       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T8, ORC_VAR_D1,
5076           ORC_VAR_D1);
5077       orc_program_append_2 (p, "subw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T5,
5078           ORC_VAR_D1);
5079       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
5080           ORC_VAR_D1);
5081       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C4,
5082           ORC_VAR_D1);
5083       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
5084           ORC_VAR_D1);
5085       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
5086           ORC_VAR_D1);
5087       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T8, ORC_VAR_T4, ORC_VAR_D1,
5088           ORC_VAR_D1);
5089       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_D1,
5090           ORC_VAR_D1);
5091       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
5092           ORC_VAR_D1);
5093       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_D1,
5094           ORC_VAR_D1);
5095       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T9, ORC_VAR_T1, ORC_VAR_D1,
5096           ORC_VAR_D1);
5097       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T7,
5098           ORC_VAR_D1);
5099       orc_program_append_2 (p, "addw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T10,
5100           ORC_VAR_D1);
5101       orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5,
5102           ORC_VAR_D1);
5103       orc_program_append_2 (p, "divluw", 2, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T7,
5104           ORC_VAR_D1);
5105       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_D1,
5106           ORC_VAR_D1);
5107       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C3,
5108           ORC_VAR_D1);
5109       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T8, ORC_VAR_T7, ORC_VAR_D1,
5110           ORC_VAR_D1);
5111       orc_program_append_2 (p, "andl", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_C2,
5112           ORC_VAR_D1);
5113       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T8,
5114           ORC_VAR_D1);
5115       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
5116           ORC_VAR_D1);
5117 #endif
5118
5119       orc_program_compile (p);
5120       c = orc_program_take_code (p);
5121       orc_program_free (p);
5122     }
5123     p_inited = TRUE;
5124     orc_once_mutex_unlock ();
5125   }
5126   ex->arrays[ORC_VAR_A2] = c;
5127   ex->program = 0;
5128
5129   ex->n = n;
5130   ORC_EXECUTOR_M (ex) = m;
5131   ex->arrays[ORC_VAR_D1] = d1;
5132   ex->params[ORC_VAR_D1] = d1_stride;
5133   ex->arrays[ORC_VAR_S1] = (void *) s1;
5134   ex->params[ORC_VAR_S1] = s1_stride;
5135   ex->params[ORC_VAR_P1] = p1;
5136
5137   func = c->exec;
5138   func (ex);
5139 }
5140 #endif
5141
5142
5143 /* compositor_orc_overlay_bgra_addition */
5144 #ifdef DISABLE_ORC
5145 void
5146 compositor_orc_overlay_bgra_addition (guint8 * ORC_RESTRICT d1, int d1_stride,
5147     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
5148 {
5149   int i;
5150   int j;
5151   orc_union32 *ORC_RESTRICT ptr0;
5152   const orc_union32 *ORC_RESTRICT ptr4;
5153   orc_union64 var43;
5154 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
5155   volatile orc_union32 var44;
5156 #else
5157   orc_union32 var44;
5158 #endif
5159 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
5160   volatile orc_union32 var45;
5161 #else
5162   orc_union32 var45;
5163 #endif
5164   orc_union32 var46;
5165   orc_union32 var47;
5166   orc_union16 var48;
5167   orc_int8 var49;
5168   orc_union32 var50;
5169   orc_union64 var51;
5170   orc_union64 var52;
5171   orc_union64 var53;
5172   orc_union64 var54;
5173   orc_union64 var55;
5174   orc_union32 var56;
5175   orc_union64 var57;
5176   orc_union64 var58;
5177   orc_union32 var59;
5178   orc_union32 var60;
5179   orc_union16 var61;
5180   orc_int8 var62;
5181   orc_union32 var63;
5182   orc_union64 var64;
5183   orc_union64 var65;
5184   orc_union64 var66;
5185   orc_union64 var67;
5186   orc_union64 var68;
5187   orc_union64 var69;
5188   orc_union64 var70;
5189   orc_union64 var71;
5190   orc_union32 var72;
5191   orc_union32 var73;
5192   orc_union16 var74;
5193   orc_int8 var75;
5194   orc_union32 var76;
5195   orc_union64 var77;
5196   orc_union64 var78;
5197   orc_union32 var79;
5198   orc_union32 var80;
5199   orc_union32 var81;
5200   orc_union32 var82;
5201   orc_union32 var83;
5202
5203   for (j = 0; j < m; j++) {
5204     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
5205     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
5206
5207     /* 6: loadpw */
5208     var43.x4[0] = p1;
5209     var43.x4[1] = p1;
5210     var43.x4[2] = p1;
5211     var43.x4[3] = p1;
5212     /* 11: loadpl */
5213     var56.i = 0xffffffff;       /* -1 or 2.122e-314f */
5214     /* 35: loadpl */
5215     var44.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
5216     /* 38: loadpl */
5217     var45.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
5218
5219     for (i = 0; i < n; i++) {
5220       /* 0: loadl */
5221       var46 = ptr4[i];
5222       /* 1: shrul */
5223       var47.i = ((orc_uint32) var46.i) >> 24;
5224       /* 2: convlw */
5225       var48.i = var47.i;
5226       /* 3: convwb */
5227       var49 = var48.i;
5228       /* 4: splatbl */
5229       var50.i =
5230           ((((orc_uint32) var49) & 0xff) << 24) | ((((orc_uint32) var49) & 0xff)
5231           << 16) | ((((orc_uint32) var49) & 0xff) << 8) | (((orc_uint32) var49)
5232           & 0xff);
5233       /* 5: convubw */
5234       var51.x4[0] = (orc_uint8) var50.x4[0];
5235       var51.x4[1] = (orc_uint8) var50.x4[1];
5236       var51.x4[2] = (orc_uint8) var50.x4[2];
5237       var51.x4[3] = (orc_uint8) var50.x4[3];
5238       /* 7: mullw */
5239       var52.x4[0] = (var51.x4[0] * var43.x4[0]) & 0xffff;
5240       var52.x4[1] = (var51.x4[1] * var43.x4[1]) & 0xffff;
5241       var52.x4[2] = (var51.x4[2] * var43.x4[2]) & 0xffff;
5242       var52.x4[3] = (var51.x4[3] * var43.x4[3]) & 0xffff;
5243       /* 8: div255w */
5244       var53.x4[0] =
5245           ((orc_uint16) (((orc_uint16) (var52.x4[0] + 128)) +
5246               (((orc_uint16) (var52.x4[0] + 128)) >> 8))) >> 8;
5247       var53.x4[1] =
5248           ((orc_uint16) (((orc_uint16) (var52.x4[1] + 128)) +
5249               (((orc_uint16) (var52.x4[1] + 128)) >> 8))) >> 8;
5250       var53.x4[2] =
5251           ((orc_uint16) (((orc_uint16) (var52.x4[2] + 128)) +
5252               (((orc_uint16) (var52.x4[2] + 128)) >> 8))) >> 8;
5253       var53.x4[3] =
5254           ((orc_uint16) (((orc_uint16) (var52.x4[3] + 128)) +
5255               (((orc_uint16) (var52.x4[3] + 128)) >> 8))) >> 8;
5256       /* 9: convubw */
5257       var54.x4[0] = (orc_uint8) var46.x4[0];
5258       var54.x4[1] = (orc_uint8) var46.x4[1];
5259       var54.x4[2] = (orc_uint8) var46.x4[2];
5260       var54.x4[3] = (orc_uint8) var46.x4[3];
5261       /* 10: mullw */
5262       var55.x4[0] = (var54.x4[0] * var53.x4[0]) & 0xffff;
5263       var55.x4[1] = (var54.x4[1] * var53.x4[1]) & 0xffff;
5264       var55.x4[2] = (var54.x4[2] * var53.x4[2]) & 0xffff;
5265       var55.x4[3] = (var54.x4[3] * var53.x4[3]) & 0xffff;
5266       /* 12: convubw */
5267       var57.x4[0] = (orc_uint8) var56.x4[0];
5268       var57.x4[1] = (orc_uint8) var56.x4[1];
5269       var57.x4[2] = (orc_uint8) var56.x4[2];
5270       var57.x4[3] = (orc_uint8) var56.x4[3];
5271       /* 13: subw */
5272       var58.x4[0] = var57.x4[0] - var53.x4[0];
5273       var58.x4[1] = var57.x4[1] - var53.x4[1];
5274       var58.x4[2] = var57.x4[2] - var53.x4[2];
5275       var58.x4[3] = var57.x4[3] - var53.x4[3];
5276       /* 14: loadl */
5277       var59 = ptr0[i];
5278       /* 15: shrul */
5279       var60.i = ((orc_uint32) var59.i) >> 24;
5280       /* 16: convlw */
5281       var61.i = var60.i;
5282       /* 17: convwb */
5283       var62 = var61.i;
5284       /* 18: splatbl */
5285       var63.i =
5286           ((((orc_uint32) var62) & 0xff) << 24) | ((((orc_uint32) var62) & 0xff)
5287           << 16) | ((((orc_uint32) var62) & 0xff) << 8) | (((orc_uint32) var62)
5288           & 0xff);
5289       /* 19: convubw */
5290       var64.x4[0] = (orc_uint8) var63.x4[0];
5291       var64.x4[1] = (orc_uint8) var63.x4[1];
5292       var64.x4[2] = (orc_uint8) var63.x4[2];
5293       var64.x4[3] = (orc_uint8) var63.x4[3];
5294       /* 20: mullw */
5295       var65.x4[0] = (var64.x4[0] * var58.x4[0]) & 0xffff;
5296       var65.x4[1] = (var64.x4[1] * var58.x4[1]) & 0xffff;
5297       var65.x4[2] = (var64.x4[2] * var58.x4[2]) & 0xffff;
5298       var65.x4[3] = (var64.x4[3] * var58.x4[3]) & 0xffff;
5299       /* 21: div255w */
5300       var66.x4[0] =
5301           ((orc_uint16) (((orc_uint16) (var65.x4[0] + 128)) +
5302               (((orc_uint16) (var65.x4[0] + 128)) >> 8))) >> 8;
5303       var66.x4[1] =
5304           ((orc_uint16) (((orc_uint16) (var65.x4[1] + 128)) +
5305               (((orc_uint16) (var65.x4[1] + 128)) >> 8))) >> 8;
5306       var66.x4[2] =
5307           ((orc_uint16) (((orc_uint16) (var65.x4[2] + 128)) +
5308               (((orc_uint16) (var65.x4[2] + 128)) >> 8))) >> 8;
5309       var66.x4[3] =
5310           ((orc_uint16) (((orc_uint16) (var65.x4[3] + 128)) +
5311               (((orc_uint16) (var65.x4[3] + 128)) >> 8))) >> 8;
5312       /* 22: convubw */
5313       var67.x4[0] = (orc_uint8) var59.x4[0];
5314       var67.x4[1] = (orc_uint8) var59.x4[1];
5315       var67.x4[2] = (orc_uint8) var59.x4[2];
5316       var67.x4[3] = (orc_uint8) var59.x4[3];
5317       /* 23: mullw */
5318       var68.x4[0] = (var67.x4[0] * var66.x4[0]) & 0xffff;
5319       var68.x4[1] = (var67.x4[1] * var66.x4[1]) & 0xffff;
5320       var68.x4[2] = (var67.x4[2] * var66.x4[2]) & 0xffff;
5321       var68.x4[3] = (var67.x4[3] * var66.x4[3]) & 0xffff;
5322       /* 24: addw */
5323       var69.x4[0] = var68.x4[0] + var55.x4[0];
5324       var69.x4[1] = var68.x4[1] + var55.x4[1];
5325       var69.x4[2] = var68.x4[2] + var55.x4[2];
5326       var69.x4[3] = var68.x4[3] + var55.x4[3];
5327       /* 25: addw */
5328       var70.x4[0] = var66.x4[0] + var53.x4[0];
5329       var70.x4[1] = var66.x4[1] + var53.x4[1];
5330       var70.x4[2] = var66.x4[2] + var53.x4[2];
5331       var70.x4[3] = var66.x4[3] + var53.x4[3];
5332       /* 26: divluw */
5333       var71.x4[0] =
5334           ((var70.x4[0] & 0xff) ==
5335           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[0]) /
5336           ((orc_uint16) var70.x4[0] & 0xff));
5337       var71.x4[1] =
5338           ((var70.x4[1] & 0xff) ==
5339           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[1]) /
5340           ((orc_uint16) var70.x4[1] & 0xff));
5341       var71.x4[2] =
5342           ((var70.x4[2] & 0xff) ==
5343           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[2]) /
5344           ((orc_uint16) var70.x4[2] & 0xff));
5345       var71.x4[3] =
5346           ((var70.x4[3] & 0xff) ==
5347           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[3]) /
5348           ((orc_uint16) var70.x4[3] & 0xff));
5349       /* 27: loadl */
5350       var72 = ptr0[i];
5351       /* 28: shrul */
5352       var73.i = ((orc_uint32) var72.i) >> 24;
5353       /* 29: convlw */
5354       var74.i = var73.i;
5355       /* 30: convwb */
5356       var75 = var74.i;
5357       /* 31: splatbl */
5358       var76.i =
5359           ((((orc_uint32) var75) & 0xff) << 24) | ((((orc_uint32) var75) & 0xff)
5360           << 16) | ((((orc_uint32) var75) & 0xff) << 8) | (((orc_uint32) var75)
5361           & 0xff);
5362       /* 32: convubw */
5363       var77.x4[0] = (orc_uint8) var76.x4[0];
5364       var77.x4[1] = (orc_uint8) var76.x4[1];
5365       var77.x4[2] = (orc_uint8) var76.x4[2];
5366       var77.x4[3] = (orc_uint8) var76.x4[3];
5367       /* 33: addw */
5368       var78.x4[0] = var77.x4[0] + var53.x4[0];
5369       var78.x4[1] = var77.x4[1] + var53.x4[1];
5370       var78.x4[2] = var77.x4[2] + var53.x4[2];
5371       var78.x4[3] = var77.x4[3] + var53.x4[3];
5372       /* 34: convwb */
5373       var79.x4[0] = var71.x4[0];
5374       var79.x4[1] = var71.x4[1];
5375       var79.x4[2] = var71.x4[2];
5376       var79.x4[3] = var71.x4[3];
5377       /* 36: andl */
5378       var80.i = var79.i & var44.i;
5379       /* 37: convwb */
5380       var81.x4[0] = var78.x4[0];
5381       var81.x4[1] = var78.x4[1];
5382       var81.x4[2] = var78.x4[2];
5383       var81.x4[3] = var78.x4[3];
5384       /* 39: andl */
5385       var82.i = var81.i & var45.i;
5386       /* 40: orl */
5387       var83.i = var80.i | var82.i;
5388       /* 41: storel */
5389       ptr0[i] = var83;
5390     }
5391   }
5392
5393 }
5394
5395 #else
5396 static void
5397 _backup_compositor_orc_overlay_bgra_addition (OrcExecutor * ORC_RESTRICT ex)
5398 {
5399   int i;
5400   int j;
5401   int n = ex->n;
5402   int m = ex->params[ORC_VAR_A1];
5403   orc_union32 *ORC_RESTRICT ptr0;
5404   const orc_union32 *ORC_RESTRICT ptr4;
5405   orc_union64 var43;
5406 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
5407   volatile orc_union32 var44;
5408 #else
5409   orc_union32 var44;
5410 #endif
5411 #if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__)
5412   volatile orc_union32 var45;
5413 #else
5414   orc_union32 var45;
5415 #endif
5416   orc_union32 var46;
5417   orc_union32 var47;
5418   orc_union16 var48;
5419   orc_int8 var49;
5420   orc_union32 var50;
5421   orc_union64 var51;
5422   orc_union64 var52;
5423   orc_union64 var53;
5424   orc_union64 var54;
5425   orc_union64 var55;
5426   orc_union32 var56;
5427   orc_union64 var57;
5428   orc_union64 var58;
5429   orc_union32 var59;
5430   orc_union32 var60;
5431   orc_union16 var61;
5432   orc_int8 var62;
5433   orc_union32 var63;
5434   orc_union64 var64;
5435   orc_union64 var65;
5436   orc_union64 var66;
5437   orc_union64 var67;
5438   orc_union64 var68;
5439   orc_union64 var69;
5440   orc_union64 var70;
5441   orc_union64 var71;
5442   orc_union32 var72;
5443   orc_union32 var73;
5444   orc_union16 var74;
5445   orc_int8 var75;
5446   orc_union32 var76;
5447   orc_union64 var77;
5448   orc_union64 var78;
5449   orc_union32 var79;
5450   orc_union32 var80;
5451   orc_union32 var81;
5452   orc_union32 var82;
5453   orc_union32 var83;
5454
5455   for (j = 0; j < m; j++) {
5456     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
5457     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
5458
5459     /* 6: loadpw */
5460     var43.x4[0] = ex->params[24];
5461     var43.x4[1] = ex->params[24];
5462     var43.x4[2] = ex->params[24];
5463     var43.x4[3] = ex->params[24];
5464     /* 11: loadpl */
5465     var56.i = 0xffffffff;       /* -1 or 2.122e-314f */
5466     /* 35: loadpl */
5467     var44.i = 0x00ffffff;       /* 16777215 or 8.28905e-317f */
5468     /* 38: loadpl */
5469     var45.i = 0xff000000;       /* -16777216 or 2.11371e-314f */
5470
5471     for (i = 0; i < n; i++) {
5472       /* 0: loadl */
5473       var46 = ptr4[i];
5474       /* 1: shrul */
5475       var47.i = ((orc_uint32) var46.i) >> 24;
5476       /* 2: convlw */
5477       var48.i = var47.i;
5478       /* 3: convwb */
5479       var49 = var48.i;
5480       /* 4: splatbl */
5481       var50.i =
5482           ((((orc_uint32) var49) & 0xff) << 24) | ((((orc_uint32) var49) & 0xff)
5483           << 16) | ((((orc_uint32) var49) & 0xff) << 8) | (((orc_uint32) var49)
5484           & 0xff);
5485       /* 5: convubw */
5486       var51.x4[0] = (orc_uint8) var50.x4[0];
5487       var51.x4[1] = (orc_uint8) var50.x4[1];
5488       var51.x4[2] = (orc_uint8) var50.x4[2];
5489       var51.x4[3] = (orc_uint8) var50.x4[3];
5490       /* 7: mullw */
5491       var52.x4[0] = (var51.x4[0] * var43.x4[0]) & 0xffff;
5492       var52.x4[1] = (var51.x4[1] * var43.x4[1]) & 0xffff;
5493       var52.x4[2] = (var51.x4[2] * var43.x4[2]) & 0xffff;
5494       var52.x4[3] = (var51.x4[3] * var43.x4[3]) & 0xffff;
5495       /* 8: div255w */
5496       var53.x4[0] =
5497           ((orc_uint16) (((orc_uint16) (var52.x4[0] + 128)) +
5498               (((orc_uint16) (var52.x4[0] + 128)) >> 8))) >> 8;
5499       var53.x4[1] =
5500           ((orc_uint16) (((orc_uint16) (var52.x4[1] + 128)) +
5501               (((orc_uint16) (var52.x4[1] + 128)) >> 8))) >> 8;
5502       var53.x4[2] =
5503           ((orc_uint16) (((orc_uint16) (var52.x4[2] + 128)) +
5504               (((orc_uint16) (var52.x4[2] + 128)) >> 8))) >> 8;
5505       var53.x4[3] =
5506           ((orc_uint16) (((orc_uint16) (var52.x4[3] + 128)) +
5507               (((orc_uint16) (var52.x4[3] + 128)) >> 8))) >> 8;
5508       /* 9: convubw */
5509       var54.x4[0] = (orc_uint8) var46.x4[0];
5510       var54.x4[1] = (orc_uint8) var46.x4[1];
5511       var54.x4[2] = (orc_uint8) var46.x4[2];
5512       var54.x4[3] = (orc_uint8) var46.x4[3];
5513       /* 10: mullw */
5514       var55.x4[0] = (var54.x4[0] * var53.x4[0]) & 0xffff;
5515       var55.x4[1] = (var54.x4[1] * var53.x4[1]) & 0xffff;
5516       var55.x4[2] = (var54.x4[2] * var53.x4[2]) & 0xffff;
5517       var55.x4[3] = (var54.x4[3] * var53.x4[3]) & 0xffff;
5518       /* 12: convubw */
5519       var57.x4[0] = (orc_uint8) var56.x4[0];
5520       var57.x4[1] = (orc_uint8) var56.x4[1];
5521       var57.x4[2] = (orc_uint8) var56.x4[2];
5522       var57.x4[3] = (orc_uint8) var56.x4[3];
5523       /* 13: subw */
5524       var58.x4[0] = var57.x4[0] - var53.x4[0];
5525       var58.x4[1] = var57.x4[1] - var53.x4[1];
5526       var58.x4[2] = var57.x4[2] - var53.x4[2];
5527       var58.x4[3] = var57.x4[3] - var53.x4[3];
5528       /* 14: loadl */
5529       var59 = ptr0[i];
5530       /* 15: shrul */
5531       var60.i = ((orc_uint32) var59.i) >> 24;
5532       /* 16: convlw */
5533       var61.i = var60.i;
5534       /* 17: convwb */
5535       var62 = var61.i;
5536       /* 18: splatbl */
5537       var63.i =
5538           ((((orc_uint32) var62) & 0xff) << 24) | ((((orc_uint32) var62) & 0xff)
5539           << 16) | ((((orc_uint32) var62) & 0xff) << 8) | (((orc_uint32) var62)
5540           & 0xff);
5541       /* 19: convubw */
5542       var64.x4[0] = (orc_uint8) var63.x4[0];
5543       var64.x4[1] = (orc_uint8) var63.x4[1];
5544       var64.x4[2] = (orc_uint8) var63.x4[2];
5545       var64.x4[3] = (orc_uint8) var63.x4[3];
5546       /* 20: mullw */
5547       var65.x4[0] = (var64.x4[0] * var58.x4[0]) & 0xffff;
5548       var65.x4[1] = (var64.x4[1] * var58.x4[1]) & 0xffff;
5549       var65.x4[2] = (var64.x4[2] * var58.x4[2]) & 0xffff;
5550       var65.x4[3] = (var64.x4[3] * var58.x4[3]) & 0xffff;
5551       /* 21: div255w */
5552       var66.x4[0] =
5553           ((orc_uint16) (((orc_uint16) (var65.x4[0] + 128)) +
5554               (((orc_uint16) (var65.x4[0] + 128)) >> 8))) >> 8;
5555       var66.x4[1] =
5556           ((orc_uint16) (((orc_uint16) (var65.x4[1] + 128)) +
5557               (((orc_uint16) (var65.x4[1] + 128)) >> 8))) >> 8;
5558       var66.x4[2] =
5559           ((orc_uint16) (((orc_uint16) (var65.x4[2] + 128)) +
5560               (((orc_uint16) (var65.x4[2] + 128)) >> 8))) >> 8;
5561       var66.x4[3] =
5562           ((orc_uint16) (((orc_uint16) (var65.x4[3] + 128)) +
5563               (((orc_uint16) (var65.x4[3] + 128)) >> 8))) >> 8;
5564       /* 22: convubw */
5565       var67.x4[0] = (orc_uint8) var59.x4[0];
5566       var67.x4[1] = (orc_uint8) var59.x4[1];
5567       var67.x4[2] = (orc_uint8) var59.x4[2];
5568       var67.x4[3] = (orc_uint8) var59.x4[3];
5569       /* 23: mullw */
5570       var68.x4[0] = (var67.x4[0] * var66.x4[0]) & 0xffff;
5571       var68.x4[1] = (var67.x4[1] * var66.x4[1]) & 0xffff;
5572       var68.x4[2] = (var67.x4[2] * var66.x4[2]) & 0xffff;
5573       var68.x4[3] = (var67.x4[3] * var66.x4[3]) & 0xffff;
5574       /* 24: addw */
5575       var69.x4[0] = var68.x4[0] + var55.x4[0];
5576       var69.x4[1] = var68.x4[1] + var55.x4[1];
5577       var69.x4[2] = var68.x4[2] + var55.x4[2];
5578       var69.x4[3] = var68.x4[3] + var55.x4[3];
5579       /* 25: addw */
5580       var70.x4[0] = var66.x4[0] + var53.x4[0];
5581       var70.x4[1] = var66.x4[1] + var53.x4[1];
5582       var70.x4[2] = var66.x4[2] + var53.x4[2];
5583       var70.x4[3] = var66.x4[3] + var53.x4[3];
5584       /* 26: divluw */
5585       var71.x4[0] =
5586           ((var70.x4[0] & 0xff) ==
5587           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[0]) /
5588           ((orc_uint16) var70.x4[0] & 0xff));
5589       var71.x4[1] =
5590           ((var70.x4[1] & 0xff) ==
5591           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[1]) /
5592           ((orc_uint16) var70.x4[1] & 0xff));
5593       var71.x4[2] =
5594           ((var70.x4[2] & 0xff) ==
5595           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[2]) /
5596           ((orc_uint16) var70.x4[2] & 0xff));
5597       var71.x4[3] =
5598           ((var70.x4[3] & 0xff) ==
5599           0) ? 255 : ORC_CLAMP_UB (((orc_uint16) var69.x4[3]) /
5600           ((orc_uint16) var70.x4[3] & 0xff));
5601       /* 27: loadl */
5602       var72 = ptr0[i];
5603       /* 28: shrul */
5604       var73.i = ((orc_uint32) var72.i) >> 24;
5605       /* 29: convlw */
5606       var74.i = var73.i;
5607       /* 30: convwb */
5608       var75 = var74.i;
5609       /* 31: splatbl */
5610       var76.i =
5611           ((((orc_uint32) var75) & 0xff) << 24) | ((((orc_uint32) var75) & 0xff)
5612           << 16) | ((((orc_uint32) var75) & 0xff) << 8) | (((orc_uint32) var75)
5613           & 0xff);
5614       /* 32: convubw */
5615       var77.x4[0] = (orc_uint8) var76.x4[0];
5616       var77.x4[1] = (orc_uint8) var76.x4[1];
5617       var77.x4[2] = (orc_uint8) var76.x4[2];
5618       var77.x4[3] = (orc_uint8) var76.x4[3];
5619       /* 33: addw */
5620       var78.x4[0] = var77.x4[0] + var53.x4[0];
5621       var78.x4[1] = var77.x4[1] + var53.x4[1];
5622       var78.x4[2] = var77.x4[2] + var53.x4[2];
5623       var78.x4[3] = var77.x4[3] + var53.x4[3];
5624       /* 34: convwb */
5625       var79.x4[0] = var71.x4[0];
5626       var79.x4[1] = var71.x4[1];
5627       var79.x4[2] = var71.x4[2];
5628       var79.x4[3] = var71.x4[3];
5629       /* 36: andl */
5630       var80.i = var79.i & var44.i;
5631       /* 37: convwb */
5632       var81.x4[0] = var78.x4[0];
5633       var81.x4[1] = var78.x4[1];
5634       var81.x4[2] = var78.x4[2];
5635       var81.x4[3] = var78.x4[3];
5636       /* 39: andl */
5637       var82.i = var81.i & var45.i;
5638       /* 40: orl */
5639       var83.i = var80.i | var82.i;
5640       /* 41: storel */
5641       ptr0[i] = var83;
5642     }
5643   }
5644
5645 }
5646
5647 void
5648 compositor_orc_overlay_bgra_addition (guint8 * ORC_RESTRICT d1, int d1_stride,
5649     const guint8 * ORC_RESTRICT s1, int s1_stride, int p1, int n, int m)
5650 {
5651   OrcExecutor _ex, *ex = &_ex;
5652   static volatile int p_inited = 0;
5653   static OrcCode *c = 0;
5654   void (*func) (OrcExecutor *);
5655
5656   if (!p_inited) {
5657     orc_once_mutex_lock ();
5658     if (!p_inited) {
5659       OrcProgram *p;
5660
5661 #if 1
5662       static const orc_uint8 bc[] = {
5663         1, 7, 9, 36, 99, 111, 109, 112, 111, 115, 105, 116, 111, 114, 95, 111,
5664         114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 98, 103, 114, 97, 95,
5665         97, 100, 100, 105, 116, 105, 111, 110, 11, 4, 4, 12, 4, 4, 14, 4,
5666         255, 255, 255, 255, 14, 4, 0, 0, 0, 255, 14, 4, 255, 255, 255, 0,
5667         14, 4, 24, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 2, 20, 1,
5668         20, 8, 20, 8, 20, 8, 20, 8, 20, 4, 20, 8, 20, 8, 113, 32,
5669         4, 126, 33, 32, 19, 163, 34, 33, 157, 35, 34, 152, 40, 35, 21, 2,
5670         150, 36, 40, 21, 2, 89, 36, 36, 24, 21, 2, 80, 36, 36, 21, 2,
5671         150, 42, 32, 21, 2, 89, 42, 42, 36, 115, 40, 16, 21, 2, 150, 37,
5672         40, 21, 2, 98, 37, 37, 36, 113, 32, 0, 126, 33, 32, 19, 163, 34,
5673         33, 157, 35, 34, 152, 40, 35, 21, 2, 150, 38, 40, 21, 2, 89, 38,
5674         38, 37, 21, 2, 80, 38, 38, 21, 2, 150, 41, 32, 21, 2, 89, 41,
5675         41, 38, 21, 2, 70, 41, 41, 42, 21, 2, 70, 38, 38, 36, 21, 2,
5676         81, 41, 41, 38, 113, 32, 0, 126, 33, 32, 19, 163, 34, 33, 157, 35,
5677         34, 152, 40, 35, 21, 2, 150, 39, 40, 21, 2, 70, 39, 39, 36, 21,
5678         2, 157, 32, 41, 106, 32, 32, 18, 21, 2, 157, 40, 39, 106, 40, 40,
5679         17, 123, 32, 32, 40, 128, 0, 32, 2, 0,
5680       };
5681       p = orc_program_new_from_static_bytecode (bc);
5682       orc_program_set_backup_function (p,
5683           _backup_compositor_orc_overlay_bgra_addition);
5684 #else
5685       p = orc_program_new ();
5686       orc_program_set_2d (p);
5687       orc_program_set_name (p, "compositor_orc_overlay_bgra_addition");
5688       orc_program_set_backup_function (p,
5689           _backup_compositor_orc_overlay_bgra_addition);
5690       orc_program_add_destination (p, 4, "d1");
5691       orc_program_add_source (p, 4, "s1");
5692       orc_program_add_constant (p, 4, 0xffffffff, "c1");
5693       orc_program_add_constant (p, 4, 0xff000000, "c2");
5694       orc_program_add_constant (p, 4, 0x00ffffff, "c3");
5695       orc_program_add_constant (p, 4, 0x00000018, "c4");
5696       orc_program_add_parameter (p, 2, "p1");
5697       orc_program_add_temporary (p, 4, "t1");
5698       orc_program_add_temporary (p, 4, "t2");
5699       orc_program_add_temporary (p, 2, "t3");
5700       orc_program_add_temporary (p, 1, "t4");
5701       orc_program_add_temporary (p, 8, "t5");
5702       orc_program_add_temporary (p, 8, "t6");
5703       orc_program_add_temporary (p, 8, "t7");
5704       orc_program_add_temporary (p, 8, "t8");
5705       orc_program_add_temporary (p, 4, "t9");
5706       orc_program_add_temporary (p, 8, "t10");
5707       orc_program_add_temporary (p, 8, "t11");
5708
5709       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
5710           ORC_VAR_D1);
5711       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C4,
5712           ORC_VAR_D1);
5713       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
5714           ORC_VAR_D1);
5715       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
5716           ORC_VAR_D1);
5717       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_D1,
5718           ORC_VAR_D1);
5719       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T5, ORC_VAR_T9, ORC_VAR_D1,
5720           ORC_VAR_D1);
5721       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_P1,
5722           ORC_VAR_D1);
5723       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_D1,
5724           ORC_VAR_D1);
5725       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T11, ORC_VAR_T1,
5726           ORC_VAR_D1, ORC_VAR_D1);
5727       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T11, ORC_VAR_T11, ORC_VAR_T5,
5728           ORC_VAR_D1);
5729       orc_program_append_2 (p, "loadpl", 0, ORC_VAR_T9, ORC_VAR_C1, ORC_VAR_D1,
5730           ORC_VAR_D1);
5731       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T6, ORC_VAR_T9, ORC_VAR_D1,
5732           ORC_VAR_D1);
5733       orc_program_append_2 (p, "subw", 2, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T5,
5734           ORC_VAR_D1);
5735       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
5736           ORC_VAR_D1);
5737       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C4,
5738           ORC_VAR_D1);
5739       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
5740           ORC_VAR_D1);
5741       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
5742           ORC_VAR_D1);
5743       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_D1,
5744           ORC_VAR_D1);
5745       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T7, ORC_VAR_T9, ORC_VAR_D1,
5746           ORC_VAR_D1);
5747       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
5748           ORC_VAR_D1);
5749       orc_program_append_2 (p, "div255w", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_D1,
5750           ORC_VAR_D1);
5751       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T10, ORC_VAR_T1,
5752           ORC_VAR_D1, ORC_VAR_D1);
5753       orc_program_append_2 (p, "mullw", 2, ORC_VAR_T10, ORC_VAR_T10, ORC_VAR_T7,
5754           ORC_VAR_D1);
5755       orc_program_append_2 (p, "addw", 2, ORC_VAR_T10, ORC_VAR_T10, ORC_VAR_T11,
5756           ORC_VAR_D1);
5757       orc_program_append_2 (p, "addw", 2, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T5,
5758           ORC_VAR_D1);
5759       orc_program_append_2 (p, "divluw", 2, ORC_VAR_T10, ORC_VAR_T10,
5760           ORC_VAR_T7, ORC_VAR_D1);
5761       orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1,
5762           ORC_VAR_D1);
5763       orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C4,
5764           ORC_VAR_D1);
5765       orc_program_append_2 (p, "convlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_D1,
5766           ORC_VAR_D1);
5767       orc_program_append_2 (p, "convwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
5768           ORC_VAR_D1);
5769       orc_program_append_2 (p, "splatbl", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_D1,
5770           ORC_VAR_D1);
5771       orc_program_append_2 (p, "convubw", 2, ORC_VAR_T8, ORC_VAR_T9, ORC_VAR_D1,
5772           ORC_VAR_D1);
5773       orc_program_append_2 (p, "addw", 2, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T5,
5774           ORC_VAR_D1);
5775       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T1, ORC_VAR_T10, ORC_VAR_D1,
5776           ORC_VAR_D1);
5777       orc_program_append_2 (p, "andl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C3,
5778           ORC_VAR_D1);
5779       orc_program_append_2 (p, "convwb", 2, ORC_VAR_T9, ORC_VAR_T8, ORC_VAR_D1,
5780           ORC_VAR_D1);
5781       orc_program_append_2 (p, "andl", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_C2,
5782           ORC_VAR_D1);
5783       orc_program_append_2 (p, "orl", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T9,
5784           ORC_VAR_D1);
5785       orc_program_append_2 (p, "storel", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
5786           ORC_VAR_D1);
5787 #endif
5788
5789       orc_program_compile (p);
5790       c = orc_program_take_code (p);
5791       orc_program_free (p);
5792     }
5793     p_inited = TRUE;
5794     orc_once_mutex_unlock ();
5795   }
5796   ex->arrays[ORC_VAR_A2] = c;
5797   ex->program = 0;
5798
5799   ex->n = n;
5800   ORC_EXECUTOR_M (ex) = m;
5801   ex->arrays[ORC_VAR_D1] = d1;
5802   ex->params[ORC_VAR_D1] = d1_stride;
5803   ex->arrays[ORC_VAR_S1] = (void *) s1;
5804   ex->params[ORC_VAR_S1] = s1_stride;
5805   ex->params[ORC_VAR_P1] = p1;
5806
5807   func = c->exec;
5808   func (ex);
5809 }
5810 #endif