Release 0.11.2
[platform/upstream/gstreamer.git] / ext / cog / gstcogorc-dist.c
1
2 /* autogenerated from gstcogorc.orc */
3
4 #ifdef HAVE_CONFIG_H
5 #include "config.h"
6 #endif
7 #include <glib.h>
8
9 #ifndef _ORC_INTEGER_TYPEDEFS_
10 #define _ORC_INTEGER_TYPEDEFS_
11 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
12 #include <stdint.h>
13 typedef int8_t orc_int8;
14 typedef int16_t orc_int16;
15 typedef int32_t orc_int32;
16 typedef int64_t orc_int64;
17 typedef uint8_t orc_uint8;
18 typedef uint16_t orc_uint16;
19 typedef uint32_t orc_uint32;
20 typedef uint64_t orc_uint64;
21 #define ORC_UINT64_C(x) UINT64_C(x)
22 #elif defined(_MSC_VER)
23 typedef signed __int8 orc_int8;
24 typedef signed __int16 orc_int16;
25 typedef signed __int32 orc_int32;
26 typedef signed __int64 orc_int64;
27 typedef unsigned __int8 orc_uint8;
28 typedef unsigned __int16 orc_uint16;
29 typedef unsigned __int32 orc_uint32;
30 typedef unsigned __int64 orc_uint64;
31 #define ORC_UINT64_C(x) (x##Ui64)
32 #define inline __inline
33 #else
34 #include <limits.h>
35 typedef signed char orc_int8;
36 typedef short orc_int16;
37 typedef int orc_int32;
38 typedef unsigned char orc_uint8;
39 typedef unsigned short orc_uint16;
40 typedef unsigned int orc_uint32;
41 #if INT_MAX == LONG_MAX
42 typedef long long orc_int64;
43 typedef unsigned long long orc_uint64;
44 #define ORC_UINT64_C(x) (x##ULL)
45 #else
46 typedef long orc_int64;
47 typedef unsigned long orc_uint64;
48 #define ORC_UINT64_C(x) (x##UL)
49 #endif
50 #endif
51 typedef union
52 {
53   orc_int16 i;
54   orc_int8 x2[2];
55 } orc_union16;
56 typedef union
57 {
58   orc_int32 i;
59   float f;
60   orc_int16 x2[2];
61   orc_int8 x4[4];
62 } orc_union32;
63 typedef union
64 {
65   orc_int64 i;
66   double f;
67   orc_int32 x2[2];
68   float x2f[2];
69   orc_int16 x4[4];
70 } orc_union64;
71 #endif
72 #ifndef ORC_RESTRICT
73 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
74 #define ORC_RESTRICT restrict
75 #elif defined(__GNUC__) && __GNUC__ >= 4
76 #define ORC_RESTRICT __restrict__
77 #else
78 #define ORC_RESTRICT
79 #endif
80 #endif
81
82 #ifndef DISABLE_ORC
83 #include <orc/orc.h>
84 #endif
85 void cogorc_memcpy_2d (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
86     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
87 void cogorc_downsample_horiz_cosite_1tap (orc_uint8 * ORC_RESTRICT d1,
88     const orc_uint16 * ORC_RESTRICT s1, int n);
89 void cogorc_downsample_horiz_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
90     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
91     int n);
92 void cogorc_downsample_420_jpeg (orc_uint8 * ORC_RESTRICT d1,
93     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
94     int n);
95 void cogorc_downsample_vert_halfsite_2tap (orc_uint8 * ORC_RESTRICT d1,
96     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
97     int n);
98 void cogorc_downsample_vert_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
99     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
100     const orc_uint8 * ORC_RESTRICT s3, int n);
101 void cogorc_downsample_vert_halfsite_4tap (orc_uint8 * ORC_RESTRICT d1,
102     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
103     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
104     int n);
105 void cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
106     const orc_uint8 * ORC_RESTRICT s1, int n);
107 void cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
108     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
109     int n);
110 void cogorc_upsample_vert_avgub (orc_uint8 * ORC_RESTRICT d1,
111     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
112     int n);
113 void orc_unpack_yuyv_y (orc_uint8 * ORC_RESTRICT d1,
114     const orc_uint16 * ORC_RESTRICT s1, int n);
115 void orc_unpack_yuyv_u (orc_uint8 * ORC_RESTRICT d1,
116     const orc_uint32 * ORC_RESTRICT s1, int n);
117 void orc_unpack_yuyv_v (orc_uint8 * ORC_RESTRICT d1,
118     const orc_uint32 * ORC_RESTRICT s1, int n);
119 void orc_pack_yuyv (orc_uint32 * ORC_RESTRICT d1,
120     const guint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
121     const orc_uint8 * ORC_RESTRICT s3, int n);
122 void orc_unpack_uyvy_y (orc_uint8 * ORC_RESTRICT d1,
123     const orc_uint16 * ORC_RESTRICT s1, int n);
124 void orc_unpack_uyvy_u (orc_uint8 * ORC_RESTRICT d1,
125     const orc_uint32 * ORC_RESTRICT s1, int n);
126 void orc_unpack_uyvy_v (orc_uint8 * ORC_RESTRICT d1,
127     const orc_uint32 * ORC_RESTRICT s1, int n);
128 void orc_pack_uyvy (orc_uint32 * ORC_RESTRICT d1,
129     const guint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
130     const orc_uint8 * ORC_RESTRICT s3, int n);
131 void orc_addc_convert_u8_s16 (orc_uint8 * ORC_RESTRICT d1,
132     const gint16 * ORC_RESTRICT s1, int n);
133 void orc_subc_convert_s16_u8 (gint16 * ORC_RESTRICT d1,
134     const orc_uint8 * ORC_RESTRICT s1, int n);
135 void orc_splat_u8_ns (orc_uint8 * ORC_RESTRICT d1, int p1, int n);
136 void orc_splat_s16_ns (gint16 * ORC_RESTRICT d1, int p1, int n);
137 void orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
138     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n);
139 void orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1,
140     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
141     int p2, int n);
142 void orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1,
143     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, int p1,
144     int p2, int n);
145 void orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
146     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
147     int p2, int p3, int p4, int n);
148 void orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1,
149     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
150     const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int n);
151 void orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
152     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
153     const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
154     int n);
155 void orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1,
156     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
157     const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
158     int n);
159 void orc_pack_123x (guint32 * ORC_RESTRICT d1,
160     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
161     const orc_uint8 * ORC_RESTRICT s3, int p1, int n);
162 void orc_pack_x123 (guint32 * ORC_RESTRICT d1,
163     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
164     const orc_uint8 * ORC_RESTRICT s3, int p1, int n);
165 void cogorc_combine2_u8 (orc_uint8 * ORC_RESTRICT d1,
166     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
167     int p1, int p2, int n);
168 void cogorc_combine4_u8 (orc_uint8 * ORC_RESTRICT d1,
169     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
170     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
171     int p1, int p2, int p3, int p4, int n);
172 void cogorc_unpack_axyz_0 (orc_uint8 * ORC_RESTRICT d1,
173     const orc_uint32 * ORC_RESTRICT s1, int n);
174 void cogorc_unpack_axyz_1 (orc_uint8 * ORC_RESTRICT d1,
175     const orc_uint32 * ORC_RESTRICT s1, int n);
176 void cogorc_unpack_axyz_2 (orc_uint8 * ORC_RESTRICT d1,
177     const orc_uint32 * ORC_RESTRICT s1, int n);
178 void cogorc_unpack_axyz_3 (orc_uint8 * ORC_RESTRICT d1,
179     const orc_uint32 * ORC_RESTRICT s1, int n);
180 void cogorc_resample_horiz_1tap (orc_uint8 * ORC_RESTRICT d1,
181     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n);
182 void cogorc_resample_horiz_2tap (orc_uint8 * ORC_RESTRICT d1,
183     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n);
184 void cogorc_convert_I420_UYVY (orc_uint32 * ORC_RESTRICT d1,
185     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
186     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
187     const orc_uint8 * ORC_RESTRICT s4, int n);
188 void cogorc_convert_I420_YUY2 (orc_uint32 * ORC_RESTRICT d1,
189     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
190     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
191     const orc_uint8 * ORC_RESTRICT s4, int n);
192 void cogorc_convert_I420_AYUV (orc_uint32 * ORC_RESTRICT d1,
193     orc_uint32 * ORC_RESTRICT d2, const orc_uint8 * ORC_RESTRICT s1,
194     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
195     const orc_uint8 * ORC_RESTRICT s4, int n);
196 void cogorc_convert_YUY2_I420 (orc_uint16 * ORC_RESTRICT d1,
197     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
198     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
199     const orc_uint32 * ORC_RESTRICT s2, int n);
200 void cogorc_convert_UYVY_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
201     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
202 void cogorc_planar_chroma_420_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
203     orc_uint8 * ORC_RESTRICT d2, int d2_stride,
204     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
205 void cogorc_planar_chroma_420_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
206     orc_uint16 * ORC_RESTRICT d2, int d2_stride,
207     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
208 void cogorc_planar_chroma_422_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
209     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m);
210 void cogorc_planar_chroma_444_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
211     const orc_uint16 * ORC_RESTRICT s1, int s1_stride, int n, int m);
212 void cogorc_planar_chroma_444_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
213     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
214     const orc_uint16 * ORC_RESTRICT s2, int s2_stride, int n, int m);
215 void cogorc_planar_chroma_422_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
216     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
217     const orc_uint8 * ORC_RESTRICT s2, int s2_stride, int n, int m);
218 void cogorc_convert_YUY2_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
219     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
220 void cogorc_convert_UYVY_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
221     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
222 void cogorc_convert_YUY2_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
223     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
224     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
225     int m);
226 void cogorc_convert_UYVY_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
227     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
228     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
229     int m);
230 void cogorc_convert_YUY2_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
231     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
232     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
233     int m);
234 void cogorc_convert_UYVY_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
235     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
236     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
237     int m);
238 void cogorc_convert_UYVY_I420 (orc_uint16 * ORC_RESTRICT d1,
239     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
240     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
241     const orc_uint32 * ORC_RESTRICT s2, int n);
242 void cogorc_convert_AYUV_I420 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
243     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
244     int d3_stride, orc_uint8 * ORC_RESTRICT d4, int d4_stride,
245     const orc_uint64 * ORC_RESTRICT s1, int s1_stride,
246     const orc_uint64 * ORC_RESTRICT s2, int s2_stride, int n, int m);
247 void cogorc_convert_AYUV_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
248     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m);
249 void cogorc_convert_AYUV_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
250     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m);
251 void cogorc_convert_AYUV_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
252     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
253     int d3_stride, const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n,
254     int m);
255 void cogorc_convert_AYUV_Y444 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
256     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
257     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
258     int m);
259 void cogorc_convert_Y42B_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
260     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
261     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
262     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
263 void cogorc_convert_Y42B_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
264     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
265     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
266     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
267 void cogorc_convert_Y42B_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
268     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
269     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
270     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
271 void cogorc_convert_Y444_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
272     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
273     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
274     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m);
275 void cogorc_convert_Y444_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
276     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
277     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
278     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m);
279 void cogorc_convert_Y444_AYUV (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
280     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
281     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
282     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m);
283 void cogorc_convert_AYUV_ARGB (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
284     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
285 void cogorc_convert_AYUV_BGRA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
286     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
287 void cogorc_convert_AYUV_ABGR (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
288     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
289 void cogorc_convert_AYUV_RGBA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
290     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m);
291 void cogorc_convert_I420_BGRA (orc_uint32 * ORC_RESTRICT d1,
292     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
293     const orc_uint8 * ORC_RESTRICT s3, int n);
294 void cogorc_convert_I420_BGRA_avg (orc_uint32 * ORC_RESTRICT d1,
295     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
296     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
297     const orc_uint8 * ORC_RESTRICT s5, int n);
298
299
300 /* begin Orc C target preamble */
301 #define ORC_CLAMP(x,a,b) ((x)<(a) ? (a) : ((x)>(b) ? (b) : (x)))
302 #define ORC_ABS(a) ((a)<0 ? -(a) : (a))
303 #define ORC_MIN(a,b) ((a)<(b) ? (a) : (b))
304 #define ORC_MAX(a,b) ((a)>(b) ? (a) : (b))
305 #define ORC_SB_MAX 127
306 #define ORC_SB_MIN (-1-ORC_SB_MAX)
307 #define ORC_UB_MAX 255
308 #define ORC_UB_MIN 0
309 #define ORC_SW_MAX 32767
310 #define ORC_SW_MIN (-1-ORC_SW_MAX)
311 #define ORC_UW_MAX 65535
312 #define ORC_UW_MIN 0
313 #define ORC_SL_MAX 2147483647
314 #define ORC_SL_MIN (-1-ORC_SL_MAX)
315 #define ORC_UL_MAX 4294967295U
316 #define ORC_UL_MIN 0
317 #define ORC_CLAMP_SB(x) ORC_CLAMP(x,ORC_SB_MIN,ORC_SB_MAX)
318 #define ORC_CLAMP_UB(x) ORC_CLAMP(x,ORC_UB_MIN,ORC_UB_MAX)
319 #define ORC_CLAMP_SW(x) ORC_CLAMP(x,ORC_SW_MIN,ORC_SW_MAX)
320 #define ORC_CLAMP_UW(x) ORC_CLAMP(x,ORC_UW_MIN,ORC_UW_MAX)
321 #define ORC_CLAMP_SL(x) ORC_CLAMP(x,ORC_SL_MIN,ORC_SL_MAX)
322 #define ORC_CLAMP_UL(x) ORC_CLAMP(x,ORC_UL_MIN,ORC_UL_MAX)
323 #define ORC_SWAP_W(x) ((((x)&0xff)<<8) | (((x)&0xff00)>>8))
324 #define ORC_SWAP_L(x) ((((x)&0xff)<<24) | (((x)&0xff00)<<8) | (((x)&0xff0000)>>8) | (((x)&0xff000000)>>24))
325 #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))
326 #define ORC_PTR_OFFSET(ptr,offset) ((void *)(((unsigned char *)(ptr)) + (offset)))
327 #define ORC_DENORMAL(x) ((x) & ((((x)&0x7f800000) == 0) ? 0xff800000 : 0xffffffff))
328 #define ORC_ISNAN(x) ((((x)&0x7f800000) == 0x7f800000) && (((x)&0x007fffff) != 0))
329 #define ORC_DENORMAL_DOUBLE(x) ((x) & ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == 0) ? ORC_UINT64_C(0xfff0000000000000) : ORC_UINT64_C(0xffffffffffffffff)))
330 #define ORC_ISNAN_DOUBLE(x) ((((x)&ORC_UINT64_C(0x7ff0000000000000)) == ORC_UINT64_C(0x7ff0000000000000)) && (((x)&ORC_UINT64_C(0x000fffffffffffff)) != 0))
331 #ifndef ORC_RESTRICT
332 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
333 #define ORC_RESTRICT restrict
334 #elif defined(__GNUC__) && __GNUC__ >= 4
335 #define ORC_RESTRICT __restrict__
336 #else
337 #define ORC_RESTRICT
338 #endif
339 #endif
340 /* end Orc C target preamble */
341
342
343
344 /* cogorc_memcpy_2d */
345 #ifdef DISABLE_ORC
346 void
347 cogorc_memcpy_2d (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
348     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
349 {
350   int i;
351   int j;
352   orc_int8 *ORC_RESTRICT ptr0;
353   const orc_int8 *ORC_RESTRICT ptr4;
354   orc_int8 var32;
355   orc_int8 var33;
356
357   for (j = 0; j < m; j++) {
358     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
359     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
360
361
362     for (i = 0; i < n; i++) {
363       /* 0: loadb */
364       var32 = ptr4[i];
365       /* 1: copyb */
366       var33 = var32;
367       /* 2: storeb */
368       ptr0[i] = var33;
369     }
370   }
371
372 }
373
374 #else
375 static void
376 _backup_cogorc_memcpy_2d (OrcExecutor * ORC_RESTRICT ex)
377 {
378   int i;
379   int j;
380   int n = ex->n;
381   int m = ex->params[ORC_VAR_A1];
382   orc_int8 *ORC_RESTRICT ptr0;
383   const orc_int8 *ORC_RESTRICT ptr4;
384   orc_int8 var32;
385   orc_int8 var33;
386
387   for (j = 0; j < m; j++) {
388     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
389     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
390
391
392     for (i = 0; i < n; i++) {
393       /* 0: loadb */
394       var32 = ptr4[i];
395       /* 1: copyb */
396       var33 = var32;
397       /* 2: storeb */
398       ptr0[i] = var33;
399     }
400   }
401
402 }
403
404 void
405 cogorc_memcpy_2d (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
406     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
407 {
408   OrcExecutor _ex, *ex = &_ex;
409   static volatile int p_inited = 0;
410   static OrcProgram *p = 0;
411   void (*func) (OrcExecutor *);
412
413   if (!p_inited) {
414     orc_once_mutex_lock ();
415     if (!p_inited) {
416
417       p = orc_program_new ();
418       orc_program_set_2d (p);
419       orc_program_set_name (p, "cogorc_memcpy_2d");
420       orc_program_set_backup_function (p, _backup_cogorc_memcpy_2d);
421       orc_program_add_destination (p, 1, "d1");
422       orc_program_add_source (p, 1, "s1");
423
424       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
425           ORC_VAR_D1);
426
427       orc_program_compile (p);
428     }
429     p_inited = TRUE;
430     orc_once_mutex_unlock ();
431   }
432   ex->program = p;
433
434   ex->n = n;
435   ORC_EXECUTOR_M (ex) = m;
436   ex->arrays[ORC_VAR_D1] = d1;
437   ex->params[ORC_VAR_D1] = d1_stride;
438   ex->arrays[ORC_VAR_S1] = (void *) s1;
439   ex->params[ORC_VAR_S1] = s1_stride;
440
441   func = p->code_exec;
442   func (ex);
443 }
444 #endif
445
446
447 /* cogorc_downsample_horiz_cosite_1tap */
448 #ifdef DISABLE_ORC
449 void
450 cogorc_downsample_horiz_cosite_1tap (orc_uint8 * ORC_RESTRICT d1,
451     const orc_uint16 * ORC_RESTRICT s1, int n)
452 {
453   int i;
454   orc_int8 *ORC_RESTRICT ptr0;
455   const orc_union16 *ORC_RESTRICT ptr4;
456   orc_union16 var32;
457   orc_int8 var33;
458
459   ptr0 = (orc_int8 *) d1;
460   ptr4 = (orc_union16 *) s1;
461
462
463   for (i = 0; i < n; i++) {
464     /* 0: loadw */
465     var32 = ptr4[i];
466     /* 1: select0wb */
467     {
468       orc_union16 _src;
469       _src.i = var32.i;
470       var33 = _src.x2[0];
471     }
472     /* 2: storeb */
473     ptr0[i] = var33;
474   }
475
476 }
477
478 #else
479 static void
480 _backup_cogorc_downsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
481 {
482   int i;
483   int n = ex->n;
484   orc_int8 *ORC_RESTRICT ptr0;
485   const orc_union16 *ORC_RESTRICT ptr4;
486   orc_union16 var32;
487   orc_int8 var33;
488
489   ptr0 = (orc_int8 *) ex->arrays[0];
490   ptr4 = (orc_union16 *) ex->arrays[4];
491
492
493   for (i = 0; i < n; i++) {
494     /* 0: loadw */
495     var32 = ptr4[i];
496     /* 1: select0wb */
497     {
498       orc_union16 _src;
499       _src.i = var32.i;
500       var33 = _src.x2[0];
501     }
502     /* 2: storeb */
503     ptr0[i] = var33;
504   }
505
506 }
507
508 void
509 cogorc_downsample_horiz_cosite_1tap (orc_uint8 * ORC_RESTRICT d1,
510     const orc_uint16 * ORC_RESTRICT s1, int n)
511 {
512   OrcExecutor _ex, *ex = &_ex;
513   static volatile int p_inited = 0;
514   static OrcProgram *p = 0;
515   void (*func) (OrcExecutor *);
516
517   if (!p_inited) {
518     orc_once_mutex_lock ();
519     if (!p_inited) {
520
521       p = orc_program_new ();
522       orc_program_set_name (p, "cogorc_downsample_horiz_cosite_1tap");
523       orc_program_set_backup_function (p,
524           _backup_cogorc_downsample_horiz_cosite_1tap);
525       orc_program_add_destination (p, 1, "d1");
526       orc_program_add_source (p, 2, "s1");
527
528       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
529           ORC_VAR_D1, ORC_VAR_D1);
530
531       orc_program_compile (p);
532     }
533     p_inited = TRUE;
534     orc_once_mutex_unlock ();
535   }
536   ex->program = p;
537
538   ex->n = n;
539   ex->arrays[ORC_VAR_D1] = d1;
540   ex->arrays[ORC_VAR_S1] = (void *) s1;
541
542   func = p->code_exec;
543   func (ex);
544 }
545 #endif
546
547
548 /* cogorc_downsample_horiz_cosite_3tap */
549 #ifdef DISABLE_ORC
550 void
551 cogorc_downsample_horiz_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
552     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
553     int n)
554 {
555   int i;
556   orc_int8 *ORC_RESTRICT ptr0;
557   const orc_union16 *ORC_RESTRICT ptr4;
558   const orc_union16 *ORC_RESTRICT ptr5;
559   orc_union16 var38;
560   orc_union16 var39;
561   orc_union16 var40;
562   orc_union16 var41;
563   orc_int8 var42;
564   orc_union16 var43;
565   orc_int8 var44;
566   orc_int8 var45;
567   orc_int8 var46;
568   orc_union16 var47;
569   orc_union16 var48;
570   orc_union16 var49;
571   orc_union16 var50;
572   orc_union16 var51;
573   orc_union16 var52;
574   orc_union16 var53;
575   orc_union16 var54;
576
577   ptr0 = (orc_int8 *) d1;
578   ptr4 = (orc_union16 *) s1;
579   ptr5 = (orc_union16 *) s2;
580
581   /* 9: loadpw */
582   var40.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
583   /* 13: loadpw */
584   var41.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
585
586   for (i = 0; i < n; i++) {
587     /* 0: loadw */
588     var38 = ptr4[i];
589     /* 1: copyw */
590     var43.i = var38.i;
591     /* 2: select0wb */
592     {
593       orc_union16 _src;
594       _src.i = var43.i;
595       var44 = _src.x2[0];
596     }
597     /* 3: select1wb */
598     {
599       orc_union16 _src;
600       _src.i = var43.i;
601       var45 = _src.x2[1];
602     }
603     /* 4: loadw */
604     var39 = ptr5[i];
605     /* 5: select0wb */
606     {
607       orc_union16 _src;
608       _src.i = var39.i;
609       var46 = _src.x2[0];
610     }
611     /* 6: convubw */
612     var47.i = (orc_uint8) var44;
613     /* 7: convubw */
614     var48.i = (orc_uint8) var45;
615     /* 8: convubw */
616     var49.i = (orc_uint8) var46;
617     /* 10: mullw */
618     var50.i = (var48.i * var40.i) & 0xffff;
619     /* 11: addw */
620     var51.i = var47.i + var49.i;
621     /* 12: addw */
622     var52.i = var51.i + var50.i;
623     /* 14: addw */
624     var53.i = var52.i + var41.i;
625     /* 15: shrsw */
626     var54.i = var53.i >> 2;
627     /* 16: convsuswb */
628     var42 = ORC_CLAMP_UB (var54.i);
629     /* 17: storeb */
630     ptr0[i] = var42;
631   }
632
633 }
634
635 #else
636 static void
637 _backup_cogorc_downsample_horiz_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
638 {
639   int i;
640   int n = ex->n;
641   orc_int8 *ORC_RESTRICT ptr0;
642   const orc_union16 *ORC_RESTRICT ptr4;
643   const orc_union16 *ORC_RESTRICT ptr5;
644   orc_union16 var38;
645   orc_union16 var39;
646   orc_union16 var40;
647   orc_union16 var41;
648   orc_int8 var42;
649   orc_union16 var43;
650   orc_int8 var44;
651   orc_int8 var45;
652   orc_int8 var46;
653   orc_union16 var47;
654   orc_union16 var48;
655   orc_union16 var49;
656   orc_union16 var50;
657   orc_union16 var51;
658   orc_union16 var52;
659   orc_union16 var53;
660   orc_union16 var54;
661
662   ptr0 = (orc_int8 *) ex->arrays[0];
663   ptr4 = (orc_union16 *) ex->arrays[4];
664   ptr5 = (orc_union16 *) ex->arrays[5];
665
666   /* 9: loadpw */
667   var40.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
668   /* 13: loadpw */
669   var41.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
670
671   for (i = 0; i < n; i++) {
672     /* 0: loadw */
673     var38 = ptr4[i];
674     /* 1: copyw */
675     var43.i = var38.i;
676     /* 2: select0wb */
677     {
678       orc_union16 _src;
679       _src.i = var43.i;
680       var44 = _src.x2[0];
681     }
682     /* 3: select1wb */
683     {
684       orc_union16 _src;
685       _src.i = var43.i;
686       var45 = _src.x2[1];
687     }
688     /* 4: loadw */
689     var39 = ptr5[i];
690     /* 5: select0wb */
691     {
692       orc_union16 _src;
693       _src.i = var39.i;
694       var46 = _src.x2[0];
695     }
696     /* 6: convubw */
697     var47.i = (orc_uint8) var44;
698     /* 7: convubw */
699     var48.i = (orc_uint8) var45;
700     /* 8: convubw */
701     var49.i = (orc_uint8) var46;
702     /* 10: mullw */
703     var50.i = (var48.i * var40.i) & 0xffff;
704     /* 11: addw */
705     var51.i = var47.i + var49.i;
706     /* 12: addw */
707     var52.i = var51.i + var50.i;
708     /* 14: addw */
709     var53.i = var52.i + var41.i;
710     /* 15: shrsw */
711     var54.i = var53.i >> 2;
712     /* 16: convsuswb */
713     var42 = ORC_CLAMP_UB (var54.i);
714     /* 17: storeb */
715     ptr0[i] = var42;
716   }
717
718 }
719
720 void
721 cogorc_downsample_horiz_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
722     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
723     int n)
724 {
725   OrcExecutor _ex, *ex = &_ex;
726   static volatile int p_inited = 0;
727   static OrcProgram *p = 0;
728   void (*func) (OrcExecutor *);
729
730   if (!p_inited) {
731     orc_once_mutex_lock ();
732     if (!p_inited) {
733
734       p = orc_program_new ();
735       orc_program_set_name (p, "cogorc_downsample_horiz_cosite_3tap");
736       orc_program_set_backup_function (p,
737           _backup_cogorc_downsample_horiz_cosite_3tap);
738       orc_program_add_destination (p, 1, "d1");
739       orc_program_add_source (p, 2, "s1");
740       orc_program_add_source (p, 2, "s2");
741       orc_program_add_constant (p, 4, 0x00000002, "c1");
742       orc_program_add_temporary (p, 1, "t1");
743       orc_program_add_temporary (p, 1, "t2");
744       orc_program_add_temporary (p, 1, "t3");
745       orc_program_add_temporary (p, 2, "t4");
746       orc_program_add_temporary (p, 2, "t5");
747       orc_program_add_temporary (p, 2, "t6");
748
749       orc_program_append_2 (p, "copyw", 0, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_D1,
750           ORC_VAR_D1);
751       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T4,
752           ORC_VAR_D1, ORC_VAR_D1);
753       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T4,
754           ORC_VAR_D1, ORC_VAR_D1);
755       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T3, ORC_VAR_S2,
756           ORC_VAR_D1, ORC_VAR_D1);
757       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_D1,
758           ORC_VAR_D1);
759       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_D1,
760           ORC_VAR_D1);
761       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
762           ORC_VAR_D1);
763       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_C1,
764           ORC_VAR_D1);
765       orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T6,
766           ORC_VAR_D1);
767       orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
768           ORC_VAR_D1);
769       orc_program_append_2 (p, "addw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
770           ORC_VAR_D1);
771       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C1,
772           ORC_VAR_D1);
773       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T4,
774           ORC_VAR_D1, ORC_VAR_D1);
775
776       orc_program_compile (p);
777     }
778     p_inited = TRUE;
779     orc_once_mutex_unlock ();
780   }
781   ex->program = p;
782
783   ex->n = n;
784   ex->arrays[ORC_VAR_D1] = d1;
785   ex->arrays[ORC_VAR_S1] = (void *) s1;
786   ex->arrays[ORC_VAR_S2] = (void *) s2;
787
788   func = p->code_exec;
789   func (ex);
790 }
791 #endif
792
793
794 /* cogorc_downsample_420_jpeg */
795 #ifdef DISABLE_ORC
796 void
797 cogorc_downsample_420_jpeg (orc_uint8 * ORC_RESTRICT d1,
798     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
799     int n)
800 {
801   int i;
802   orc_int8 *ORC_RESTRICT ptr0;
803   const orc_union16 *ORC_RESTRICT ptr4;
804   const orc_union16 *ORC_RESTRICT ptr5;
805   orc_union16 var37;
806   orc_union16 var38;
807   orc_int8 var39;
808   orc_union16 var40;
809   orc_int8 var41;
810   orc_int8 var42;
811   orc_int8 var43;
812   orc_union16 var44;
813   orc_int8 var45;
814   orc_int8 var46;
815   orc_int8 var47;
816
817   ptr0 = (orc_int8 *) d1;
818   ptr4 = (orc_union16 *) s1;
819   ptr5 = (orc_union16 *) s2;
820
821
822   for (i = 0; i < n; i++) {
823     /* 0: loadw */
824     var37 = ptr4[i];
825     /* 1: copyw */
826     var40.i = var37.i;
827     /* 2: select0wb */
828     {
829       orc_union16 _src;
830       _src.i = var40.i;
831       var41 = _src.x2[0];
832     }
833     /* 3: select1wb */
834     {
835       orc_union16 _src;
836       _src.i = var40.i;
837       var42 = _src.x2[1];
838     }
839     /* 4: avgub */
840     var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
841     /* 5: loadw */
842     var38 = ptr5[i];
843     /* 6: copyw */
844     var44.i = var38.i;
845     /* 7: select0wb */
846     {
847       orc_union16 _src;
848       _src.i = var44.i;
849       var45 = _src.x2[0];
850     }
851     /* 8: select1wb */
852     {
853       orc_union16 _src;
854       _src.i = var44.i;
855       var46 = _src.x2[1];
856     }
857     /* 9: avgub */
858     var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
859     /* 10: avgub */
860     var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
861     /* 11: storeb */
862     ptr0[i] = var39;
863   }
864
865 }
866
867 #else
868 static void
869 _backup_cogorc_downsample_420_jpeg (OrcExecutor * ORC_RESTRICT ex)
870 {
871   int i;
872   int n = ex->n;
873   orc_int8 *ORC_RESTRICT ptr0;
874   const orc_union16 *ORC_RESTRICT ptr4;
875   const orc_union16 *ORC_RESTRICT ptr5;
876   orc_union16 var37;
877   orc_union16 var38;
878   orc_int8 var39;
879   orc_union16 var40;
880   orc_int8 var41;
881   orc_int8 var42;
882   orc_int8 var43;
883   orc_union16 var44;
884   orc_int8 var45;
885   orc_int8 var46;
886   orc_int8 var47;
887
888   ptr0 = (orc_int8 *) ex->arrays[0];
889   ptr4 = (orc_union16 *) ex->arrays[4];
890   ptr5 = (orc_union16 *) ex->arrays[5];
891
892
893   for (i = 0; i < n; i++) {
894     /* 0: loadw */
895     var37 = ptr4[i];
896     /* 1: copyw */
897     var40.i = var37.i;
898     /* 2: select0wb */
899     {
900       orc_union16 _src;
901       _src.i = var40.i;
902       var41 = _src.x2[0];
903     }
904     /* 3: select1wb */
905     {
906       orc_union16 _src;
907       _src.i = var40.i;
908       var42 = _src.x2[1];
909     }
910     /* 4: avgub */
911     var43 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
912     /* 5: loadw */
913     var38 = ptr5[i];
914     /* 6: copyw */
915     var44.i = var38.i;
916     /* 7: select0wb */
917     {
918       orc_union16 _src;
919       _src.i = var44.i;
920       var45 = _src.x2[0];
921     }
922     /* 8: select1wb */
923     {
924       orc_union16 _src;
925       _src.i = var44.i;
926       var46 = _src.x2[1];
927     }
928     /* 9: avgub */
929     var47 = ((orc_uint8) var45 + (orc_uint8) var46 + 1) >> 1;
930     /* 10: avgub */
931     var39 = ((orc_uint8) var43 + (orc_uint8) var47 + 1) >> 1;
932     /* 11: storeb */
933     ptr0[i] = var39;
934   }
935
936 }
937
938 void
939 cogorc_downsample_420_jpeg (orc_uint8 * ORC_RESTRICT d1,
940     const orc_uint16 * ORC_RESTRICT s1, const orc_uint16 * ORC_RESTRICT s2,
941     int n)
942 {
943   OrcExecutor _ex, *ex = &_ex;
944   static volatile int p_inited = 0;
945   static OrcProgram *p = 0;
946   void (*func) (OrcExecutor *);
947
948   if (!p_inited) {
949     orc_once_mutex_lock ();
950     if (!p_inited) {
951
952       p = orc_program_new ();
953       orc_program_set_name (p, "cogorc_downsample_420_jpeg");
954       orc_program_set_backup_function (p, _backup_cogorc_downsample_420_jpeg);
955       orc_program_add_destination (p, 1, "d1");
956       orc_program_add_source (p, 2, "s1");
957       orc_program_add_source (p, 2, "s2");
958       orc_program_add_temporary (p, 2, "t1");
959       orc_program_add_temporary (p, 1, "t2");
960       orc_program_add_temporary (p, 1, "t3");
961       orc_program_add_temporary (p, 1, "t4");
962       orc_program_add_temporary (p, 1, "t5");
963
964       orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
965           ORC_VAR_D1);
966       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T2, ORC_VAR_T1,
967           ORC_VAR_D1, ORC_VAR_D1);
968       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T3, ORC_VAR_T1,
969           ORC_VAR_D1, ORC_VAR_D1);
970       orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
971           ORC_VAR_D1);
972       orc_program_append_2 (p, "copyw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_D1,
973           ORC_VAR_D1);
974       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T4, ORC_VAR_T1,
975           ORC_VAR_D1, ORC_VAR_D1);
976       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T5, ORC_VAR_T1,
977           ORC_VAR_D1, ORC_VAR_D1);
978       orc_program_append_2 (p, "avgub", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T5,
979           ORC_VAR_D1);
980       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T4,
981           ORC_VAR_D1);
982
983       orc_program_compile (p);
984     }
985     p_inited = TRUE;
986     orc_once_mutex_unlock ();
987   }
988   ex->program = p;
989
990   ex->n = n;
991   ex->arrays[ORC_VAR_D1] = d1;
992   ex->arrays[ORC_VAR_S1] = (void *) s1;
993   ex->arrays[ORC_VAR_S2] = (void *) s2;
994
995   func = p->code_exec;
996   func (ex);
997 }
998 #endif
999
1000
1001 /* cogorc_downsample_vert_halfsite_2tap */
1002 #ifdef DISABLE_ORC
1003 void
1004 cogorc_downsample_vert_halfsite_2tap (orc_uint8 * ORC_RESTRICT d1,
1005     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1006 {
1007   int i;
1008   orc_int8 *ORC_RESTRICT ptr0;
1009   const orc_int8 *ORC_RESTRICT ptr4;
1010   const orc_int8 *ORC_RESTRICT ptr5;
1011   orc_int8 var32;
1012   orc_int8 var33;
1013   orc_int8 var34;
1014
1015   ptr0 = (orc_int8 *) d1;
1016   ptr4 = (orc_int8 *) s1;
1017   ptr5 = (orc_int8 *) s2;
1018
1019
1020   for (i = 0; i < n; i++) {
1021     /* 0: loadb */
1022     var32 = ptr4[i];
1023     /* 1: loadb */
1024     var33 = ptr5[i];
1025     /* 2: avgub */
1026     var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
1027     /* 3: storeb */
1028     ptr0[i] = var34;
1029   }
1030
1031 }
1032
1033 #else
1034 static void
1035 _backup_cogorc_downsample_vert_halfsite_2tap (OrcExecutor * ORC_RESTRICT ex)
1036 {
1037   int i;
1038   int n = ex->n;
1039   orc_int8 *ORC_RESTRICT ptr0;
1040   const orc_int8 *ORC_RESTRICT ptr4;
1041   const orc_int8 *ORC_RESTRICT ptr5;
1042   orc_int8 var32;
1043   orc_int8 var33;
1044   orc_int8 var34;
1045
1046   ptr0 = (orc_int8 *) ex->arrays[0];
1047   ptr4 = (orc_int8 *) ex->arrays[4];
1048   ptr5 = (orc_int8 *) ex->arrays[5];
1049
1050
1051   for (i = 0; i < n; i++) {
1052     /* 0: loadb */
1053     var32 = ptr4[i];
1054     /* 1: loadb */
1055     var33 = ptr5[i];
1056     /* 2: avgub */
1057     var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
1058     /* 3: storeb */
1059     ptr0[i] = var34;
1060   }
1061
1062 }
1063
1064 void
1065 cogorc_downsample_vert_halfsite_2tap (orc_uint8 * ORC_RESTRICT d1,
1066     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1067 {
1068   OrcExecutor _ex, *ex = &_ex;
1069   static volatile int p_inited = 0;
1070   static OrcProgram *p = 0;
1071   void (*func) (OrcExecutor *);
1072
1073   if (!p_inited) {
1074     orc_once_mutex_lock ();
1075     if (!p_inited) {
1076
1077       p = orc_program_new ();
1078       orc_program_set_name (p, "cogorc_downsample_vert_halfsite_2tap");
1079       orc_program_set_backup_function (p,
1080           _backup_cogorc_downsample_vert_halfsite_2tap);
1081       orc_program_add_destination (p, 1, "d1");
1082       orc_program_add_source (p, 1, "s1");
1083       orc_program_add_source (p, 1, "s2");
1084
1085       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
1086           ORC_VAR_D1);
1087
1088       orc_program_compile (p);
1089     }
1090     p_inited = TRUE;
1091     orc_once_mutex_unlock ();
1092   }
1093   ex->program = p;
1094
1095   ex->n = n;
1096   ex->arrays[ORC_VAR_D1] = d1;
1097   ex->arrays[ORC_VAR_S1] = (void *) s1;
1098   ex->arrays[ORC_VAR_S2] = (void *) s2;
1099
1100   func = p->code_exec;
1101   func (ex);
1102 }
1103 #endif
1104
1105
1106 /* cogorc_downsample_vert_cosite_3tap */
1107 #ifdef DISABLE_ORC
1108 void
1109 cogorc_downsample_vert_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
1110     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
1111     const orc_uint8 * ORC_RESTRICT s3, int n)
1112 {
1113   int i;
1114   orc_int8 *ORC_RESTRICT ptr0;
1115   const orc_int8 *ORC_RESTRICT ptr4;
1116   const orc_int8 *ORC_RESTRICT ptr5;
1117   const orc_int8 *ORC_RESTRICT ptr6;
1118   orc_int8 var35;
1119   orc_int8 var36;
1120   orc_int8 var37;
1121   orc_union16 var38;
1122   orc_union16 var39;
1123   orc_int8 var40;
1124   orc_union16 var41;
1125   orc_union16 var42;
1126   orc_union16 var43;
1127   orc_union16 var44;
1128   orc_union16 var45;
1129   orc_union16 var46;
1130   orc_union16 var47;
1131   orc_union16 var48;
1132
1133   ptr0 = (orc_int8 *) d1;
1134   ptr4 = (orc_int8 *) s1;
1135   ptr5 = (orc_int8 *) s2;
1136   ptr6 = (orc_int8 *) s3;
1137
1138   /* 6: loadpw */
1139   var38.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
1140   /* 10: loadpw */
1141   var39.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
1142
1143   for (i = 0; i < n; i++) {
1144     /* 0: loadb */
1145     var35 = ptr4[i];
1146     /* 1: convubw */
1147     var41.i = (orc_uint8) var35;
1148     /* 2: loadb */
1149     var36 = ptr5[i];
1150     /* 3: convubw */
1151     var42.i = (orc_uint8) var36;
1152     /* 4: loadb */
1153     var37 = ptr6[i];
1154     /* 5: convubw */
1155     var43.i = (orc_uint8) var37;
1156     /* 7: mullw */
1157     var44.i = (var42.i * var38.i) & 0xffff;
1158     /* 8: addw */
1159     var45.i = var41.i + var43.i;
1160     /* 9: addw */
1161     var46.i = var45.i + var44.i;
1162     /* 11: addw */
1163     var47.i = var46.i + var39.i;
1164     /* 12: shrsw */
1165     var48.i = var47.i >> 2;
1166     /* 13: convsuswb */
1167     var40 = ORC_CLAMP_UB (var48.i);
1168     /* 14: storeb */
1169     ptr0[i] = var40;
1170   }
1171
1172 }
1173
1174 #else
1175 static void
1176 _backup_cogorc_downsample_vert_cosite_3tap (OrcExecutor * ORC_RESTRICT ex)
1177 {
1178   int i;
1179   int n = ex->n;
1180   orc_int8 *ORC_RESTRICT ptr0;
1181   const orc_int8 *ORC_RESTRICT ptr4;
1182   const orc_int8 *ORC_RESTRICT ptr5;
1183   const orc_int8 *ORC_RESTRICT ptr6;
1184   orc_int8 var35;
1185   orc_int8 var36;
1186   orc_int8 var37;
1187   orc_union16 var38;
1188   orc_union16 var39;
1189   orc_int8 var40;
1190   orc_union16 var41;
1191   orc_union16 var42;
1192   orc_union16 var43;
1193   orc_union16 var44;
1194   orc_union16 var45;
1195   orc_union16 var46;
1196   orc_union16 var47;
1197   orc_union16 var48;
1198
1199   ptr0 = (orc_int8 *) ex->arrays[0];
1200   ptr4 = (orc_int8 *) ex->arrays[4];
1201   ptr5 = (orc_int8 *) ex->arrays[5];
1202   ptr6 = (orc_int8 *) ex->arrays[6];
1203
1204   /* 6: loadpw */
1205   var38.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
1206   /* 10: loadpw */
1207   var39.i = (int) 0x00000002;   /* 2 or 9.88131e-324f */
1208
1209   for (i = 0; i < n; i++) {
1210     /* 0: loadb */
1211     var35 = ptr4[i];
1212     /* 1: convubw */
1213     var41.i = (orc_uint8) var35;
1214     /* 2: loadb */
1215     var36 = ptr5[i];
1216     /* 3: convubw */
1217     var42.i = (orc_uint8) var36;
1218     /* 4: loadb */
1219     var37 = ptr6[i];
1220     /* 5: convubw */
1221     var43.i = (orc_uint8) var37;
1222     /* 7: mullw */
1223     var44.i = (var42.i * var38.i) & 0xffff;
1224     /* 8: addw */
1225     var45.i = var41.i + var43.i;
1226     /* 9: addw */
1227     var46.i = var45.i + var44.i;
1228     /* 11: addw */
1229     var47.i = var46.i + var39.i;
1230     /* 12: shrsw */
1231     var48.i = var47.i >> 2;
1232     /* 13: convsuswb */
1233     var40 = ORC_CLAMP_UB (var48.i);
1234     /* 14: storeb */
1235     ptr0[i] = var40;
1236   }
1237
1238 }
1239
1240 void
1241 cogorc_downsample_vert_cosite_3tap (orc_uint8 * ORC_RESTRICT d1,
1242     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
1243     const orc_uint8 * ORC_RESTRICT s3, int n)
1244 {
1245   OrcExecutor _ex, *ex = &_ex;
1246   static volatile int p_inited = 0;
1247   static OrcProgram *p = 0;
1248   void (*func) (OrcExecutor *);
1249
1250   if (!p_inited) {
1251     orc_once_mutex_lock ();
1252     if (!p_inited) {
1253
1254       p = orc_program_new ();
1255       orc_program_set_name (p, "cogorc_downsample_vert_cosite_3tap");
1256       orc_program_set_backup_function (p,
1257           _backup_cogorc_downsample_vert_cosite_3tap);
1258       orc_program_add_destination (p, 1, "d1");
1259       orc_program_add_source (p, 1, "s1");
1260       orc_program_add_source (p, 1, "s2");
1261       orc_program_add_source (p, 1, "s3");
1262       orc_program_add_constant (p, 4, 0x00000002, "c1");
1263       orc_program_add_temporary (p, 2, "t1");
1264       orc_program_add_temporary (p, 2, "t2");
1265       orc_program_add_temporary (p, 2, "t3");
1266
1267       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
1268           ORC_VAR_D1);
1269       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
1270           ORC_VAR_D1);
1271       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
1272           ORC_VAR_D1);
1273       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1274           ORC_VAR_D1);
1275       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
1276           ORC_VAR_D1);
1277       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
1278           ORC_VAR_D1);
1279       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1280           ORC_VAR_D1);
1281       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
1282           ORC_VAR_D1);
1283       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
1284           ORC_VAR_D1, ORC_VAR_D1);
1285
1286       orc_program_compile (p);
1287     }
1288     p_inited = TRUE;
1289     orc_once_mutex_unlock ();
1290   }
1291   ex->program = p;
1292
1293   ex->n = n;
1294   ex->arrays[ORC_VAR_D1] = d1;
1295   ex->arrays[ORC_VAR_S1] = (void *) s1;
1296   ex->arrays[ORC_VAR_S2] = (void *) s2;
1297   ex->arrays[ORC_VAR_S3] = (void *) s3;
1298
1299   func = p->code_exec;
1300   func (ex);
1301 }
1302 #endif
1303
1304
1305 /* cogorc_downsample_vert_halfsite_4tap */
1306 #ifdef DISABLE_ORC
1307 void
1308 cogorc_downsample_vert_halfsite_4tap (orc_uint8 * ORC_RESTRICT d1,
1309     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
1310     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4, int n)
1311 {
1312   int i;
1313   orc_int8 *ORC_RESTRICT ptr0;
1314   const orc_int8 *ORC_RESTRICT ptr4;
1315   const orc_int8 *ORC_RESTRICT ptr5;
1316   const orc_int8 *ORC_RESTRICT ptr6;
1317   const orc_int8 *ORC_RESTRICT ptr7;
1318   orc_int8 var36;
1319   orc_int8 var37;
1320   orc_int8 var38;
1321   orc_int8 var39;
1322   orc_union16 var40;
1323   orc_union16 var41;
1324   orc_union16 var42;
1325   orc_int8 var43;
1326   orc_union16 var44;
1327   orc_union16 var45;
1328   orc_union16 var46;
1329   orc_union16 var47;
1330   orc_union16 var48;
1331   orc_union16 var49;
1332   orc_union16 var50;
1333   orc_union16 var51;
1334   orc_union16 var52;
1335   orc_union16 var53;
1336   orc_union16 var54;
1337
1338   ptr0 = (orc_int8 *) d1;
1339   ptr4 = (orc_int8 *) s1;
1340   ptr5 = (orc_int8 *) s2;
1341   ptr6 = (orc_int8 *) s3;
1342   ptr7 = (orc_int8 *) s4;
1343
1344   /* 9: loadpw */
1345   var40.i = (int) 0x0000001a;   /* 26 or 1.28457e-322f */
1346   /* 12: loadpw */
1347   var41.i = (int) 0x00000006;   /* 6 or 2.96439e-323f */
1348   /* 15: loadpw */
1349   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
1350
1351   for (i = 0; i < n; i++) {
1352     /* 0: loadb */
1353     var36 = ptr4[i];
1354     /* 1: convubw */
1355     var44.i = (orc_uint8) var36;
1356     /* 2: loadb */
1357     var37 = ptr5[i];
1358     /* 3: convubw */
1359     var45.i = (orc_uint8) var37;
1360     /* 4: loadb */
1361     var38 = ptr6[i];
1362     /* 5: convubw */
1363     var46.i = (orc_uint8) var38;
1364     /* 6: loadb */
1365     var39 = ptr7[i];
1366     /* 7: convubw */
1367     var47.i = (orc_uint8) var39;
1368     /* 8: addw */
1369     var48.i = var45.i + var46.i;
1370     /* 10: mullw */
1371     var49.i = (var48.i * var40.i) & 0xffff;
1372     /* 11: addw */
1373     var50.i = var44.i + var47.i;
1374     /* 13: mullw */
1375     var51.i = (var50.i * var41.i) & 0xffff;
1376     /* 14: addw */
1377     var52.i = var49.i + var51.i;
1378     /* 16: addw */
1379     var53.i = var52.i + var42.i;
1380     /* 17: shrsw */
1381     var54.i = var53.i >> 6;
1382     /* 18: convsuswb */
1383     var43 = ORC_CLAMP_UB (var54.i);
1384     /* 19: storeb */
1385     ptr0[i] = var43;
1386   }
1387
1388 }
1389
1390 #else
1391 static void
1392 _backup_cogorc_downsample_vert_halfsite_4tap (OrcExecutor * ORC_RESTRICT ex)
1393 {
1394   int i;
1395   int n = ex->n;
1396   orc_int8 *ORC_RESTRICT ptr0;
1397   const orc_int8 *ORC_RESTRICT ptr4;
1398   const orc_int8 *ORC_RESTRICT ptr5;
1399   const orc_int8 *ORC_RESTRICT ptr6;
1400   const orc_int8 *ORC_RESTRICT ptr7;
1401   orc_int8 var36;
1402   orc_int8 var37;
1403   orc_int8 var38;
1404   orc_int8 var39;
1405   orc_union16 var40;
1406   orc_union16 var41;
1407   orc_union16 var42;
1408   orc_int8 var43;
1409   orc_union16 var44;
1410   orc_union16 var45;
1411   orc_union16 var46;
1412   orc_union16 var47;
1413   orc_union16 var48;
1414   orc_union16 var49;
1415   orc_union16 var50;
1416   orc_union16 var51;
1417   orc_union16 var52;
1418   orc_union16 var53;
1419   orc_union16 var54;
1420
1421   ptr0 = (orc_int8 *) ex->arrays[0];
1422   ptr4 = (orc_int8 *) ex->arrays[4];
1423   ptr5 = (orc_int8 *) ex->arrays[5];
1424   ptr6 = (orc_int8 *) ex->arrays[6];
1425   ptr7 = (orc_int8 *) ex->arrays[7];
1426
1427   /* 9: loadpw */
1428   var40.i = (int) 0x0000001a;   /* 26 or 1.28457e-322f */
1429   /* 12: loadpw */
1430   var41.i = (int) 0x00000006;   /* 6 or 2.96439e-323f */
1431   /* 15: loadpw */
1432   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
1433
1434   for (i = 0; i < n; i++) {
1435     /* 0: loadb */
1436     var36 = ptr4[i];
1437     /* 1: convubw */
1438     var44.i = (orc_uint8) var36;
1439     /* 2: loadb */
1440     var37 = ptr5[i];
1441     /* 3: convubw */
1442     var45.i = (orc_uint8) var37;
1443     /* 4: loadb */
1444     var38 = ptr6[i];
1445     /* 5: convubw */
1446     var46.i = (orc_uint8) var38;
1447     /* 6: loadb */
1448     var39 = ptr7[i];
1449     /* 7: convubw */
1450     var47.i = (orc_uint8) var39;
1451     /* 8: addw */
1452     var48.i = var45.i + var46.i;
1453     /* 10: mullw */
1454     var49.i = (var48.i * var40.i) & 0xffff;
1455     /* 11: addw */
1456     var50.i = var44.i + var47.i;
1457     /* 13: mullw */
1458     var51.i = (var50.i * var41.i) & 0xffff;
1459     /* 14: addw */
1460     var52.i = var49.i + var51.i;
1461     /* 16: addw */
1462     var53.i = var52.i + var42.i;
1463     /* 17: shrsw */
1464     var54.i = var53.i >> 6;
1465     /* 18: convsuswb */
1466     var43 = ORC_CLAMP_UB (var54.i);
1467     /* 19: storeb */
1468     ptr0[i] = var43;
1469   }
1470
1471 }
1472
1473 void
1474 cogorc_downsample_vert_halfsite_4tap (orc_uint8 * ORC_RESTRICT d1,
1475     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
1476     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4, int n)
1477 {
1478   OrcExecutor _ex, *ex = &_ex;
1479   static volatile int p_inited = 0;
1480   static OrcProgram *p = 0;
1481   void (*func) (OrcExecutor *);
1482
1483   if (!p_inited) {
1484     orc_once_mutex_lock ();
1485     if (!p_inited) {
1486
1487       p = orc_program_new ();
1488       orc_program_set_name (p, "cogorc_downsample_vert_halfsite_4tap");
1489       orc_program_set_backup_function (p,
1490           _backup_cogorc_downsample_vert_halfsite_4tap);
1491       orc_program_add_destination (p, 1, "d1");
1492       orc_program_add_source (p, 1, "s1");
1493       orc_program_add_source (p, 1, "s2");
1494       orc_program_add_source (p, 1, "s3");
1495       orc_program_add_source (p, 1, "s4");
1496       orc_program_add_constant (p, 4, 0x0000001a, "c1");
1497       orc_program_add_constant (p, 4, 0x00000006, "c2");
1498       orc_program_add_constant (p, 4, 0x00000020, "c3");
1499       orc_program_add_temporary (p, 2, "t1");
1500       orc_program_add_temporary (p, 2, "t2");
1501       orc_program_add_temporary (p, 2, "t3");
1502       orc_program_add_temporary (p, 2, "t4");
1503
1504       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
1505           ORC_VAR_D1);
1506       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
1507           ORC_VAR_D1);
1508       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1,
1509           ORC_VAR_D1);
1510       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_D1,
1511           ORC_VAR_D1);
1512       orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
1513           ORC_VAR_D1);
1514       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
1515           ORC_VAR_D1);
1516       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T4,
1517           ORC_VAR_D1);
1518       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
1519           ORC_VAR_D1);
1520       orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T1,
1521           ORC_VAR_D1);
1522       orc_program_append_2 (p, "addw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C3,
1523           ORC_VAR_D1);
1524       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
1525           ORC_VAR_D1);
1526       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T2,
1527           ORC_VAR_D1, ORC_VAR_D1);
1528
1529       orc_program_compile (p);
1530     }
1531     p_inited = TRUE;
1532     orc_once_mutex_unlock ();
1533   }
1534   ex->program = p;
1535
1536   ex->n = n;
1537   ex->arrays[ORC_VAR_D1] = d1;
1538   ex->arrays[ORC_VAR_S1] = (void *) s1;
1539   ex->arrays[ORC_VAR_S2] = (void *) s2;
1540   ex->arrays[ORC_VAR_S3] = (void *) s3;
1541   ex->arrays[ORC_VAR_S4] = (void *) s4;
1542
1543   func = p->code_exec;
1544   func (ex);
1545 }
1546 #endif
1547
1548
1549 /* cogorc_upsample_horiz_cosite_1tap */
1550 #ifdef DISABLE_ORC
1551 void
1552 cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
1553     const orc_uint8 * ORC_RESTRICT s1, int n)
1554 {
1555   int i;
1556   orc_union16 *ORC_RESTRICT ptr0;
1557   const orc_int8 *ORC_RESTRICT ptr4;
1558   orc_int8 var33;
1559   orc_union16 var34;
1560   orc_int8 var35;
1561
1562   ptr0 = (orc_union16 *) d1;
1563   ptr4 = (orc_int8 *) s1;
1564
1565
1566   for (i = 0; i < n; i++) {
1567     /* 0: loadb */
1568     var33 = ptr4[i];
1569     /* 1: copyb */
1570     var35 = var33;
1571     /* 2: mergebw */
1572     {
1573       orc_union16 _dest;
1574       _dest.x2[0] = var35;
1575       _dest.x2[1] = var35;
1576       var34.i = _dest.i;
1577     }
1578     /* 3: storew */
1579     ptr0[i] = var34;
1580   }
1581
1582 }
1583
1584 #else
1585 static void
1586 _backup_cogorc_upsample_horiz_cosite_1tap (OrcExecutor * ORC_RESTRICT ex)
1587 {
1588   int i;
1589   int n = ex->n;
1590   orc_union16 *ORC_RESTRICT ptr0;
1591   const orc_int8 *ORC_RESTRICT ptr4;
1592   orc_int8 var33;
1593   orc_union16 var34;
1594   orc_int8 var35;
1595
1596   ptr0 = (orc_union16 *) ex->arrays[0];
1597   ptr4 = (orc_int8 *) ex->arrays[4];
1598
1599
1600   for (i = 0; i < n; i++) {
1601     /* 0: loadb */
1602     var33 = ptr4[i];
1603     /* 1: copyb */
1604     var35 = var33;
1605     /* 2: mergebw */
1606     {
1607       orc_union16 _dest;
1608       _dest.x2[0] = var35;
1609       _dest.x2[1] = var35;
1610       var34.i = _dest.i;
1611     }
1612     /* 3: storew */
1613     ptr0[i] = var34;
1614   }
1615
1616 }
1617
1618 void
1619 cogorc_upsample_horiz_cosite_1tap (guint8 * ORC_RESTRICT d1,
1620     const orc_uint8 * ORC_RESTRICT s1, int n)
1621 {
1622   OrcExecutor _ex, *ex = &_ex;
1623   static volatile int p_inited = 0;
1624   static OrcProgram *p = 0;
1625   void (*func) (OrcExecutor *);
1626
1627   if (!p_inited) {
1628     orc_once_mutex_lock ();
1629     if (!p_inited) {
1630
1631       p = orc_program_new ();
1632       orc_program_set_name (p, "cogorc_upsample_horiz_cosite_1tap");
1633       orc_program_set_backup_function (p,
1634           _backup_cogorc_upsample_horiz_cosite_1tap);
1635       orc_program_add_destination (p, 2, "d1");
1636       orc_program_add_source (p, 1, "s1");
1637       orc_program_add_temporary (p, 1, "t1");
1638
1639       orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
1640           ORC_VAR_D1);
1641       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T1,
1642           ORC_VAR_D1);
1643
1644       orc_program_compile (p);
1645     }
1646     p_inited = TRUE;
1647     orc_once_mutex_unlock ();
1648   }
1649   ex->program = p;
1650
1651   ex->n = n;
1652   ex->arrays[ORC_VAR_D1] = d1;
1653   ex->arrays[ORC_VAR_S1] = (void *) s1;
1654
1655   func = p->code_exec;
1656   func (ex);
1657 }
1658 #endif
1659
1660
1661 /* cogorc_upsample_horiz_cosite */
1662 #ifdef DISABLE_ORC
1663 void
1664 cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
1665     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1666 {
1667   int i;
1668   orc_union16 *ORC_RESTRICT ptr0;
1669   const orc_int8 *ORC_RESTRICT ptr4;
1670   const orc_int8 *ORC_RESTRICT ptr5;
1671   orc_int8 var34;
1672   orc_int8 var35;
1673   orc_union16 var36;
1674   orc_int8 var37;
1675   orc_int8 var38;
1676
1677   ptr0 = (orc_union16 *) d1;
1678   ptr4 = (orc_int8 *) s1;
1679   ptr5 = (orc_int8 *) s2;
1680
1681
1682   for (i = 0; i < n; i++) {
1683     /* 0: loadb */
1684     var34 = ptr4[i];
1685     /* 1: copyb */
1686     var37 = var34;
1687     /* 2: loadb */
1688     var35 = ptr5[i];
1689     /* 3: avgub */
1690     var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
1691     /* 4: mergebw */
1692     {
1693       orc_union16 _dest;
1694       _dest.x2[0] = var37;
1695       _dest.x2[1] = var38;
1696       var36.i = _dest.i;
1697     }
1698     /* 5: storew */
1699     ptr0[i] = var36;
1700   }
1701
1702 }
1703
1704 #else
1705 static void
1706 _backup_cogorc_upsample_horiz_cosite (OrcExecutor * ORC_RESTRICT ex)
1707 {
1708   int i;
1709   int n = ex->n;
1710   orc_union16 *ORC_RESTRICT ptr0;
1711   const orc_int8 *ORC_RESTRICT ptr4;
1712   const orc_int8 *ORC_RESTRICT ptr5;
1713   orc_int8 var34;
1714   orc_int8 var35;
1715   orc_union16 var36;
1716   orc_int8 var37;
1717   orc_int8 var38;
1718
1719   ptr0 = (orc_union16 *) ex->arrays[0];
1720   ptr4 = (orc_int8 *) ex->arrays[4];
1721   ptr5 = (orc_int8 *) ex->arrays[5];
1722
1723
1724   for (i = 0; i < n; i++) {
1725     /* 0: loadb */
1726     var34 = ptr4[i];
1727     /* 1: copyb */
1728     var37 = var34;
1729     /* 2: loadb */
1730     var35 = ptr5[i];
1731     /* 3: avgub */
1732     var38 = ((orc_uint8) var37 + (orc_uint8) var35 + 1) >> 1;
1733     /* 4: mergebw */
1734     {
1735       orc_union16 _dest;
1736       _dest.x2[0] = var37;
1737       _dest.x2[1] = var38;
1738       var36.i = _dest.i;
1739     }
1740     /* 5: storew */
1741     ptr0[i] = var36;
1742   }
1743
1744 }
1745
1746 void
1747 cogorc_upsample_horiz_cosite (guint8 * ORC_RESTRICT d1,
1748     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1749 {
1750   OrcExecutor _ex, *ex = &_ex;
1751   static volatile int p_inited = 0;
1752   static OrcProgram *p = 0;
1753   void (*func) (OrcExecutor *);
1754
1755   if (!p_inited) {
1756     orc_once_mutex_lock ();
1757     if (!p_inited) {
1758
1759       p = orc_program_new ();
1760       orc_program_set_name (p, "cogorc_upsample_horiz_cosite");
1761       orc_program_set_backup_function (p, _backup_cogorc_upsample_horiz_cosite);
1762       orc_program_add_destination (p, 2, "d1");
1763       orc_program_add_source (p, 1, "s1");
1764       orc_program_add_source (p, 1, "s2");
1765       orc_program_add_temporary (p, 1, "t1");
1766       orc_program_add_temporary (p, 1, "t2");
1767
1768       orc_program_append_2 (p, "copyb", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
1769           ORC_VAR_D1);
1770       orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S2,
1771           ORC_VAR_D1);
1772       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
1773           ORC_VAR_D1);
1774
1775       orc_program_compile (p);
1776     }
1777     p_inited = TRUE;
1778     orc_once_mutex_unlock ();
1779   }
1780   ex->program = p;
1781
1782   ex->n = n;
1783   ex->arrays[ORC_VAR_D1] = d1;
1784   ex->arrays[ORC_VAR_S1] = (void *) s1;
1785   ex->arrays[ORC_VAR_S2] = (void *) s2;
1786
1787   func = p->code_exec;
1788   func (ex);
1789 }
1790 #endif
1791
1792
1793 /* cogorc_upsample_vert_avgub */
1794 #ifdef DISABLE_ORC
1795 void
1796 cogorc_upsample_vert_avgub (orc_uint8 * ORC_RESTRICT d1,
1797     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1798 {
1799   int i;
1800   orc_int8 *ORC_RESTRICT ptr0;
1801   const orc_int8 *ORC_RESTRICT ptr4;
1802   const orc_int8 *ORC_RESTRICT ptr5;
1803   orc_int8 var32;
1804   orc_int8 var33;
1805   orc_int8 var34;
1806
1807   ptr0 = (orc_int8 *) d1;
1808   ptr4 = (orc_int8 *) s1;
1809   ptr5 = (orc_int8 *) s2;
1810
1811
1812   for (i = 0; i < n; i++) {
1813     /* 0: loadb */
1814     var32 = ptr4[i];
1815     /* 1: loadb */
1816     var33 = ptr5[i];
1817     /* 2: avgub */
1818     var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
1819     /* 3: storeb */
1820     ptr0[i] = var34;
1821   }
1822
1823 }
1824
1825 #else
1826 static void
1827 _backup_cogorc_upsample_vert_avgub (OrcExecutor * ORC_RESTRICT ex)
1828 {
1829   int i;
1830   int n = ex->n;
1831   orc_int8 *ORC_RESTRICT ptr0;
1832   const orc_int8 *ORC_RESTRICT ptr4;
1833   const orc_int8 *ORC_RESTRICT ptr5;
1834   orc_int8 var32;
1835   orc_int8 var33;
1836   orc_int8 var34;
1837
1838   ptr0 = (orc_int8 *) ex->arrays[0];
1839   ptr4 = (orc_int8 *) ex->arrays[4];
1840   ptr5 = (orc_int8 *) ex->arrays[5];
1841
1842
1843   for (i = 0; i < n; i++) {
1844     /* 0: loadb */
1845     var32 = ptr4[i];
1846     /* 1: loadb */
1847     var33 = ptr5[i];
1848     /* 2: avgub */
1849     var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
1850     /* 3: storeb */
1851     ptr0[i] = var34;
1852   }
1853
1854 }
1855
1856 void
1857 cogorc_upsample_vert_avgub (orc_uint8 * ORC_RESTRICT d1,
1858     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int n)
1859 {
1860   OrcExecutor _ex, *ex = &_ex;
1861   static volatile int p_inited = 0;
1862   static OrcProgram *p = 0;
1863   void (*func) (OrcExecutor *);
1864
1865   if (!p_inited) {
1866     orc_once_mutex_lock ();
1867     if (!p_inited) {
1868
1869       p = orc_program_new ();
1870       orc_program_set_name (p, "cogorc_upsample_vert_avgub");
1871       orc_program_set_backup_function (p, _backup_cogorc_upsample_vert_avgub);
1872       orc_program_add_destination (p, 1, "d1");
1873       orc_program_add_source (p, 1, "s1");
1874       orc_program_add_source (p, 1, "s2");
1875
1876       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
1877           ORC_VAR_D1);
1878
1879       orc_program_compile (p);
1880     }
1881     p_inited = TRUE;
1882     orc_once_mutex_unlock ();
1883   }
1884   ex->program = p;
1885
1886   ex->n = n;
1887   ex->arrays[ORC_VAR_D1] = d1;
1888   ex->arrays[ORC_VAR_S1] = (void *) s1;
1889   ex->arrays[ORC_VAR_S2] = (void *) s2;
1890
1891   func = p->code_exec;
1892   func (ex);
1893 }
1894 #endif
1895
1896
1897 /* orc_unpack_yuyv_y */
1898 #ifdef DISABLE_ORC
1899 void
1900 orc_unpack_yuyv_y (orc_uint8 * ORC_RESTRICT d1,
1901     const orc_uint16 * ORC_RESTRICT s1, int n)
1902 {
1903   int i;
1904   orc_int8 *ORC_RESTRICT ptr0;
1905   const orc_union16 *ORC_RESTRICT ptr4;
1906   orc_union16 var32;
1907   orc_int8 var33;
1908
1909   ptr0 = (orc_int8 *) d1;
1910   ptr4 = (orc_union16 *) s1;
1911
1912
1913   for (i = 0; i < n; i++) {
1914     /* 0: loadw */
1915     var32 = ptr4[i];
1916     /* 1: select0wb */
1917     {
1918       orc_union16 _src;
1919       _src.i = var32.i;
1920       var33 = _src.x2[0];
1921     }
1922     /* 2: storeb */
1923     ptr0[i] = var33;
1924   }
1925
1926 }
1927
1928 #else
1929 static void
1930 _backup_orc_unpack_yuyv_y (OrcExecutor * ORC_RESTRICT ex)
1931 {
1932   int i;
1933   int n = ex->n;
1934   orc_int8 *ORC_RESTRICT ptr0;
1935   const orc_union16 *ORC_RESTRICT ptr4;
1936   orc_union16 var32;
1937   orc_int8 var33;
1938
1939   ptr0 = (orc_int8 *) ex->arrays[0];
1940   ptr4 = (orc_union16 *) ex->arrays[4];
1941
1942
1943   for (i = 0; i < n; i++) {
1944     /* 0: loadw */
1945     var32 = ptr4[i];
1946     /* 1: select0wb */
1947     {
1948       orc_union16 _src;
1949       _src.i = var32.i;
1950       var33 = _src.x2[0];
1951     }
1952     /* 2: storeb */
1953     ptr0[i] = var33;
1954   }
1955
1956 }
1957
1958 void
1959 orc_unpack_yuyv_y (orc_uint8 * ORC_RESTRICT d1,
1960     const orc_uint16 * ORC_RESTRICT s1, int n)
1961 {
1962   OrcExecutor _ex, *ex = &_ex;
1963   static volatile int p_inited = 0;
1964   static OrcProgram *p = 0;
1965   void (*func) (OrcExecutor *);
1966
1967   if (!p_inited) {
1968     orc_once_mutex_lock ();
1969     if (!p_inited) {
1970
1971       p = orc_program_new ();
1972       orc_program_set_name (p, "orc_unpack_yuyv_y");
1973       orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_y);
1974       orc_program_add_destination (p, 1, "d1");
1975       orc_program_add_source (p, 2, "s1");
1976
1977       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_S1,
1978           ORC_VAR_D1, ORC_VAR_D1);
1979
1980       orc_program_compile (p);
1981     }
1982     p_inited = TRUE;
1983     orc_once_mutex_unlock ();
1984   }
1985   ex->program = p;
1986
1987   ex->n = n;
1988   ex->arrays[ORC_VAR_D1] = d1;
1989   ex->arrays[ORC_VAR_S1] = (void *) s1;
1990
1991   func = p->code_exec;
1992   func (ex);
1993 }
1994 #endif
1995
1996
1997 /* orc_unpack_yuyv_u */
1998 #ifdef DISABLE_ORC
1999 void
2000 orc_unpack_yuyv_u (orc_uint8 * ORC_RESTRICT d1,
2001     const orc_uint32 * ORC_RESTRICT s1, int n)
2002 {
2003   int i;
2004   orc_int8 *ORC_RESTRICT ptr0;
2005   const orc_union32 *ORC_RESTRICT ptr4;
2006   orc_union32 var33;
2007   orc_int8 var34;
2008   orc_union16 var35;
2009
2010   ptr0 = (orc_int8 *) d1;
2011   ptr4 = (orc_union32 *) s1;
2012
2013
2014   for (i = 0; i < n; i++) {
2015     /* 0: loadl */
2016     var33 = ptr4[i];
2017     /* 1: select0lw */
2018     {
2019       orc_union32 _src;
2020       _src.i = var33.i;
2021       var35.i = _src.x2[0];
2022     }
2023     /* 2: select1wb */
2024     {
2025       orc_union16 _src;
2026       _src.i = var35.i;
2027       var34 = _src.x2[1];
2028     }
2029     /* 3: storeb */
2030     ptr0[i] = var34;
2031   }
2032
2033 }
2034
2035 #else
2036 static void
2037 _backup_orc_unpack_yuyv_u (OrcExecutor * ORC_RESTRICT ex)
2038 {
2039   int i;
2040   int n = ex->n;
2041   orc_int8 *ORC_RESTRICT ptr0;
2042   const orc_union32 *ORC_RESTRICT ptr4;
2043   orc_union32 var33;
2044   orc_int8 var34;
2045   orc_union16 var35;
2046
2047   ptr0 = (orc_int8 *) ex->arrays[0];
2048   ptr4 = (orc_union32 *) ex->arrays[4];
2049
2050
2051   for (i = 0; i < n; i++) {
2052     /* 0: loadl */
2053     var33 = ptr4[i];
2054     /* 1: select0lw */
2055     {
2056       orc_union32 _src;
2057       _src.i = var33.i;
2058       var35.i = _src.x2[0];
2059     }
2060     /* 2: select1wb */
2061     {
2062       orc_union16 _src;
2063       _src.i = var35.i;
2064       var34 = _src.x2[1];
2065     }
2066     /* 3: storeb */
2067     ptr0[i] = var34;
2068   }
2069
2070 }
2071
2072 void
2073 orc_unpack_yuyv_u (orc_uint8 * ORC_RESTRICT d1,
2074     const orc_uint32 * ORC_RESTRICT s1, int n)
2075 {
2076   OrcExecutor _ex, *ex = &_ex;
2077   static volatile int p_inited = 0;
2078   static OrcProgram *p = 0;
2079   void (*func) (OrcExecutor *);
2080
2081   if (!p_inited) {
2082     orc_once_mutex_lock ();
2083     if (!p_inited) {
2084
2085       p = orc_program_new ();
2086       orc_program_set_name (p, "orc_unpack_yuyv_u");
2087       orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_u);
2088       orc_program_add_destination (p, 1, "d1");
2089       orc_program_add_source (p, 4, "s1");
2090       orc_program_add_temporary (p, 2, "t1");
2091
2092       orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
2093           ORC_VAR_D1, ORC_VAR_D1);
2094       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
2095           ORC_VAR_D1, ORC_VAR_D1);
2096
2097       orc_program_compile (p);
2098     }
2099     p_inited = TRUE;
2100     orc_once_mutex_unlock ();
2101   }
2102   ex->program = p;
2103
2104   ex->n = n;
2105   ex->arrays[ORC_VAR_D1] = d1;
2106   ex->arrays[ORC_VAR_S1] = (void *) s1;
2107
2108   func = p->code_exec;
2109   func (ex);
2110 }
2111 #endif
2112
2113
2114 /* orc_unpack_yuyv_v */
2115 #ifdef DISABLE_ORC
2116 void
2117 orc_unpack_yuyv_v (orc_uint8 * ORC_RESTRICT d1,
2118     const orc_uint32 * ORC_RESTRICT s1, int n)
2119 {
2120   int i;
2121   orc_int8 *ORC_RESTRICT ptr0;
2122   const orc_union32 *ORC_RESTRICT ptr4;
2123   orc_union32 var33;
2124   orc_int8 var34;
2125   orc_union16 var35;
2126
2127   ptr0 = (orc_int8 *) d1;
2128   ptr4 = (orc_union32 *) s1;
2129
2130
2131   for (i = 0; i < n; i++) {
2132     /* 0: loadl */
2133     var33 = ptr4[i];
2134     /* 1: select1lw */
2135     {
2136       orc_union32 _src;
2137       _src.i = var33.i;
2138       var35.i = _src.x2[1];
2139     }
2140     /* 2: select1wb */
2141     {
2142       orc_union16 _src;
2143       _src.i = var35.i;
2144       var34 = _src.x2[1];
2145     }
2146     /* 3: storeb */
2147     ptr0[i] = var34;
2148   }
2149
2150 }
2151
2152 #else
2153 static void
2154 _backup_orc_unpack_yuyv_v (OrcExecutor * ORC_RESTRICT ex)
2155 {
2156   int i;
2157   int n = ex->n;
2158   orc_int8 *ORC_RESTRICT ptr0;
2159   const orc_union32 *ORC_RESTRICT ptr4;
2160   orc_union32 var33;
2161   orc_int8 var34;
2162   orc_union16 var35;
2163
2164   ptr0 = (orc_int8 *) ex->arrays[0];
2165   ptr4 = (orc_union32 *) ex->arrays[4];
2166
2167
2168   for (i = 0; i < n; i++) {
2169     /* 0: loadl */
2170     var33 = ptr4[i];
2171     /* 1: select1lw */
2172     {
2173       orc_union32 _src;
2174       _src.i = var33.i;
2175       var35.i = _src.x2[1];
2176     }
2177     /* 2: select1wb */
2178     {
2179       orc_union16 _src;
2180       _src.i = var35.i;
2181       var34 = _src.x2[1];
2182     }
2183     /* 3: storeb */
2184     ptr0[i] = var34;
2185   }
2186
2187 }
2188
2189 void
2190 orc_unpack_yuyv_v (orc_uint8 * ORC_RESTRICT d1,
2191     const orc_uint32 * ORC_RESTRICT s1, int n)
2192 {
2193   OrcExecutor _ex, *ex = &_ex;
2194   static volatile int p_inited = 0;
2195   static OrcProgram *p = 0;
2196   void (*func) (OrcExecutor *);
2197
2198   if (!p_inited) {
2199     orc_once_mutex_lock ();
2200     if (!p_inited) {
2201
2202       p = orc_program_new ();
2203       orc_program_set_name (p, "orc_unpack_yuyv_v");
2204       orc_program_set_backup_function (p, _backup_orc_unpack_yuyv_v);
2205       orc_program_add_destination (p, 1, "d1");
2206       orc_program_add_source (p, 4, "s1");
2207       orc_program_add_temporary (p, 2, "t1");
2208
2209       orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
2210           ORC_VAR_D1, ORC_VAR_D1);
2211       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
2212           ORC_VAR_D1, ORC_VAR_D1);
2213
2214       orc_program_compile (p);
2215     }
2216     p_inited = TRUE;
2217     orc_once_mutex_unlock ();
2218   }
2219   ex->program = p;
2220
2221   ex->n = n;
2222   ex->arrays[ORC_VAR_D1] = d1;
2223   ex->arrays[ORC_VAR_S1] = (void *) s1;
2224
2225   func = p->code_exec;
2226   func (ex);
2227 }
2228 #endif
2229
2230
2231 /* orc_pack_yuyv */
2232 #ifdef DISABLE_ORC
2233 void
2234 orc_pack_yuyv (orc_uint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
2235     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3, int n)
2236 {
2237   int i;
2238   orc_union32 *ORC_RESTRICT ptr0;
2239   const orc_union16 *ORC_RESTRICT ptr4;
2240   const orc_int8 *ORC_RESTRICT ptr5;
2241   const orc_int8 *ORC_RESTRICT ptr6;
2242   orc_union16 var37;
2243   orc_int8 var38;
2244   orc_int8 var39;
2245   orc_union32 var40;
2246   orc_union16 var41;
2247   orc_int8 var42;
2248   orc_int8 var43;
2249   orc_union16 var44;
2250   orc_union16 var45;
2251
2252   ptr0 = (orc_union32 *) d1;
2253   ptr4 = (orc_union16 *) s1;
2254   ptr5 = (orc_int8 *) s2;
2255   ptr6 = (orc_int8 *) s3;
2256
2257
2258   for (i = 0; i < n; i++) {
2259     /* 0: loadw */
2260     var37 = ptr4[i];
2261     /* 1: copyw */
2262     var41.i = var37.i;
2263     /* 2: select0wb */
2264     {
2265       orc_union16 _src;
2266       _src.i = var41.i;
2267       var42 = _src.x2[0];
2268     }
2269     /* 3: select1wb */
2270     {
2271       orc_union16 _src;
2272       _src.i = var41.i;
2273       var43 = _src.x2[1];
2274     }
2275     /* 4: loadb */
2276     var38 = ptr5[i];
2277     /* 5: mergebw */
2278     {
2279       orc_union16 _dest;
2280       _dest.x2[0] = var42;
2281       _dest.x2[1] = var38;
2282       var44.i = _dest.i;
2283     }
2284     /* 6: loadb */
2285     var39 = ptr6[i];
2286     /* 7: mergebw */
2287     {
2288       orc_union16 _dest;
2289       _dest.x2[0] = var43;
2290       _dest.x2[1] = var39;
2291       var45.i = _dest.i;
2292     }
2293     /* 8: mergewl */
2294     {
2295       orc_union32 _dest;
2296       _dest.x2[0] = var44.i;
2297       _dest.x2[1] = var45.i;
2298       var40.i = _dest.i;
2299     }
2300     /* 9: storel */
2301     ptr0[i] = var40;
2302   }
2303
2304 }
2305
2306 #else
2307 static void
2308 _backup_orc_pack_yuyv (OrcExecutor * ORC_RESTRICT ex)
2309 {
2310   int i;
2311   int n = ex->n;
2312   orc_union32 *ORC_RESTRICT ptr0;
2313   const orc_union16 *ORC_RESTRICT ptr4;
2314   const orc_int8 *ORC_RESTRICT ptr5;
2315   const orc_int8 *ORC_RESTRICT ptr6;
2316   orc_union16 var37;
2317   orc_int8 var38;
2318   orc_int8 var39;
2319   orc_union32 var40;
2320   orc_union16 var41;
2321   orc_int8 var42;
2322   orc_int8 var43;
2323   orc_union16 var44;
2324   orc_union16 var45;
2325
2326   ptr0 = (orc_union32 *) ex->arrays[0];
2327   ptr4 = (orc_union16 *) ex->arrays[4];
2328   ptr5 = (orc_int8 *) ex->arrays[5];
2329   ptr6 = (orc_int8 *) ex->arrays[6];
2330
2331
2332   for (i = 0; i < n; i++) {
2333     /* 0: loadw */
2334     var37 = ptr4[i];
2335     /* 1: copyw */
2336     var41.i = var37.i;
2337     /* 2: select0wb */
2338     {
2339       orc_union16 _src;
2340       _src.i = var41.i;
2341       var42 = _src.x2[0];
2342     }
2343     /* 3: select1wb */
2344     {
2345       orc_union16 _src;
2346       _src.i = var41.i;
2347       var43 = _src.x2[1];
2348     }
2349     /* 4: loadb */
2350     var38 = ptr5[i];
2351     /* 5: mergebw */
2352     {
2353       orc_union16 _dest;
2354       _dest.x2[0] = var42;
2355       _dest.x2[1] = var38;
2356       var44.i = _dest.i;
2357     }
2358     /* 6: loadb */
2359     var39 = ptr6[i];
2360     /* 7: mergebw */
2361     {
2362       orc_union16 _dest;
2363       _dest.x2[0] = var43;
2364       _dest.x2[1] = var39;
2365       var45.i = _dest.i;
2366     }
2367     /* 8: mergewl */
2368     {
2369       orc_union32 _dest;
2370       _dest.x2[0] = var44.i;
2371       _dest.x2[1] = var45.i;
2372       var40.i = _dest.i;
2373     }
2374     /* 9: storel */
2375     ptr0[i] = var40;
2376   }
2377
2378 }
2379
2380 void
2381 orc_pack_yuyv (orc_uint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
2382     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3, int n)
2383 {
2384   OrcExecutor _ex, *ex = &_ex;
2385   static volatile int p_inited = 0;
2386   static OrcProgram *p = 0;
2387   void (*func) (OrcExecutor *);
2388
2389   if (!p_inited) {
2390     orc_once_mutex_lock ();
2391     if (!p_inited) {
2392
2393       p = orc_program_new ();
2394       orc_program_set_name (p, "orc_pack_yuyv");
2395       orc_program_set_backup_function (p, _backup_orc_pack_yuyv);
2396       orc_program_add_destination (p, 4, "d1");
2397       orc_program_add_source (p, 2, "s1");
2398       orc_program_add_source (p, 1, "s2");
2399       orc_program_add_source (p, 1, "s3");
2400       orc_program_add_temporary (p, 1, "t1");
2401       orc_program_add_temporary (p, 1, "t2");
2402       orc_program_add_temporary (p, 2, "t3");
2403       orc_program_add_temporary (p, 2, "t4");
2404       orc_program_add_temporary (p, 2, "t5");
2405
2406       orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
2407           ORC_VAR_D1);
2408       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
2409           ORC_VAR_D1, ORC_VAR_D1);
2410       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
2411           ORC_VAR_D1, ORC_VAR_D1);
2412       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
2413           ORC_VAR_D1);
2414       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_S3,
2415           ORC_VAR_D1);
2416       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
2417           ORC_VAR_D1);
2418
2419       orc_program_compile (p);
2420     }
2421     p_inited = TRUE;
2422     orc_once_mutex_unlock ();
2423   }
2424   ex->program = p;
2425
2426   ex->n = n;
2427   ex->arrays[ORC_VAR_D1] = d1;
2428   ex->arrays[ORC_VAR_S1] = (void *) s1;
2429   ex->arrays[ORC_VAR_S2] = (void *) s2;
2430   ex->arrays[ORC_VAR_S3] = (void *) s3;
2431
2432   func = p->code_exec;
2433   func (ex);
2434 }
2435 #endif
2436
2437
2438 /* orc_unpack_uyvy_y */
2439 #ifdef DISABLE_ORC
2440 void
2441 orc_unpack_uyvy_y (orc_uint8 * ORC_RESTRICT d1,
2442     const orc_uint16 * ORC_RESTRICT s1, int n)
2443 {
2444   int i;
2445   orc_int8 *ORC_RESTRICT ptr0;
2446   const orc_union16 *ORC_RESTRICT ptr4;
2447   orc_union16 var32;
2448   orc_int8 var33;
2449
2450   ptr0 = (orc_int8 *) d1;
2451   ptr4 = (orc_union16 *) s1;
2452
2453
2454   for (i = 0; i < n; i++) {
2455     /* 0: loadw */
2456     var32 = ptr4[i];
2457     /* 1: select1wb */
2458     {
2459       orc_union16 _src;
2460       _src.i = var32.i;
2461       var33 = _src.x2[1];
2462     }
2463     /* 2: storeb */
2464     ptr0[i] = var33;
2465   }
2466
2467 }
2468
2469 #else
2470 static void
2471 _backup_orc_unpack_uyvy_y (OrcExecutor * ORC_RESTRICT ex)
2472 {
2473   int i;
2474   int n = ex->n;
2475   orc_int8 *ORC_RESTRICT ptr0;
2476   const orc_union16 *ORC_RESTRICT ptr4;
2477   orc_union16 var32;
2478   orc_int8 var33;
2479
2480   ptr0 = (orc_int8 *) ex->arrays[0];
2481   ptr4 = (orc_union16 *) ex->arrays[4];
2482
2483
2484   for (i = 0; i < n; i++) {
2485     /* 0: loadw */
2486     var32 = ptr4[i];
2487     /* 1: select1wb */
2488     {
2489       orc_union16 _src;
2490       _src.i = var32.i;
2491       var33 = _src.x2[1];
2492     }
2493     /* 2: storeb */
2494     ptr0[i] = var33;
2495   }
2496
2497 }
2498
2499 void
2500 orc_unpack_uyvy_y (orc_uint8 * ORC_RESTRICT d1,
2501     const orc_uint16 * ORC_RESTRICT s1, int n)
2502 {
2503   OrcExecutor _ex, *ex = &_ex;
2504   static volatile int p_inited = 0;
2505   static OrcProgram *p = 0;
2506   void (*func) (OrcExecutor *);
2507
2508   if (!p_inited) {
2509     orc_once_mutex_lock ();
2510     if (!p_inited) {
2511
2512       p = orc_program_new ();
2513       orc_program_set_name (p, "orc_unpack_uyvy_y");
2514       orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_y);
2515       orc_program_add_destination (p, 1, "d1");
2516       orc_program_add_source (p, 2, "s1");
2517
2518       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_S1,
2519           ORC_VAR_D1, ORC_VAR_D1);
2520
2521       orc_program_compile (p);
2522     }
2523     p_inited = TRUE;
2524     orc_once_mutex_unlock ();
2525   }
2526   ex->program = p;
2527
2528   ex->n = n;
2529   ex->arrays[ORC_VAR_D1] = d1;
2530   ex->arrays[ORC_VAR_S1] = (void *) s1;
2531
2532   func = p->code_exec;
2533   func (ex);
2534 }
2535 #endif
2536
2537
2538 /* orc_unpack_uyvy_u */
2539 #ifdef DISABLE_ORC
2540 void
2541 orc_unpack_uyvy_u (orc_uint8 * ORC_RESTRICT d1,
2542     const orc_uint32 * ORC_RESTRICT s1, int n)
2543 {
2544   int i;
2545   orc_int8 *ORC_RESTRICT ptr0;
2546   const orc_union32 *ORC_RESTRICT ptr4;
2547   orc_union32 var33;
2548   orc_int8 var34;
2549   orc_union16 var35;
2550
2551   ptr0 = (orc_int8 *) d1;
2552   ptr4 = (orc_union32 *) s1;
2553
2554
2555   for (i = 0; i < n; i++) {
2556     /* 0: loadl */
2557     var33 = ptr4[i];
2558     /* 1: select0lw */
2559     {
2560       orc_union32 _src;
2561       _src.i = var33.i;
2562       var35.i = _src.x2[0];
2563     }
2564     /* 2: select0wb */
2565     {
2566       orc_union16 _src;
2567       _src.i = var35.i;
2568       var34 = _src.x2[0];
2569     }
2570     /* 3: storeb */
2571     ptr0[i] = var34;
2572   }
2573
2574 }
2575
2576 #else
2577 static void
2578 _backup_orc_unpack_uyvy_u (OrcExecutor * ORC_RESTRICT ex)
2579 {
2580   int i;
2581   int n = ex->n;
2582   orc_int8 *ORC_RESTRICT ptr0;
2583   const orc_union32 *ORC_RESTRICT ptr4;
2584   orc_union32 var33;
2585   orc_int8 var34;
2586   orc_union16 var35;
2587
2588   ptr0 = (orc_int8 *) ex->arrays[0];
2589   ptr4 = (orc_union32 *) ex->arrays[4];
2590
2591
2592   for (i = 0; i < n; i++) {
2593     /* 0: loadl */
2594     var33 = ptr4[i];
2595     /* 1: select0lw */
2596     {
2597       orc_union32 _src;
2598       _src.i = var33.i;
2599       var35.i = _src.x2[0];
2600     }
2601     /* 2: select0wb */
2602     {
2603       orc_union16 _src;
2604       _src.i = var35.i;
2605       var34 = _src.x2[0];
2606     }
2607     /* 3: storeb */
2608     ptr0[i] = var34;
2609   }
2610
2611 }
2612
2613 void
2614 orc_unpack_uyvy_u (orc_uint8 * ORC_RESTRICT d1,
2615     const orc_uint32 * ORC_RESTRICT s1, int n)
2616 {
2617   OrcExecutor _ex, *ex = &_ex;
2618   static volatile int p_inited = 0;
2619   static OrcProgram *p = 0;
2620   void (*func) (OrcExecutor *);
2621
2622   if (!p_inited) {
2623     orc_once_mutex_lock ();
2624     if (!p_inited) {
2625
2626       p = orc_program_new ();
2627       orc_program_set_name (p, "orc_unpack_uyvy_u");
2628       orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_u);
2629       orc_program_add_destination (p, 1, "d1");
2630       orc_program_add_source (p, 4, "s1");
2631       orc_program_add_temporary (p, 2, "t1");
2632
2633       orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
2634           ORC_VAR_D1, ORC_VAR_D1);
2635       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
2636           ORC_VAR_D1, ORC_VAR_D1);
2637
2638       orc_program_compile (p);
2639     }
2640     p_inited = TRUE;
2641     orc_once_mutex_unlock ();
2642   }
2643   ex->program = p;
2644
2645   ex->n = n;
2646   ex->arrays[ORC_VAR_D1] = d1;
2647   ex->arrays[ORC_VAR_S1] = (void *) s1;
2648
2649   func = p->code_exec;
2650   func (ex);
2651 }
2652 #endif
2653
2654
2655 /* orc_unpack_uyvy_v */
2656 #ifdef DISABLE_ORC
2657 void
2658 orc_unpack_uyvy_v (orc_uint8 * ORC_RESTRICT d1,
2659     const orc_uint32 * ORC_RESTRICT s1, int n)
2660 {
2661   int i;
2662   orc_int8 *ORC_RESTRICT ptr0;
2663   const orc_union32 *ORC_RESTRICT ptr4;
2664   orc_union32 var33;
2665   orc_int8 var34;
2666   orc_union16 var35;
2667
2668   ptr0 = (orc_int8 *) d1;
2669   ptr4 = (orc_union32 *) s1;
2670
2671
2672   for (i = 0; i < n; i++) {
2673     /* 0: loadl */
2674     var33 = ptr4[i];
2675     /* 1: select1lw */
2676     {
2677       orc_union32 _src;
2678       _src.i = var33.i;
2679       var35.i = _src.x2[1];
2680     }
2681     /* 2: select0wb */
2682     {
2683       orc_union16 _src;
2684       _src.i = var35.i;
2685       var34 = _src.x2[0];
2686     }
2687     /* 3: storeb */
2688     ptr0[i] = var34;
2689   }
2690
2691 }
2692
2693 #else
2694 static void
2695 _backup_orc_unpack_uyvy_v (OrcExecutor * ORC_RESTRICT ex)
2696 {
2697   int i;
2698   int n = ex->n;
2699   orc_int8 *ORC_RESTRICT ptr0;
2700   const orc_union32 *ORC_RESTRICT ptr4;
2701   orc_union32 var33;
2702   orc_int8 var34;
2703   orc_union16 var35;
2704
2705   ptr0 = (orc_int8 *) ex->arrays[0];
2706   ptr4 = (orc_union32 *) ex->arrays[4];
2707
2708
2709   for (i = 0; i < n; i++) {
2710     /* 0: loadl */
2711     var33 = ptr4[i];
2712     /* 1: select1lw */
2713     {
2714       orc_union32 _src;
2715       _src.i = var33.i;
2716       var35.i = _src.x2[1];
2717     }
2718     /* 2: select0wb */
2719     {
2720       orc_union16 _src;
2721       _src.i = var35.i;
2722       var34 = _src.x2[0];
2723     }
2724     /* 3: storeb */
2725     ptr0[i] = var34;
2726   }
2727
2728 }
2729
2730 void
2731 orc_unpack_uyvy_v (orc_uint8 * ORC_RESTRICT d1,
2732     const orc_uint32 * ORC_RESTRICT s1, int n)
2733 {
2734   OrcExecutor _ex, *ex = &_ex;
2735   static volatile int p_inited = 0;
2736   static OrcProgram *p = 0;
2737   void (*func) (OrcExecutor *);
2738
2739   if (!p_inited) {
2740     orc_once_mutex_lock ();
2741     if (!p_inited) {
2742
2743       p = orc_program_new ();
2744       orc_program_set_name (p, "orc_unpack_uyvy_v");
2745       orc_program_set_backup_function (p, _backup_orc_unpack_uyvy_v);
2746       orc_program_add_destination (p, 1, "d1");
2747       orc_program_add_source (p, 4, "s1");
2748       orc_program_add_temporary (p, 2, "t1");
2749
2750       orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
2751           ORC_VAR_D1, ORC_VAR_D1);
2752       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
2753           ORC_VAR_D1, ORC_VAR_D1);
2754
2755       orc_program_compile (p);
2756     }
2757     p_inited = TRUE;
2758     orc_once_mutex_unlock ();
2759   }
2760   ex->program = p;
2761
2762   ex->n = n;
2763   ex->arrays[ORC_VAR_D1] = d1;
2764   ex->arrays[ORC_VAR_S1] = (void *) s1;
2765
2766   func = p->code_exec;
2767   func (ex);
2768 }
2769 #endif
2770
2771
2772 /* orc_pack_uyvy */
2773 #ifdef DISABLE_ORC
2774 void
2775 orc_pack_uyvy (orc_uint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
2776     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3, int n)
2777 {
2778   int i;
2779   orc_union32 *ORC_RESTRICT ptr0;
2780   const orc_union16 *ORC_RESTRICT ptr4;
2781   const orc_int8 *ORC_RESTRICT ptr5;
2782   const orc_int8 *ORC_RESTRICT ptr6;
2783   orc_union16 var37;
2784   orc_int8 var38;
2785   orc_int8 var39;
2786   orc_union32 var40;
2787   orc_union16 var41;
2788   orc_int8 var42;
2789   orc_int8 var43;
2790   orc_union16 var44;
2791   orc_union16 var45;
2792
2793   ptr0 = (orc_union32 *) d1;
2794   ptr4 = (orc_union16 *) s1;
2795   ptr5 = (orc_int8 *) s2;
2796   ptr6 = (orc_int8 *) s3;
2797
2798
2799   for (i = 0; i < n; i++) {
2800     /* 0: loadw */
2801     var37 = ptr4[i];
2802     /* 1: copyw */
2803     var41.i = var37.i;
2804     /* 2: select0wb */
2805     {
2806       orc_union16 _src;
2807       _src.i = var41.i;
2808       var42 = _src.x2[0];
2809     }
2810     /* 3: select1wb */
2811     {
2812       orc_union16 _src;
2813       _src.i = var41.i;
2814       var43 = _src.x2[1];
2815     }
2816     /* 4: loadb */
2817     var38 = ptr5[i];
2818     /* 5: mergebw */
2819     {
2820       orc_union16 _dest;
2821       _dest.x2[0] = var38;
2822       _dest.x2[1] = var42;
2823       var44.i = _dest.i;
2824     }
2825     /* 6: loadb */
2826     var39 = ptr6[i];
2827     /* 7: mergebw */
2828     {
2829       orc_union16 _dest;
2830       _dest.x2[0] = var39;
2831       _dest.x2[1] = var43;
2832       var45.i = _dest.i;
2833     }
2834     /* 8: mergewl */
2835     {
2836       orc_union32 _dest;
2837       _dest.x2[0] = var44.i;
2838       _dest.x2[1] = var45.i;
2839       var40.i = _dest.i;
2840     }
2841     /* 9: storel */
2842     ptr0[i] = var40;
2843   }
2844
2845 }
2846
2847 #else
2848 static void
2849 _backup_orc_pack_uyvy (OrcExecutor * ORC_RESTRICT ex)
2850 {
2851   int i;
2852   int n = ex->n;
2853   orc_union32 *ORC_RESTRICT ptr0;
2854   const orc_union16 *ORC_RESTRICT ptr4;
2855   const orc_int8 *ORC_RESTRICT ptr5;
2856   const orc_int8 *ORC_RESTRICT ptr6;
2857   orc_union16 var37;
2858   orc_int8 var38;
2859   orc_int8 var39;
2860   orc_union32 var40;
2861   orc_union16 var41;
2862   orc_int8 var42;
2863   orc_int8 var43;
2864   orc_union16 var44;
2865   orc_union16 var45;
2866
2867   ptr0 = (orc_union32 *) ex->arrays[0];
2868   ptr4 = (orc_union16 *) ex->arrays[4];
2869   ptr5 = (orc_int8 *) ex->arrays[5];
2870   ptr6 = (orc_int8 *) ex->arrays[6];
2871
2872
2873   for (i = 0; i < n; i++) {
2874     /* 0: loadw */
2875     var37 = ptr4[i];
2876     /* 1: copyw */
2877     var41.i = var37.i;
2878     /* 2: select0wb */
2879     {
2880       orc_union16 _src;
2881       _src.i = var41.i;
2882       var42 = _src.x2[0];
2883     }
2884     /* 3: select1wb */
2885     {
2886       orc_union16 _src;
2887       _src.i = var41.i;
2888       var43 = _src.x2[1];
2889     }
2890     /* 4: loadb */
2891     var38 = ptr5[i];
2892     /* 5: mergebw */
2893     {
2894       orc_union16 _dest;
2895       _dest.x2[0] = var38;
2896       _dest.x2[1] = var42;
2897       var44.i = _dest.i;
2898     }
2899     /* 6: loadb */
2900     var39 = ptr6[i];
2901     /* 7: mergebw */
2902     {
2903       orc_union16 _dest;
2904       _dest.x2[0] = var39;
2905       _dest.x2[1] = var43;
2906       var45.i = _dest.i;
2907     }
2908     /* 8: mergewl */
2909     {
2910       orc_union32 _dest;
2911       _dest.x2[0] = var44.i;
2912       _dest.x2[1] = var45.i;
2913       var40.i = _dest.i;
2914     }
2915     /* 9: storel */
2916     ptr0[i] = var40;
2917   }
2918
2919 }
2920
2921 void
2922 orc_pack_uyvy (orc_uint32 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
2923     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3, int n)
2924 {
2925   OrcExecutor _ex, *ex = &_ex;
2926   static volatile int p_inited = 0;
2927   static OrcProgram *p = 0;
2928   void (*func) (OrcExecutor *);
2929
2930   if (!p_inited) {
2931     orc_once_mutex_lock ();
2932     if (!p_inited) {
2933
2934       p = orc_program_new ();
2935       orc_program_set_name (p, "orc_pack_uyvy");
2936       orc_program_set_backup_function (p, _backup_orc_pack_uyvy);
2937       orc_program_add_destination (p, 4, "d1");
2938       orc_program_add_source (p, 2, "s1");
2939       orc_program_add_source (p, 1, "s2");
2940       orc_program_add_source (p, 1, "s3");
2941       orc_program_add_temporary (p, 1, "t1");
2942       orc_program_add_temporary (p, 1, "t2");
2943       orc_program_add_temporary (p, 2, "t3");
2944       orc_program_add_temporary (p, 2, "t4");
2945       orc_program_add_temporary (p, 2, "t5");
2946
2947       orc_program_append_2 (p, "copyw", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_D1,
2948           ORC_VAR_D1);
2949       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T1, ORC_VAR_T5,
2950           ORC_VAR_D1, ORC_VAR_D1);
2951       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T5,
2952           ORC_VAR_D1, ORC_VAR_D1);
2953       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_T1,
2954           ORC_VAR_D1);
2955       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T4, ORC_VAR_S3, ORC_VAR_T2,
2956           ORC_VAR_D1);
2957       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
2958           ORC_VAR_D1);
2959
2960       orc_program_compile (p);
2961     }
2962     p_inited = TRUE;
2963     orc_once_mutex_unlock ();
2964   }
2965   ex->program = p;
2966
2967   ex->n = n;
2968   ex->arrays[ORC_VAR_D1] = d1;
2969   ex->arrays[ORC_VAR_S1] = (void *) s1;
2970   ex->arrays[ORC_VAR_S2] = (void *) s2;
2971   ex->arrays[ORC_VAR_S3] = (void *) s3;
2972
2973   func = p->code_exec;
2974   func (ex);
2975 }
2976 #endif
2977
2978
2979 /* orc_addc_convert_u8_s16 */
2980 #ifdef DISABLE_ORC
2981 void
2982 orc_addc_convert_u8_s16 (orc_uint8 * ORC_RESTRICT d1,
2983     const gint16 * ORC_RESTRICT s1, int n)
2984 {
2985   int i;
2986   orc_int8 *ORC_RESTRICT ptr0;
2987   const orc_union16 *ORC_RESTRICT ptr4;
2988   orc_union16 var33;
2989   orc_union16 var34;
2990   orc_int8 var35;
2991   orc_union16 var36;
2992
2993   ptr0 = (orc_int8 *) d1;
2994   ptr4 = (orc_union16 *) s1;
2995
2996   /* 1: loadpw */
2997   var34.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
2998
2999   for (i = 0; i < n; i++) {
3000     /* 0: loadw */
3001     var33 = ptr4[i];
3002     /* 2: addw */
3003     var36.i = var33.i + var34.i;
3004     /* 3: convsuswb */
3005     var35 = ORC_CLAMP_UB (var36.i);
3006     /* 4: storeb */
3007     ptr0[i] = var35;
3008   }
3009
3010 }
3011
3012 #else
3013 static void
3014 _backup_orc_addc_convert_u8_s16 (OrcExecutor * ORC_RESTRICT ex)
3015 {
3016   int i;
3017   int n = ex->n;
3018   orc_int8 *ORC_RESTRICT ptr0;
3019   const orc_union16 *ORC_RESTRICT ptr4;
3020   orc_union16 var33;
3021   orc_union16 var34;
3022   orc_int8 var35;
3023   orc_union16 var36;
3024
3025   ptr0 = (orc_int8 *) ex->arrays[0];
3026   ptr4 = (orc_union16 *) ex->arrays[4];
3027
3028   /* 1: loadpw */
3029   var34.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3030
3031   for (i = 0; i < n; i++) {
3032     /* 0: loadw */
3033     var33 = ptr4[i];
3034     /* 2: addw */
3035     var36.i = var33.i + var34.i;
3036     /* 3: convsuswb */
3037     var35 = ORC_CLAMP_UB (var36.i);
3038     /* 4: storeb */
3039     ptr0[i] = var35;
3040   }
3041
3042 }
3043
3044 void
3045 orc_addc_convert_u8_s16 (orc_uint8 * ORC_RESTRICT d1,
3046     const gint16 * ORC_RESTRICT s1, int n)
3047 {
3048   OrcExecutor _ex, *ex = &_ex;
3049   static volatile int p_inited = 0;
3050   static OrcProgram *p = 0;
3051   void (*func) (OrcExecutor *);
3052
3053   if (!p_inited) {
3054     orc_once_mutex_lock ();
3055     if (!p_inited) {
3056
3057       p = orc_program_new ();
3058       orc_program_set_name (p, "orc_addc_convert_u8_s16");
3059       orc_program_set_backup_function (p, _backup_orc_addc_convert_u8_s16);
3060       orc_program_add_destination (p, 1, "d1");
3061       orc_program_add_source (p, 2, "s1");
3062       orc_program_add_constant (p, 4, 0x00000080, "c1");
3063       orc_program_add_temporary (p, 2, "t1");
3064
3065       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1,
3066           ORC_VAR_D1);
3067       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
3068           ORC_VAR_D1, ORC_VAR_D1);
3069
3070       orc_program_compile (p);
3071     }
3072     p_inited = TRUE;
3073     orc_once_mutex_unlock ();
3074   }
3075   ex->program = p;
3076
3077   ex->n = n;
3078   ex->arrays[ORC_VAR_D1] = d1;
3079   ex->arrays[ORC_VAR_S1] = (void *) s1;
3080
3081   func = p->code_exec;
3082   func (ex);
3083 }
3084 #endif
3085
3086
3087 /* orc_subc_convert_s16_u8 */
3088 #ifdef DISABLE_ORC
3089 void
3090 orc_subc_convert_s16_u8 (gint16 * ORC_RESTRICT d1,
3091     const orc_uint8 * ORC_RESTRICT s1, int n)
3092 {
3093   int i;
3094   orc_union16 *ORC_RESTRICT ptr0;
3095   const orc_int8 *ORC_RESTRICT ptr4;
3096   orc_int8 var33;
3097   orc_union16 var34;
3098   orc_union16 var35;
3099   orc_union16 var36;
3100
3101   ptr0 = (orc_union16 *) d1;
3102   ptr4 = (orc_int8 *) s1;
3103
3104   /* 2: loadpw */
3105   var34.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3106
3107   for (i = 0; i < n; i++) {
3108     /* 0: loadb */
3109     var33 = ptr4[i];
3110     /* 1: convubw */
3111     var36.i = (orc_uint8) var33;
3112     /* 3: subw */
3113     var35.i = var36.i - var34.i;
3114     /* 4: storew */
3115     ptr0[i] = var35;
3116   }
3117
3118 }
3119
3120 #else
3121 static void
3122 _backup_orc_subc_convert_s16_u8 (OrcExecutor * ORC_RESTRICT ex)
3123 {
3124   int i;
3125   int n = ex->n;
3126   orc_union16 *ORC_RESTRICT ptr0;
3127   const orc_int8 *ORC_RESTRICT ptr4;
3128   orc_int8 var33;
3129   orc_union16 var34;
3130   orc_union16 var35;
3131   orc_union16 var36;
3132
3133   ptr0 = (orc_union16 *) ex->arrays[0];
3134   ptr4 = (orc_int8 *) ex->arrays[4];
3135
3136   /* 2: loadpw */
3137   var34.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3138
3139   for (i = 0; i < n; i++) {
3140     /* 0: loadb */
3141     var33 = ptr4[i];
3142     /* 1: convubw */
3143     var36.i = (orc_uint8) var33;
3144     /* 3: subw */
3145     var35.i = var36.i - var34.i;
3146     /* 4: storew */
3147     ptr0[i] = var35;
3148   }
3149
3150 }
3151
3152 void
3153 orc_subc_convert_s16_u8 (gint16 * ORC_RESTRICT d1,
3154     const orc_uint8 * ORC_RESTRICT s1, int n)
3155 {
3156   OrcExecutor _ex, *ex = &_ex;
3157   static volatile int p_inited = 0;
3158   static OrcProgram *p = 0;
3159   void (*func) (OrcExecutor *);
3160
3161   if (!p_inited) {
3162     orc_once_mutex_lock ();
3163     if (!p_inited) {
3164
3165       p = orc_program_new ();
3166       orc_program_set_name (p, "orc_subc_convert_s16_u8");
3167       orc_program_set_backup_function (p, _backup_orc_subc_convert_s16_u8);
3168       orc_program_add_destination (p, 2, "d1");
3169       orc_program_add_source (p, 1, "s1");
3170       orc_program_add_constant (p, 4, 0x00000080, "c1");
3171       orc_program_add_temporary (p, 2, "t1");
3172
3173       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3174           ORC_VAR_D1);
3175       orc_program_append_2 (p, "subw", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_C1,
3176           ORC_VAR_D1);
3177
3178       orc_program_compile (p);
3179     }
3180     p_inited = TRUE;
3181     orc_once_mutex_unlock ();
3182   }
3183   ex->program = p;
3184
3185   ex->n = n;
3186   ex->arrays[ORC_VAR_D1] = d1;
3187   ex->arrays[ORC_VAR_S1] = (void *) s1;
3188
3189   func = p->code_exec;
3190   func (ex);
3191 }
3192 #endif
3193
3194
3195 /* orc_splat_u8_ns */
3196 #ifdef DISABLE_ORC
3197 void
3198 orc_splat_u8_ns (orc_uint8 * ORC_RESTRICT d1, int p1, int n)
3199 {
3200   int i;
3201   orc_int8 *ORC_RESTRICT ptr0;
3202   orc_int8 var32;
3203   orc_int8 var33;
3204
3205   ptr0 = (orc_int8 *) d1;
3206
3207   /* 0: loadpb */
3208   var32 = p1;
3209
3210   for (i = 0; i < n; i++) {
3211     /* 1: copyb */
3212     var33 = var32;
3213     /* 2: storeb */
3214     ptr0[i] = var33;
3215   }
3216
3217 }
3218
3219 #else
3220 static void
3221 _backup_orc_splat_u8_ns (OrcExecutor * ORC_RESTRICT ex)
3222 {
3223   int i;
3224   int n = ex->n;
3225   orc_int8 *ORC_RESTRICT ptr0;
3226   orc_int8 var32;
3227   orc_int8 var33;
3228
3229   ptr0 = (orc_int8 *) ex->arrays[0];
3230
3231   /* 0: loadpb */
3232   var32 = ex->params[24];
3233
3234   for (i = 0; i < n; i++) {
3235     /* 1: copyb */
3236     var33 = var32;
3237     /* 2: storeb */
3238     ptr0[i] = var33;
3239   }
3240
3241 }
3242
3243 void
3244 orc_splat_u8_ns (orc_uint8 * ORC_RESTRICT d1, int p1, int n)
3245 {
3246   OrcExecutor _ex, *ex = &_ex;
3247   static volatile int p_inited = 0;
3248   static OrcProgram *p = 0;
3249   void (*func) (OrcExecutor *);
3250
3251   if (!p_inited) {
3252     orc_once_mutex_lock ();
3253     if (!p_inited) {
3254
3255       p = orc_program_new ();
3256       orc_program_set_name (p, "orc_splat_u8_ns");
3257       orc_program_set_backup_function (p, _backup_orc_splat_u8_ns);
3258       orc_program_add_destination (p, 1, "d1");
3259       orc_program_add_parameter (p, 1, "p1");
3260
3261       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
3262           ORC_VAR_D1);
3263
3264       orc_program_compile (p);
3265     }
3266     p_inited = TRUE;
3267     orc_once_mutex_unlock ();
3268   }
3269   ex->program = p;
3270
3271   ex->n = n;
3272   ex->arrays[ORC_VAR_D1] = d1;
3273   ex->params[ORC_VAR_P1] = p1;
3274
3275   func = p->code_exec;
3276   func (ex);
3277 }
3278 #endif
3279
3280
3281 /* orc_splat_s16_ns */
3282 #ifdef DISABLE_ORC
3283 void
3284 orc_splat_s16_ns (gint16 * ORC_RESTRICT d1, int p1, int n)
3285 {
3286   int i;
3287   orc_union16 *ORC_RESTRICT ptr0;
3288   orc_union16 var32;
3289   orc_union16 var33;
3290
3291   ptr0 = (orc_union16 *) d1;
3292
3293   /* 0: loadpw */
3294   var32.i = p1;
3295
3296   for (i = 0; i < n; i++) {
3297     /* 1: copyw */
3298     var33.i = var32.i;
3299     /* 2: storew */
3300     ptr0[i] = var33;
3301   }
3302
3303 }
3304
3305 #else
3306 static void
3307 _backup_orc_splat_s16_ns (OrcExecutor * ORC_RESTRICT ex)
3308 {
3309   int i;
3310   int n = ex->n;
3311   orc_union16 *ORC_RESTRICT ptr0;
3312   orc_union16 var32;
3313   orc_union16 var33;
3314
3315   ptr0 = (orc_union16 *) ex->arrays[0];
3316
3317   /* 0: loadpw */
3318   var32.i = ex->params[24];
3319
3320   for (i = 0; i < n; i++) {
3321     /* 1: copyw */
3322     var33.i = var32.i;
3323     /* 2: storew */
3324     ptr0[i] = var33;
3325   }
3326
3327 }
3328
3329 void
3330 orc_splat_s16_ns (gint16 * ORC_RESTRICT d1, int p1, int n)
3331 {
3332   OrcExecutor _ex, *ex = &_ex;
3333   static volatile int p_inited = 0;
3334   static OrcProgram *p = 0;
3335   void (*func) (OrcExecutor *);
3336
3337   if (!p_inited) {
3338     orc_once_mutex_lock ();
3339     if (!p_inited) {
3340
3341       p = orc_program_new ();
3342       orc_program_set_name (p, "orc_splat_s16_ns");
3343       orc_program_set_backup_function (p, _backup_orc_splat_s16_ns);
3344       orc_program_add_destination (p, 2, "d1");
3345       orc_program_add_parameter (p, 2, "p1");
3346
3347       orc_program_append_2 (p, "copyw", 0, ORC_VAR_D1, ORC_VAR_P1, ORC_VAR_D1,
3348           ORC_VAR_D1);
3349
3350       orc_program_compile (p);
3351     }
3352     p_inited = TRUE;
3353     orc_once_mutex_unlock ();
3354   }
3355   ex->program = p;
3356
3357   ex->n = n;
3358   ex->arrays[ORC_VAR_D1] = d1;
3359   ex->params[ORC_VAR_P1] = p1;
3360
3361   func = p->code_exec;
3362   func (ex);
3363 }
3364 #endif
3365
3366
3367 /* orc_matrix2_u8 */
3368 #ifdef DISABLE_ORC
3369 void
3370 orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3371     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
3372 {
3373   int i;
3374   orc_int8 *ORC_RESTRICT ptr0;
3375   const orc_int8 *ORC_RESTRICT ptr4;
3376   const orc_int8 *ORC_RESTRICT ptr5;
3377   orc_int8 var34;
3378   orc_union16 var35;
3379   orc_int8 var36;
3380   orc_union16 var37;
3381   orc_union16 var38;
3382   orc_int8 var39;
3383   orc_union16 var40;
3384   orc_union16 var41;
3385   orc_union16 var42;
3386   orc_union16 var43;
3387   orc_union16 var44;
3388   orc_union16 var45;
3389   orc_union16 var46;
3390
3391   ptr0 = (orc_int8 *) d1;
3392   ptr4 = (orc_int8 *) s1;
3393   ptr5 = (orc_int8 *) s2;
3394
3395   /* 2: loadpw */
3396   var35.i = p1;
3397   /* 6: loadpw */
3398   var37.i = p2;
3399   /* 9: loadpw */
3400   var38.i = p3;
3401
3402   for (i = 0; i < n; i++) {
3403     /* 0: loadb */
3404     var34 = ptr4[i];
3405     /* 1: convubw */
3406     var40.i = (orc_uint8) var34;
3407     /* 3: mullw */
3408     var41.i = (var40.i * var35.i) & 0xffff;
3409     /* 4: loadb */
3410     var36 = ptr5[i];
3411     /* 5: convubw */
3412     var42.i = (orc_uint8) var36;
3413     /* 7: mullw */
3414     var43.i = (var42.i * var37.i) & 0xffff;
3415     /* 8: addw */
3416     var44.i = var41.i + var43.i;
3417     /* 10: addw */
3418     var45.i = var44.i + var38.i;
3419     /* 11: shrsw */
3420     var46.i = var45.i >> 6;
3421     /* 12: convsuswb */
3422     var39 = ORC_CLAMP_UB (var46.i);
3423     /* 13: storeb */
3424     ptr0[i] = var39;
3425   }
3426
3427 }
3428
3429 #else
3430 static void
3431 _backup_orc_matrix2_u8 (OrcExecutor * ORC_RESTRICT ex)
3432 {
3433   int i;
3434   int n = ex->n;
3435   orc_int8 *ORC_RESTRICT ptr0;
3436   const orc_int8 *ORC_RESTRICT ptr4;
3437   const orc_int8 *ORC_RESTRICT ptr5;
3438   orc_int8 var34;
3439   orc_union16 var35;
3440   orc_int8 var36;
3441   orc_union16 var37;
3442   orc_union16 var38;
3443   orc_int8 var39;
3444   orc_union16 var40;
3445   orc_union16 var41;
3446   orc_union16 var42;
3447   orc_union16 var43;
3448   orc_union16 var44;
3449   orc_union16 var45;
3450   orc_union16 var46;
3451
3452   ptr0 = (orc_int8 *) ex->arrays[0];
3453   ptr4 = (orc_int8 *) ex->arrays[4];
3454   ptr5 = (orc_int8 *) ex->arrays[5];
3455
3456   /* 2: loadpw */
3457   var35.i = ex->params[24];
3458   /* 6: loadpw */
3459   var37.i = ex->params[25];
3460   /* 9: loadpw */
3461   var38.i = ex->params[26];
3462
3463   for (i = 0; i < n; i++) {
3464     /* 0: loadb */
3465     var34 = ptr4[i];
3466     /* 1: convubw */
3467     var40.i = (orc_uint8) var34;
3468     /* 3: mullw */
3469     var41.i = (var40.i * var35.i) & 0xffff;
3470     /* 4: loadb */
3471     var36 = ptr5[i];
3472     /* 5: convubw */
3473     var42.i = (orc_uint8) var36;
3474     /* 7: mullw */
3475     var43.i = (var42.i * var37.i) & 0xffff;
3476     /* 8: addw */
3477     var44.i = var41.i + var43.i;
3478     /* 10: addw */
3479     var45.i = var44.i + var38.i;
3480     /* 11: shrsw */
3481     var46.i = var45.i >> 6;
3482     /* 12: convsuswb */
3483     var39 = ORC_CLAMP_UB (var46.i);
3484     /* 13: storeb */
3485     ptr0[i] = var39;
3486   }
3487
3488 }
3489
3490 void
3491 orc_matrix2_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3492     const guint8 * ORC_RESTRICT s2, int p1, int p2, int p3, int n)
3493 {
3494   OrcExecutor _ex, *ex = &_ex;
3495   static volatile int p_inited = 0;
3496   static OrcProgram *p = 0;
3497   void (*func) (OrcExecutor *);
3498
3499   if (!p_inited) {
3500     orc_once_mutex_lock ();
3501     if (!p_inited) {
3502
3503       p = orc_program_new ();
3504       orc_program_set_name (p, "orc_matrix2_u8");
3505       orc_program_set_backup_function (p, _backup_orc_matrix2_u8);
3506       orc_program_add_destination (p, 1, "d1");
3507       orc_program_add_source (p, 1, "s1");
3508       orc_program_add_source (p, 1, "s2");
3509       orc_program_add_constant (p, 4, 0x00000006, "c1");
3510       orc_program_add_parameter (p, 2, "p1");
3511       orc_program_add_parameter (p, 2, "p2");
3512       orc_program_add_parameter (p, 2, "p3");
3513       orc_program_add_temporary (p, 2, "t1");
3514       orc_program_add_temporary (p, 2, "t2");
3515
3516       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3517           ORC_VAR_D1);
3518       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
3519           ORC_VAR_D1);
3520       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
3521           ORC_VAR_D1);
3522       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
3523           ORC_VAR_D1);
3524       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
3525           ORC_VAR_D1);
3526       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P3,
3527           ORC_VAR_D1);
3528       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
3529           ORC_VAR_D1);
3530       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
3531           ORC_VAR_D1, ORC_VAR_D1);
3532
3533       orc_program_compile (p);
3534     }
3535     p_inited = TRUE;
3536     orc_once_mutex_unlock ();
3537   }
3538   ex->program = p;
3539
3540   ex->n = n;
3541   ex->arrays[ORC_VAR_D1] = d1;
3542   ex->arrays[ORC_VAR_S1] = (void *) s1;
3543   ex->arrays[ORC_VAR_S2] = (void *) s2;
3544   ex->params[ORC_VAR_P1] = p1;
3545   ex->params[ORC_VAR_P2] = p2;
3546   ex->params[ORC_VAR_P3] = p3;
3547
3548   func = p->code_exec;
3549   func (ex);
3550 }
3551 #endif
3552
3553
3554 /* orc_matrix2_11_u8 */
3555 #ifdef DISABLE_ORC
3556 void
3557 orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3558     const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
3559 {
3560   int i;
3561   orc_int8 *ORC_RESTRICT ptr0;
3562   const orc_int8 *ORC_RESTRICT ptr4;
3563   const orc_int8 *ORC_RESTRICT ptr5;
3564   orc_int8 var36;
3565   orc_union16 var37;
3566   orc_union16 var38;
3567   orc_int8 var39;
3568   orc_union16 var40;
3569   orc_union16 var41;
3570   orc_union16 var42;
3571   orc_int8 var43;
3572   orc_union16 var44;
3573   orc_union16 var45;
3574   orc_union16 var46;
3575   orc_union16 var47;
3576   orc_union16 var48;
3577   orc_union16 var49;
3578   orc_union16 var50;
3579   orc_union16 var51;
3580   orc_union16 var52;
3581   orc_union16 var53;
3582   orc_union16 var54;
3583
3584   ptr0 = (orc_int8 *) d1;
3585   ptr4 = (orc_int8 *) s1;
3586   ptr5 = (orc_int8 *) s2;
3587
3588   /* 2: loadpw */
3589   var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
3590   /* 4: loadpw */
3591   var38.i = p1;
3592   /* 8: loadpw */
3593   var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3594   /* 10: loadpw */
3595   var41.i = p2;
3596   /* 13: loadpw */
3597   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3598
3599   for (i = 0; i < n; i++) {
3600     /* 0: loadb */
3601     var36 = ptr4[i];
3602     /* 1: convubw */
3603     var44.i = (orc_uint8) var36;
3604     /* 3: subw */
3605     var45.i = var44.i - var37.i;
3606     /* 5: mullw */
3607     var46.i = (var45.i * var38.i) & 0xffff;
3608     /* 6: loadb */
3609     var39 = ptr5[i];
3610     /* 7: convubw */
3611     var47.i = (orc_uint8) var39;
3612     /* 9: subw */
3613     var48.i = var47.i - var40.i;
3614     /* 11: mullw */
3615     var49.i = (var48.i * var41.i) & 0xffff;
3616     /* 12: addw */
3617     var50.i = var46.i + var49.i;
3618     /* 14: addw */
3619     var51.i = var50.i + var42.i;
3620     /* 15: shrsw */
3621     var52.i = var51.i >> 8;
3622     /* 16: addw */
3623     var53.i = var52.i + var45.i;
3624     /* 17: addw */
3625     var54.i = var53.i + var48.i;
3626     /* 18: convsuswb */
3627     var43 = ORC_CLAMP_UB (var54.i);
3628     /* 19: storeb */
3629     ptr0[i] = var43;
3630   }
3631
3632 }
3633
3634 #else
3635 static void
3636 _backup_orc_matrix2_11_u8 (OrcExecutor * ORC_RESTRICT ex)
3637 {
3638   int i;
3639   int n = ex->n;
3640   orc_int8 *ORC_RESTRICT ptr0;
3641   const orc_int8 *ORC_RESTRICT ptr4;
3642   const orc_int8 *ORC_RESTRICT ptr5;
3643   orc_int8 var36;
3644   orc_union16 var37;
3645   orc_union16 var38;
3646   orc_int8 var39;
3647   orc_union16 var40;
3648   orc_union16 var41;
3649   orc_union16 var42;
3650   orc_int8 var43;
3651   orc_union16 var44;
3652   orc_union16 var45;
3653   orc_union16 var46;
3654   orc_union16 var47;
3655   orc_union16 var48;
3656   orc_union16 var49;
3657   orc_union16 var50;
3658   orc_union16 var51;
3659   orc_union16 var52;
3660   orc_union16 var53;
3661   orc_union16 var54;
3662
3663   ptr0 = (orc_int8 *) ex->arrays[0];
3664   ptr4 = (orc_int8 *) ex->arrays[4];
3665   ptr5 = (orc_int8 *) ex->arrays[5];
3666
3667   /* 2: loadpw */
3668   var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
3669   /* 4: loadpw */
3670   var38.i = ex->params[24];
3671   /* 8: loadpw */
3672   var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3673   /* 10: loadpw */
3674   var41.i = ex->params[25];
3675   /* 13: loadpw */
3676   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3677
3678   for (i = 0; i < n; i++) {
3679     /* 0: loadb */
3680     var36 = ptr4[i];
3681     /* 1: convubw */
3682     var44.i = (orc_uint8) var36;
3683     /* 3: subw */
3684     var45.i = var44.i - var37.i;
3685     /* 5: mullw */
3686     var46.i = (var45.i * var38.i) & 0xffff;
3687     /* 6: loadb */
3688     var39 = ptr5[i];
3689     /* 7: convubw */
3690     var47.i = (orc_uint8) var39;
3691     /* 9: subw */
3692     var48.i = var47.i - var40.i;
3693     /* 11: mullw */
3694     var49.i = (var48.i * var41.i) & 0xffff;
3695     /* 12: addw */
3696     var50.i = var46.i + var49.i;
3697     /* 14: addw */
3698     var51.i = var50.i + var42.i;
3699     /* 15: shrsw */
3700     var52.i = var51.i >> 8;
3701     /* 16: addw */
3702     var53.i = var52.i + var45.i;
3703     /* 17: addw */
3704     var54.i = var53.i + var48.i;
3705     /* 18: convsuswb */
3706     var43 = ORC_CLAMP_UB (var54.i);
3707     /* 19: storeb */
3708     ptr0[i] = var43;
3709   }
3710
3711 }
3712
3713 void
3714 orc_matrix2_11_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3715     const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
3716 {
3717   OrcExecutor _ex, *ex = &_ex;
3718   static volatile int p_inited = 0;
3719   static OrcProgram *p = 0;
3720   void (*func) (OrcExecutor *);
3721
3722   if (!p_inited) {
3723     orc_once_mutex_lock ();
3724     if (!p_inited) {
3725
3726       p = orc_program_new ();
3727       orc_program_set_name (p, "orc_matrix2_11_u8");
3728       orc_program_set_backup_function (p, _backup_orc_matrix2_11_u8);
3729       orc_program_add_destination (p, 1, "d1");
3730       orc_program_add_source (p, 1, "s1");
3731       orc_program_add_source (p, 1, "s2");
3732       orc_program_add_constant (p, 4, 0x00000010, "c1");
3733       orc_program_add_constant (p, 4, 0x00000080, "c2");
3734       orc_program_add_constant (p, 4, 0x00000008, "c3");
3735       orc_program_add_parameter (p, 2, "p1");
3736       orc_program_add_parameter (p, 2, "p2");
3737       orc_program_add_temporary (p, 2, "t1");
3738       orc_program_add_temporary (p, 2, "t2");
3739       orc_program_add_temporary (p, 2, "t3");
3740       orc_program_add_temporary (p, 2, "t4");
3741
3742       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3743           ORC_VAR_D1);
3744       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
3745           ORC_VAR_D1);
3746       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
3747           ORC_VAR_D1);
3748       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
3749           ORC_VAR_D1);
3750       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
3751           ORC_VAR_D1);
3752       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
3753           ORC_VAR_D1);
3754       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
3755           ORC_VAR_D1);
3756       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
3757           ORC_VAR_D1);
3758       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
3759           ORC_VAR_D1);
3760       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
3761           ORC_VAR_D1);
3762       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
3763           ORC_VAR_D1);
3764       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
3765           ORC_VAR_D1, ORC_VAR_D1);
3766
3767       orc_program_compile (p);
3768     }
3769     p_inited = TRUE;
3770     orc_once_mutex_unlock ();
3771   }
3772   ex->program = p;
3773
3774   ex->n = n;
3775   ex->arrays[ORC_VAR_D1] = d1;
3776   ex->arrays[ORC_VAR_S1] = (void *) s1;
3777   ex->arrays[ORC_VAR_S2] = (void *) s2;
3778   ex->params[ORC_VAR_P1] = p1;
3779   ex->params[ORC_VAR_P2] = p2;
3780
3781   func = p->code_exec;
3782   func (ex);
3783 }
3784 #endif
3785
3786
3787 /* orc_matrix2_12_u8 */
3788 #ifdef DISABLE_ORC
3789 void
3790 orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3791     const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
3792 {
3793   int i;
3794   orc_int8 *ORC_RESTRICT ptr0;
3795   const orc_int8 *ORC_RESTRICT ptr4;
3796   const orc_int8 *ORC_RESTRICT ptr5;
3797   orc_int8 var36;
3798   orc_union16 var37;
3799   orc_union16 var38;
3800   orc_int8 var39;
3801   orc_union16 var40;
3802   orc_union16 var41;
3803   orc_union16 var42;
3804   orc_int8 var43;
3805   orc_union16 var44;
3806   orc_union16 var45;
3807   orc_union16 var46;
3808   orc_union16 var47;
3809   orc_union16 var48;
3810   orc_union16 var49;
3811   orc_union16 var50;
3812   orc_union16 var51;
3813   orc_union16 var52;
3814   orc_union16 var53;
3815   orc_union16 var54;
3816   orc_union16 var55;
3817
3818   ptr0 = (orc_int8 *) d1;
3819   ptr4 = (orc_int8 *) s1;
3820   ptr5 = (orc_int8 *) s2;
3821
3822   /* 2: loadpw */
3823   var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
3824   /* 4: loadpw */
3825   var38.i = p1;
3826   /* 8: loadpw */
3827   var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3828   /* 10: loadpw */
3829   var41.i = p2;
3830   /* 13: loadpw */
3831   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3832
3833   for (i = 0; i < n; i++) {
3834     /* 0: loadb */
3835     var36 = ptr4[i];
3836     /* 1: convubw */
3837     var44.i = (orc_uint8) var36;
3838     /* 3: subw */
3839     var45.i = var44.i - var37.i;
3840     /* 5: mullw */
3841     var46.i = (var45.i * var38.i) & 0xffff;
3842     /* 6: loadb */
3843     var39 = ptr5[i];
3844     /* 7: convubw */
3845     var47.i = (orc_uint8) var39;
3846     /* 9: subw */
3847     var48.i = var47.i - var40.i;
3848     /* 11: mullw */
3849     var49.i = (var48.i * var41.i) & 0xffff;
3850     /* 12: addw */
3851     var50.i = var46.i + var49.i;
3852     /* 14: addw */
3853     var51.i = var50.i + var42.i;
3854     /* 15: shrsw */
3855     var52.i = var51.i >> 8;
3856     /* 16: addw */
3857     var53.i = var52.i + var45.i;
3858     /* 17: addw */
3859     var54.i = var53.i + var48.i;
3860     /* 18: addw */
3861     var55.i = var54.i + var48.i;
3862     /* 19: convsuswb */
3863     var43 = ORC_CLAMP_UB (var55.i);
3864     /* 20: storeb */
3865     ptr0[i] = var43;
3866   }
3867
3868 }
3869
3870 #else
3871 static void
3872 _backup_orc_matrix2_12_u8 (OrcExecutor * ORC_RESTRICT ex)
3873 {
3874   int i;
3875   int n = ex->n;
3876   orc_int8 *ORC_RESTRICT ptr0;
3877   const orc_int8 *ORC_RESTRICT ptr4;
3878   const orc_int8 *ORC_RESTRICT ptr5;
3879   orc_int8 var36;
3880   orc_union16 var37;
3881   orc_union16 var38;
3882   orc_int8 var39;
3883   orc_union16 var40;
3884   orc_union16 var41;
3885   orc_union16 var42;
3886   orc_int8 var43;
3887   orc_union16 var44;
3888   orc_union16 var45;
3889   orc_union16 var46;
3890   orc_union16 var47;
3891   orc_union16 var48;
3892   orc_union16 var49;
3893   orc_union16 var50;
3894   orc_union16 var51;
3895   orc_union16 var52;
3896   orc_union16 var53;
3897   orc_union16 var54;
3898   orc_union16 var55;
3899
3900   ptr0 = (orc_int8 *) ex->arrays[0];
3901   ptr4 = (orc_int8 *) ex->arrays[4];
3902   ptr5 = (orc_int8 *) ex->arrays[5];
3903
3904   /* 2: loadpw */
3905   var37.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
3906   /* 4: loadpw */
3907   var38.i = ex->params[24];
3908   /* 8: loadpw */
3909   var40.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3910   /* 10: loadpw */
3911   var41.i = ex->params[25];
3912   /* 13: loadpw */
3913   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
3914
3915   for (i = 0; i < n; i++) {
3916     /* 0: loadb */
3917     var36 = ptr4[i];
3918     /* 1: convubw */
3919     var44.i = (orc_uint8) var36;
3920     /* 3: subw */
3921     var45.i = var44.i - var37.i;
3922     /* 5: mullw */
3923     var46.i = (var45.i * var38.i) & 0xffff;
3924     /* 6: loadb */
3925     var39 = ptr5[i];
3926     /* 7: convubw */
3927     var47.i = (orc_uint8) var39;
3928     /* 9: subw */
3929     var48.i = var47.i - var40.i;
3930     /* 11: mullw */
3931     var49.i = (var48.i * var41.i) & 0xffff;
3932     /* 12: addw */
3933     var50.i = var46.i + var49.i;
3934     /* 14: addw */
3935     var51.i = var50.i + var42.i;
3936     /* 15: shrsw */
3937     var52.i = var51.i >> 8;
3938     /* 16: addw */
3939     var53.i = var52.i + var45.i;
3940     /* 17: addw */
3941     var54.i = var53.i + var48.i;
3942     /* 18: addw */
3943     var55.i = var54.i + var48.i;
3944     /* 19: convsuswb */
3945     var43 = ORC_CLAMP_UB (var55.i);
3946     /* 20: storeb */
3947     ptr0[i] = var43;
3948   }
3949
3950 }
3951
3952 void
3953 orc_matrix2_12_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
3954     const guint8 * ORC_RESTRICT s2, int p1, int p2, int n)
3955 {
3956   OrcExecutor _ex, *ex = &_ex;
3957   static volatile int p_inited = 0;
3958   static OrcProgram *p = 0;
3959   void (*func) (OrcExecutor *);
3960
3961   if (!p_inited) {
3962     orc_once_mutex_lock ();
3963     if (!p_inited) {
3964
3965       p = orc_program_new ();
3966       orc_program_set_name (p, "orc_matrix2_12_u8");
3967       orc_program_set_backup_function (p, _backup_orc_matrix2_12_u8);
3968       orc_program_add_destination (p, 1, "d1");
3969       orc_program_add_source (p, 1, "s1");
3970       orc_program_add_source (p, 1, "s2");
3971       orc_program_add_constant (p, 4, 0x00000010, "c1");
3972       orc_program_add_constant (p, 4, 0x00000080, "c2");
3973       orc_program_add_constant (p, 4, 0x00000008, "c3");
3974       orc_program_add_parameter (p, 2, "p1");
3975       orc_program_add_parameter (p, 2, "p2");
3976       orc_program_add_temporary (p, 2, "t1");
3977       orc_program_add_temporary (p, 2, "t2");
3978       orc_program_add_temporary (p, 2, "t3");
3979       orc_program_add_temporary (p, 2, "t4");
3980
3981       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
3982           ORC_VAR_D1);
3983       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
3984           ORC_VAR_D1);
3985       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
3986           ORC_VAR_D1);
3987       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
3988           ORC_VAR_D1);
3989       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
3990           ORC_VAR_D1);
3991       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_P2,
3992           ORC_VAR_D1);
3993       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
3994           ORC_VAR_D1);
3995       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
3996           ORC_VAR_D1);
3997       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
3998           ORC_VAR_D1);
3999       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
4000           ORC_VAR_D1);
4001       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
4002           ORC_VAR_D1);
4003       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
4004           ORC_VAR_D1);
4005       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
4006           ORC_VAR_D1, ORC_VAR_D1);
4007
4008       orc_program_compile (p);
4009     }
4010     p_inited = TRUE;
4011     orc_once_mutex_unlock ();
4012   }
4013   ex->program = p;
4014
4015   ex->n = n;
4016   ex->arrays[ORC_VAR_D1] = d1;
4017   ex->arrays[ORC_VAR_S1] = (void *) s1;
4018   ex->arrays[ORC_VAR_S2] = (void *) s2;
4019   ex->params[ORC_VAR_P1] = p1;
4020   ex->params[ORC_VAR_P2] = p2;
4021
4022   func = p->code_exec;
4023   func (ex);
4024 }
4025 #endif
4026
4027
4028 /* orc_matrix3_u8 */
4029 #ifdef DISABLE_ORC
4030 void
4031 orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4032     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4033     int p2, int p3, int p4, int n)
4034 {
4035   int i;
4036   orc_int8 *ORC_RESTRICT ptr0;
4037   const orc_int8 *ORC_RESTRICT ptr4;
4038   const orc_int8 *ORC_RESTRICT ptr5;
4039   const orc_int8 *ORC_RESTRICT ptr6;
4040   orc_int8 var34;
4041   orc_union16 var35;
4042   orc_int8 var36;
4043   orc_union16 var37;
4044   orc_int8 var38;
4045   orc_union16 var39;
4046   orc_union16 var40;
4047   orc_int8 var41;
4048   orc_union16 var42;
4049   orc_union16 var43;
4050   orc_union16 var44;
4051   orc_union16 var45;
4052   orc_union16 var46;
4053   orc_union16 var47;
4054   orc_union16 var48;
4055   orc_union16 var49;
4056   orc_union16 var50;
4057   orc_union16 var51;
4058
4059   ptr0 = (orc_int8 *) d1;
4060   ptr4 = (orc_int8 *) s1;
4061   ptr5 = (orc_int8 *) s2;
4062   ptr6 = (orc_int8 *) s3;
4063
4064   /* 2: loadpw */
4065   var35.i = p1;
4066   /* 6: loadpw */
4067   var37.i = p2;
4068   /* 11: loadpw */
4069   var39.i = p3;
4070   /* 14: loadpw */
4071   var40.i = p4;
4072
4073   for (i = 0; i < n; i++) {
4074     /* 0: loadb */
4075     var34 = ptr4[i];
4076     /* 1: convubw */
4077     var42.i = (orc_uint8) var34;
4078     /* 3: mullw */
4079     var43.i = (var42.i * var35.i) & 0xffff;
4080     /* 4: loadb */
4081     var36 = ptr5[i];
4082     /* 5: convubw */
4083     var44.i = (orc_uint8) var36;
4084     /* 7: mullw */
4085     var45.i = (var44.i * var37.i) & 0xffff;
4086     /* 8: addw */
4087     var46.i = var43.i + var45.i;
4088     /* 9: loadb */
4089     var38 = ptr6[i];
4090     /* 10: convubw */
4091     var47.i = (orc_uint8) var38;
4092     /* 12: mullw */
4093     var48.i = (var47.i * var39.i) & 0xffff;
4094     /* 13: addw */
4095     var49.i = var46.i + var48.i;
4096     /* 15: addw */
4097     var50.i = var49.i + var40.i;
4098     /* 16: shrsw */
4099     var51.i = var50.i >> 6;
4100     /* 17: convsuswb */
4101     var41 = ORC_CLAMP_UB (var51.i);
4102     /* 18: storeb */
4103     ptr0[i] = var41;
4104   }
4105
4106 }
4107
4108 #else
4109 static void
4110 _backup_orc_matrix3_u8 (OrcExecutor * ORC_RESTRICT ex)
4111 {
4112   int i;
4113   int n = ex->n;
4114   orc_int8 *ORC_RESTRICT ptr0;
4115   const orc_int8 *ORC_RESTRICT ptr4;
4116   const orc_int8 *ORC_RESTRICT ptr5;
4117   const orc_int8 *ORC_RESTRICT ptr6;
4118   orc_int8 var34;
4119   orc_union16 var35;
4120   orc_int8 var36;
4121   orc_union16 var37;
4122   orc_int8 var38;
4123   orc_union16 var39;
4124   orc_union16 var40;
4125   orc_int8 var41;
4126   orc_union16 var42;
4127   orc_union16 var43;
4128   orc_union16 var44;
4129   orc_union16 var45;
4130   orc_union16 var46;
4131   orc_union16 var47;
4132   orc_union16 var48;
4133   orc_union16 var49;
4134   orc_union16 var50;
4135   orc_union16 var51;
4136
4137   ptr0 = (orc_int8 *) ex->arrays[0];
4138   ptr4 = (orc_int8 *) ex->arrays[4];
4139   ptr5 = (orc_int8 *) ex->arrays[5];
4140   ptr6 = (orc_int8 *) ex->arrays[6];
4141
4142   /* 2: loadpw */
4143   var35.i = ex->params[24];
4144   /* 6: loadpw */
4145   var37.i = ex->params[25];
4146   /* 11: loadpw */
4147   var39.i = ex->params[26];
4148   /* 14: loadpw */
4149   var40.i = ex->params[27];
4150
4151   for (i = 0; i < n; i++) {
4152     /* 0: loadb */
4153     var34 = ptr4[i];
4154     /* 1: convubw */
4155     var42.i = (orc_uint8) var34;
4156     /* 3: mullw */
4157     var43.i = (var42.i * var35.i) & 0xffff;
4158     /* 4: loadb */
4159     var36 = ptr5[i];
4160     /* 5: convubw */
4161     var44.i = (orc_uint8) var36;
4162     /* 7: mullw */
4163     var45.i = (var44.i * var37.i) & 0xffff;
4164     /* 8: addw */
4165     var46.i = var43.i + var45.i;
4166     /* 9: loadb */
4167     var38 = ptr6[i];
4168     /* 10: convubw */
4169     var47.i = (orc_uint8) var38;
4170     /* 12: mullw */
4171     var48.i = (var47.i * var39.i) & 0xffff;
4172     /* 13: addw */
4173     var49.i = var46.i + var48.i;
4174     /* 15: addw */
4175     var50.i = var49.i + var40.i;
4176     /* 16: shrsw */
4177     var51.i = var50.i >> 6;
4178     /* 17: convsuswb */
4179     var41 = ORC_CLAMP_UB (var51.i);
4180     /* 18: storeb */
4181     ptr0[i] = var41;
4182   }
4183
4184 }
4185
4186 void
4187 orc_matrix3_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4188     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4189     int p2, int p3, int p4, int n)
4190 {
4191   OrcExecutor _ex, *ex = &_ex;
4192   static volatile int p_inited = 0;
4193   static OrcProgram *p = 0;
4194   void (*func) (OrcExecutor *);
4195
4196   if (!p_inited) {
4197     orc_once_mutex_lock ();
4198     if (!p_inited) {
4199
4200       p = orc_program_new ();
4201       orc_program_set_name (p, "orc_matrix3_u8");
4202       orc_program_set_backup_function (p, _backup_orc_matrix3_u8);
4203       orc_program_add_destination (p, 1, "d1");
4204       orc_program_add_source (p, 1, "s1");
4205       orc_program_add_source (p, 1, "s2");
4206       orc_program_add_source (p, 1, "s3");
4207       orc_program_add_constant (p, 4, 0x00000006, "c1");
4208       orc_program_add_parameter (p, 2, "p1");
4209       orc_program_add_parameter (p, 2, "p2");
4210       orc_program_add_parameter (p, 2, "p3");
4211       orc_program_add_parameter (p, 2, "p4");
4212       orc_program_add_temporary (p, 2, "t1");
4213       orc_program_add_temporary (p, 2, "t2");
4214
4215       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
4216           ORC_VAR_D1);
4217       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
4218           ORC_VAR_D1);
4219       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
4220           ORC_VAR_D1);
4221       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
4222           ORC_VAR_D1);
4223       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4224           ORC_VAR_D1);
4225       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
4226           ORC_VAR_D1);
4227       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
4228           ORC_VAR_D1);
4229       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4230           ORC_VAR_D1);
4231       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
4232           ORC_VAR_D1);
4233       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
4234           ORC_VAR_D1);
4235       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
4236           ORC_VAR_D1, ORC_VAR_D1);
4237
4238       orc_program_compile (p);
4239     }
4240     p_inited = TRUE;
4241     orc_once_mutex_unlock ();
4242   }
4243   ex->program = p;
4244
4245   ex->n = n;
4246   ex->arrays[ORC_VAR_D1] = d1;
4247   ex->arrays[ORC_VAR_S1] = (void *) s1;
4248   ex->arrays[ORC_VAR_S2] = (void *) s2;
4249   ex->arrays[ORC_VAR_S3] = (void *) s3;
4250   ex->params[ORC_VAR_P1] = p1;
4251   ex->params[ORC_VAR_P2] = p2;
4252   ex->params[ORC_VAR_P3] = p3;
4253   ex->params[ORC_VAR_P4] = p4;
4254
4255   func = p->code_exec;
4256   func (ex);
4257 }
4258 #endif
4259
4260
4261 /* orc_matrix3_100_u8 */
4262 #ifdef DISABLE_ORC
4263 void
4264 orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4265     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4266     int p2, int p3, int n)
4267 {
4268   int i;
4269   orc_int8 *ORC_RESTRICT ptr0;
4270   const orc_int8 *ORC_RESTRICT ptr4;
4271   const orc_int8 *ORC_RESTRICT ptr5;
4272   const orc_int8 *ORC_RESTRICT ptr6;
4273   orc_int8 var35;
4274   orc_union16 var36;
4275   orc_union16 var37;
4276   orc_int8 var38;
4277   orc_union16 var39;
4278   orc_union16 var40;
4279   orc_int8 var41;
4280   orc_union16 var42;
4281   orc_union16 var43;
4282   orc_union16 var44;
4283   orc_int8 var45;
4284   orc_union16 var46;
4285   orc_union16 var47;
4286   orc_union16 var48;
4287   orc_union16 var49;
4288   orc_union16 var50;
4289   orc_union16 var51;
4290   orc_union16 var52;
4291   orc_union16 var53;
4292   orc_union16 var54;
4293   orc_union16 var55;
4294   orc_union16 var56;
4295   orc_union16 var57;
4296   orc_union16 var58;
4297   orc_union16 var59;
4298
4299   ptr0 = (orc_int8 *) d1;
4300   ptr4 = (orc_int8 *) s1;
4301   ptr5 = (orc_int8 *) s2;
4302   ptr6 = (orc_int8 *) s3;
4303
4304   /* 2: loadpw */
4305   var36.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
4306   /* 4: loadpw */
4307   var37.i = p1;
4308   /* 8: loadpw */
4309   var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4310   /* 10: loadpw */
4311   var40.i = p2;
4312   /* 15: loadpw */
4313   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4314   /* 17: loadpw */
4315   var43.i = p3;
4316   /* 20: loadpw */
4317   var44.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4318
4319   for (i = 0; i < n; i++) {
4320     /* 0: loadb */
4321     var35 = ptr4[i];
4322     /* 1: convubw */
4323     var46.i = (orc_uint8) var35;
4324     /* 3: subw */
4325     var47.i = var46.i - var36.i;
4326     /* 5: mullw */
4327     var48.i = (var47.i * var37.i) & 0xffff;
4328     /* 6: loadb */
4329     var38 = ptr5[i];
4330     /* 7: convubw */
4331     var49.i = (orc_uint8) var38;
4332     /* 9: subw */
4333     var50.i = var49.i - var39.i;
4334     /* 11: mullw */
4335     var51.i = (var50.i * var40.i) & 0xffff;
4336     /* 12: addw */
4337     var52.i = var48.i + var51.i;
4338     /* 13: loadb */
4339     var41 = ptr6[i];
4340     /* 14: convubw */
4341     var53.i = (orc_uint8) var41;
4342     /* 16: subw */
4343     var54.i = var53.i - var42.i;
4344     /* 18: mullw */
4345     var55.i = (var54.i * var43.i) & 0xffff;
4346     /* 19: addw */
4347     var56.i = var52.i + var55.i;
4348     /* 21: addw */
4349     var57.i = var56.i + var44.i;
4350     /* 22: shrsw */
4351     var58.i = var57.i >> 8;
4352     /* 23: addw */
4353     var59.i = var58.i + var47.i;
4354     /* 24: convsuswb */
4355     var45 = ORC_CLAMP_UB (var59.i);
4356     /* 25: storeb */
4357     ptr0[i] = var45;
4358   }
4359
4360 }
4361
4362 #else
4363 static void
4364 _backup_orc_matrix3_100_u8 (OrcExecutor * ORC_RESTRICT ex)
4365 {
4366   int i;
4367   int n = ex->n;
4368   orc_int8 *ORC_RESTRICT ptr0;
4369   const orc_int8 *ORC_RESTRICT ptr4;
4370   const orc_int8 *ORC_RESTRICT ptr5;
4371   const orc_int8 *ORC_RESTRICT ptr6;
4372   orc_int8 var35;
4373   orc_union16 var36;
4374   orc_union16 var37;
4375   orc_int8 var38;
4376   orc_union16 var39;
4377   orc_union16 var40;
4378   orc_int8 var41;
4379   orc_union16 var42;
4380   orc_union16 var43;
4381   orc_union16 var44;
4382   orc_int8 var45;
4383   orc_union16 var46;
4384   orc_union16 var47;
4385   orc_union16 var48;
4386   orc_union16 var49;
4387   orc_union16 var50;
4388   orc_union16 var51;
4389   orc_union16 var52;
4390   orc_union16 var53;
4391   orc_union16 var54;
4392   orc_union16 var55;
4393   orc_union16 var56;
4394   orc_union16 var57;
4395   orc_union16 var58;
4396   orc_union16 var59;
4397
4398   ptr0 = (orc_int8 *) ex->arrays[0];
4399   ptr4 = (orc_int8 *) ex->arrays[4];
4400   ptr5 = (orc_int8 *) ex->arrays[5];
4401   ptr6 = (orc_int8 *) ex->arrays[6];
4402
4403   /* 2: loadpw */
4404   var36.i = (int) 0x00000010;   /* 16 or 7.90505e-323f */
4405   /* 4: loadpw */
4406   var37.i = ex->params[24];
4407   /* 8: loadpw */
4408   var39.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4409   /* 10: loadpw */
4410   var40.i = ex->params[25];
4411   /* 15: loadpw */
4412   var42.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4413   /* 17: loadpw */
4414   var43.i = ex->params[26];
4415   /* 20: loadpw */
4416   var44.i = (int) 0x00000080;   /* 128 or 6.32404e-322f */
4417
4418   for (i = 0; i < n; i++) {
4419     /* 0: loadb */
4420     var35 = ptr4[i];
4421     /* 1: convubw */
4422     var46.i = (orc_uint8) var35;
4423     /* 3: subw */
4424     var47.i = var46.i - var36.i;
4425     /* 5: mullw */
4426     var48.i = (var47.i * var37.i) & 0xffff;
4427     /* 6: loadb */
4428     var38 = ptr5[i];
4429     /* 7: convubw */
4430     var49.i = (orc_uint8) var38;
4431     /* 9: subw */
4432     var50.i = var49.i - var39.i;
4433     /* 11: mullw */
4434     var51.i = (var50.i * var40.i) & 0xffff;
4435     /* 12: addw */
4436     var52.i = var48.i + var51.i;
4437     /* 13: loadb */
4438     var41 = ptr6[i];
4439     /* 14: convubw */
4440     var53.i = (orc_uint8) var41;
4441     /* 16: subw */
4442     var54.i = var53.i - var42.i;
4443     /* 18: mullw */
4444     var55.i = (var54.i * var43.i) & 0xffff;
4445     /* 19: addw */
4446     var56.i = var52.i + var55.i;
4447     /* 21: addw */
4448     var57.i = var56.i + var44.i;
4449     /* 22: shrsw */
4450     var58.i = var57.i >> 8;
4451     /* 23: addw */
4452     var59.i = var58.i + var47.i;
4453     /* 24: convsuswb */
4454     var45 = ORC_CLAMP_UB (var59.i);
4455     /* 25: storeb */
4456     ptr0[i] = var45;
4457   }
4458
4459 }
4460
4461 void
4462 orc_matrix3_100_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4463     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4464     int p2, int p3, int n)
4465 {
4466   OrcExecutor _ex, *ex = &_ex;
4467   static volatile int p_inited = 0;
4468   static OrcProgram *p = 0;
4469   void (*func) (OrcExecutor *);
4470
4471   if (!p_inited) {
4472     orc_once_mutex_lock ();
4473     if (!p_inited) {
4474
4475       p = orc_program_new ();
4476       orc_program_set_name (p, "orc_matrix3_100_u8");
4477       orc_program_set_backup_function (p, _backup_orc_matrix3_100_u8);
4478       orc_program_add_destination (p, 1, "d1");
4479       orc_program_add_source (p, 1, "s1");
4480       orc_program_add_source (p, 1, "s2");
4481       orc_program_add_source (p, 1, "s3");
4482       orc_program_add_constant (p, 4, 0x00000010, "c1");
4483       orc_program_add_constant (p, 4, 0x00000080, "c2");
4484       orc_program_add_constant (p, 4, 0x00000008, "c3");
4485       orc_program_add_parameter (p, 2, "p1");
4486       orc_program_add_parameter (p, 2, "p2");
4487       orc_program_add_parameter (p, 2, "p3");
4488       orc_program_add_temporary (p, 2, "t1");
4489       orc_program_add_temporary (p, 2, "t2");
4490       orc_program_add_temporary (p, 2, "t3");
4491
4492       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
4493           ORC_VAR_D1);
4494       orc_program_append_2 (p, "subw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
4495           ORC_VAR_D1);
4496       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_P1,
4497           ORC_VAR_D1);
4498       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
4499           ORC_VAR_D1);
4500       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
4501           ORC_VAR_D1);
4502       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
4503           ORC_VAR_D1);
4504       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
4505           ORC_VAR_D1);
4506       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
4507           ORC_VAR_D1);
4508       orc_program_append_2 (p, "subw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C2,
4509           ORC_VAR_D1);
4510       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
4511           ORC_VAR_D1);
4512       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T2,
4513           ORC_VAR_D1);
4514       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
4515           ORC_VAR_D1);
4516       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C3,
4517           ORC_VAR_D1);
4518       orc_program_append_2 (p, "addw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T1,
4519           ORC_VAR_D1);
4520       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T3,
4521           ORC_VAR_D1, ORC_VAR_D1);
4522
4523       orc_program_compile (p);
4524     }
4525     p_inited = TRUE;
4526     orc_once_mutex_unlock ();
4527   }
4528   ex->program = p;
4529
4530   ex->n = n;
4531   ex->arrays[ORC_VAR_D1] = d1;
4532   ex->arrays[ORC_VAR_S1] = (void *) s1;
4533   ex->arrays[ORC_VAR_S2] = (void *) s2;
4534   ex->arrays[ORC_VAR_S3] = (void *) s3;
4535   ex->params[ORC_VAR_P1] = p1;
4536   ex->params[ORC_VAR_P2] = p2;
4537   ex->params[ORC_VAR_P3] = p3;
4538
4539   func = p->code_exec;
4540   func (ex);
4541 }
4542 #endif
4543
4544
4545 /* orc_matrix3_100_offset_u8 */
4546 #ifdef DISABLE_ORC
4547 void
4548 orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
4549     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
4550     const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
4551     int n)
4552 {
4553   int i;
4554   orc_int8 *ORC_RESTRICT ptr0;
4555   const orc_int8 *ORC_RESTRICT ptr4;
4556   const orc_int8 *ORC_RESTRICT ptr5;
4557   const orc_int8 *ORC_RESTRICT ptr6;
4558   orc_int8 var35;
4559   orc_union16 var36;
4560   orc_int8 var37;
4561   orc_union16 var38;
4562   orc_int8 var39;
4563   orc_union16 var40;
4564   orc_union16 var41;
4565   orc_int8 var42;
4566   orc_union16 var43;
4567   orc_union16 var44;
4568   orc_union16 var45;
4569   orc_union16 var46;
4570   orc_union16 var47;
4571   orc_union16 var48;
4572   orc_union16 var49;
4573   orc_union16 var50;
4574   orc_union16 var51;
4575   orc_union16 var52;
4576   orc_union16 var53;
4577
4578   ptr0 = (orc_int8 *) d1;
4579   ptr4 = (orc_int8 *) s1;
4580   ptr5 = (orc_int8 *) s2;
4581   ptr6 = (orc_int8 *) s3;
4582
4583   /* 2: loadpw */
4584   var36.i = p1;
4585   /* 6: loadpw */
4586   var38.i = p2;
4587   /* 11: loadpw */
4588   var40.i = p3;
4589   /* 14: loadpw */
4590   var41.i = p4;
4591
4592   for (i = 0; i < n; i++) {
4593     /* 0: loadb */
4594     var35 = ptr4[i];
4595     /* 1: convubw */
4596     var43.i = (orc_uint8) var35;
4597     /* 3: mullw */
4598     var44.i = (var43.i * var36.i) & 0xffff;
4599     /* 4: loadb */
4600     var37 = ptr5[i];
4601     /* 5: convubw */
4602     var45.i = (orc_uint8) var37;
4603     /* 7: mullw */
4604     var46.i = (var45.i * var38.i) & 0xffff;
4605     /* 8: addw */
4606     var47.i = var44.i + var46.i;
4607     /* 9: loadb */
4608     var39 = ptr6[i];
4609     /* 10: convubw */
4610     var48.i = (orc_uint8) var39;
4611     /* 12: mullw */
4612     var49.i = (var48.i * var40.i) & 0xffff;
4613     /* 13: addw */
4614     var50.i = var47.i + var49.i;
4615     /* 15: addw */
4616     var51.i = var50.i + var41.i;
4617     /* 16: shrsw */
4618     var52.i = var51.i >> p5;
4619     /* 17: addw */
4620     var53.i = var52.i + var43.i;
4621     /* 18: convsuswb */
4622     var42 = ORC_CLAMP_UB (var53.i);
4623     /* 19: storeb */
4624     ptr0[i] = var42;
4625   }
4626
4627 }
4628
4629 #else
4630 static void
4631 _backup_orc_matrix3_100_offset_u8 (OrcExecutor * ORC_RESTRICT ex)
4632 {
4633   int i;
4634   int n = ex->n;
4635   orc_int8 *ORC_RESTRICT ptr0;
4636   const orc_int8 *ORC_RESTRICT ptr4;
4637   const orc_int8 *ORC_RESTRICT ptr5;
4638   const orc_int8 *ORC_RESTRICT ptr6;
4639   orc_int8 var35;
4640   orc_union16 var36;
4641   orc_int8 var37;
4642   orc_union16 var38;
4643   orc_int8 var39;
4644   orc_union16 var40;
4645   orc_union16 var41;
4646   orc_int8 var42;
4647   orc_union16 var43;
4648   orc_union16 var44;
4649   orc_union16 var45;
4650   orc_union16 var46;
4651   orc_union16 var47;
4652   orc_union16 var48;
4653   orc_union16 var49;
4654   orc_union16 var50;
4655   orc_union16 var51;
4656   orc_union16 var52;
4657   orc_union16 var53;
4658
4659   ptr0 = (orc_int8 *) ex->arrays[0];
4660   ptr4 = (orc_int8 *) ex->arrays[4];
4661   ptr5 = (orc_int8 *) ex->arrays[5];
4662   ptr6 = (orc_int8 *) ex->arrays[6];
4663
4664   /* 2: loadpw */
4665   var36.i = ex->params[24];
4666   /* 6: loadpw */
4667   var38.i = ex->params[25];
4668   /* 11: loadpw */
4669   var40.i = ex->params[26];
4670   /* 14: loadpw */
4671   var41.i = ex->params[27];
4672
4673   for (i = 0; i < n; i++) {
4674     /* 0: loadb */
4675     var35 = ptr4[i];
4676     /* 1: convubw */
4677     var43.i = (orc_uint8) var35;
4678     /* 3: mullw */
4679     var44.i = (var43.i * var36.i) & 0xffff;
4680     /* 4: loadb */
4681     var37 = ptr5[i];
4682     /* 5: convubw */
4683     var45.i = (orc_uint8) var37;
4684     /* 7: mullw */
4685     var46.i = (var45.i * var38.i) & 0xffff;
4686     /* 8: addw */
4687     var47.i = var44.i + var46.i;
4688     /* 9: loadb */
4689     var39 = ptr6[i];
4690     /* 10: convubw */
4691     var48.i = (orc_uint8) var39;
4692     /* 12: mullw */
4693     var49.i = (var48.i * var40.i) & 0xffff;
4694     /* 13: addw */
4695     var50.i = var47.i + var49.i;
4696     /* 15: addw */
4697     var51.i = var50.i + var41.i;
4698     /* 16: shrsw */
4699     var52.i = var51.i >> ex->params[28];
4700     /* 17: addw */
4701     var53.i = var52.i + var43.i;
4702     /* 18: convsuswb */
4703     var42 = ORC_CLAMP_UB (var53.i);
4704     /* 19: storeb */
4705     ptr0[i] = var42;
4706   }
4707
4708 }
4709
4710 void
4711 orc_matrix3_100_offset_u8 (guint8 * ORC_RESTRICT d1,
4712     const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2,
4713     const guint8 * ORC_RESTRICT s3, int p1, int p2, int p3, int p4, int p5,
4714     int n)
4715 {
4716   OrcExecutor _ex, *ex = &_ex;
4717   static volatile int p_inited = 0;
4718   static OrcProgram *p = 0;
4719   void (*func) (OrcExecutor *);
4720
4721   if (!p_inited) {
4722     orc_once_mutex_lock ();
4723     if (!p_inited) {
4724
4725       p = orc_program_new ();
4726       orc_program_set_name (p, "orc_matrix3_100_offset_u8");
4727       orc_program_set_backup_function (p, _backup_orc_matrix3_100_offset_u8);
4728       orc_program_add_destination (p, 1, "d1");
4729       orc_program_add_source (p, 1, "s1");
4730       orc_program_add_source (p, 1, "s2");
4731       orc_program_add_source (p, 1, "s3");
4732       orc_program_add_parameter (p, 2, "p1");
4733       orc_program_add_parameter (p, 2, "p2");
4734       orc_program_add_parameter (p, 2, "p3");
4735       orc_program_add_parameter (p, 2, "p4");
4736       orc_program_add_parameter (p, 2, "p5");
4737       orc_program_add_temporary (p, 2, "t1");
4738       orc_program_add_temporary (p, 2, "t2");
4739       orc_program_add_temporary (p, 2, "t3");
4740
4741       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1,
4742           ORC_VAR_D1);
4743       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_P1,
4744           ORC_VAR_D1);
4745       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
4746           ORC_VAR_D1);
4747       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
4748           ORC_VAR_D1);
4749       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4750           ORC_VAR_D1);
4751       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
4752           ORC_VAR_D1);
4753       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
4754           ORC_VAR_D1);
4755       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4756           ORC_VAR_D1);
4757       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
4758           ORC_VAR_D1);
4759       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
4760           ORC_VAR_D1);
4761       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T3,
4762           ORC_VAR_D1);
4763       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
4764           ORC_VAR_D1, ORC_VAR_D1);
4765
4766       orc_program_compile (p);
4767     }
4768     p_inited = TRUE;
4769     orc_once_mutex_unlock ();
4770   }
4771   ex->program = p;
4772
4773   ex->n = n;
4774   ex->arrays[ORC_VAR_D1] = d1;
4775   ex->arrays[ORC_VAR_S1] = (void *) s1;
4776   ex->arrays[ORC_VAR_S2] = (void *) s2;
4777   ex->arrays[ORC_VAR_S3] = (void *) s3;
4778   ex->params[ORC_VAR_P1] = p1;
4779   ex->params[ORC_VAR_P2] = p2;
4780   ex->params[ORC_VAR_P3] = p3;
4781   ex->params[ORC_VAR_P4] = p4;
4782   ex->params[ORC_VAR_P5] = p5;
4783
4784   func = p->code_exec;
4785   func (ex);
4786 }
4787 #endif
4788
4789
4790 /* orc_matrix3_000_u8 */
4791 #ifdef DISABLE_ORC
4792 void
4793 orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4794     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4795     int p2, int p3, int p4, int p5, int n)
4796 {
4797   int i;
4798   orc_int8 *ORC_RESTRICT ptr0;
4799   const orc_int8 *ORC_RESTRICT ptr4;
4800   const orc_int8 *ORC_RESTRICT ptr5;
4801   const orc_int8 *ORC_RESTRICT ptr6;
4802   orc_int8 var34;
4803   orc_union16 var35;
4804   orc_int8 var36;
4805   orc_union16 var37;
4806   orc_int8 var38;
4807   orc_union16 var39;
4808   orc_union16 var40;
4809   orc_int8 var41;
4810   orc_union16 var42;
4811   orc_union16 var43;
4812   orc_union16 var44;
4813   orc_union16 var45;
4814   orc_union16 var46;
4815   orc_union16 var47;
4816   orc_union16 var48;
4817   orc_union16 var49;
4818   orc_union16 var50;
4819   orc_union16 var51;
4820
4821   ptr0 = (orc_int8 *) d1;
4822   ptr4 = (orc_int8 *) s1;
4823   ptr5 = (orc_int8 *) s2;
4824   ptr6 = (orc_int8 *) s3;
4825
4826   /* 2: loadpw */
4827   var35.i = p1;
4828   /* 6: loadpw */
4829   var37.i = p2;
4830   /* 11: loadpw */
4831   var39.i = p3;
4832   /* 14: loadpw */
4833   var40.i = p4;
4834
4835   for (i = 0; i < n; i++) {
4836     /* 0: loadb */
4837     var34 = ptr4[i];
4838     /* 1: convubw */
4839     var42.i = (orc_uint8) var34;
4840     /* 3: mullw */
4841     var43.i = (var42.i * var35.i) & 0xffff;
4842     /* 4: loadb */
4843     var36 = ptr5[i];
4844     /* 5: convubw */
4845     var44.i = (orc_uint8) var36;
4846     /* 7: mullw */
4847     var45.i = (var44.i * var37.i) & 0xffff;
4848     /* 8: addw */
4849     var46.i = var43.i + var45.i;
4850     /* 9: loadb */
4851     var38 = ptr6[i];
4852     /* 10: convubw */
4853     var47.i = (orc_uint8) var38;
4854     /* 12: mullw */
4855     var48.i = (var47.i * var39.i) & 0xffff;
4856     /* 13: addw */
4857     var49.i = var46.i + var48.i;
4858     /* 15: addw */
4859     var50.i = var49.i + var40.i;
4860     /* 16: shrsw */
4861     var51.i = var50.i >> p5;
4862     /* 17: convwb */
4863     var41 = var51.i;
4864     /* 18: storeb */
4865     ptr0[i] = var41;
4866   }
4867
4868 }
4869
4870 #else
4871 static void
4872 _backup_orc_matrix3_000_u8 (OrcExecutor * ORC_RESTRICT ex)
4873 {
4874   int i;
4875   int n = ex->n;
4876   orc_int8 *ORC_RESTRICT ptr0;
4877   const orc_int8 *ORC_RESTRICT ptr4;
4878   const orc_int8 *ORC_RESTRICT ptr5;
4879   const orc_int8 *ORC_RESTRICT ptr6;
4880   orc_int8 var34;
4881   orc_union16 var35;
4882   orc_int8 var36;
4883   orc_union16 var37;
4884   orc_int8 var38;
4885   orc_union16 var39;
4886   orc_union16 var40;
4887   orc_int8 var41;
4888   orc_union16 var42;
4889   orc_union16 var43;
4890   orc_union16 var44;
4891   orc_union16 var45;
4892   orc_union16 var46;
4893   orc_union16 var47;
4894   orc_union16 var48;
4895   orc_union16 var49;
4896   orc_union16 var50;
4897   orc_union16 var51;
4898
4899   ptr0 = (orc_int8 *) ex->arrays[0];
4900   ptr4 = (orc_int8 *) ex->arrays[4];
4901   ptr5 = (orc_int8 *) ex->arrays[5];
4902   ptr6 = (orc_int8 *) ex->arrays[6];
4903
4904   /* 2: loadpw */
4905   var35.i = ex->params[24];
4906   /* 6: loadpw */
4907   var37.i = ex->params[25];
4908   /* 11: loadpw */
4909   var39.i = ex->params[26];
4910   /* 14: loadpw */
4911   var40.i = ex->params[27];
4912
4913   for (i = 0; i < n; i++) {
4914     /* 0: loadb */
4915     var34 = ptr4[i];
4916     /* 1: convubw */
4917     var42.i = (orc_uint8) var34;
4918     /* 3: mullw */
4919     var43.i = (var42.i * var35.i) & 0xffff;
4920     /* 4: loadb */
4921     var36 = ptr5[i];
4922     /* 5: convubw */
4923     var44.i = (orc_uint8) var36;
4924     /* 7: mullw */
4925     var45.i = (var44.i * var37.i) & 0xffff;
4926     /* 8: addw */
4927     var46.i = var43.i + var45.i;
4928     /* 9: loadb */
4929     var38 = ptr6[i];
4930     /* 10: convubw */
4931     var47.i = (orc_uint8) var38;
4932     /* 12: mullw */
4933     var48.i = (var47.i * var39.i) & 0xffff;
4934     /* 13: addw */
4935     var49.i = var46.i + var48.i;
4936     /* 15: addw */
4937     var50.i = var49.i + var40.i;
4938     /* 16: shrsw */
4939     var51.i = var50.i >> ex->params[28];
4940     /* 17: convwb */
4941     var41 = var51.i;
4942     /* 18: storeb */
4943     ptr0[i] = var41;
4944   }
4945
4946 }
4947
4948 void
4949 orc_matrix3_000_u8 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1,
4950     const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, int p1,
4951     int p2, int p3, int p4, int p5, int n)
4952 {
4953   OrcExecutor _ex, *ex = &_ex;
4954   static volatile int p_inited = 0;
4955   static OrcProgram *p = 0;
4956   void (*func) (OrcExecutor *);
4957
4958   if (!p_inited) {
4959     orc_once_mutex_lock ();
4960     if (!p_inited) {
4961
4962       p = orc_program_new ();
4963       orc_program_set_name (p, "orc_matrix3_000_u8");
4964       orc_program_set_backup_function (p, _backup_orc_matrix3_000_u8);
4965       orc_program_add_destination (p, 1, "d1");
4966       orc_program_add_source (p, 1, "s1");
4967       orc_program_add_source (p, 1, "s2");
4968       orc_program_add_source (p, 1, "s3");
4969       orc_program_add_parameter (p, 2, "p1");
4970       orc_program_add_parameter (p, 2, "p2");
4971       orc_program_add_parameter (p, 2, "p3");
4972       orc_program_add_parameter (p, 2, "p4");
4973       orc_program_add_parameter (p, 2, "p5");
4974       orc_program_add_temporary (p, 2, "t1");
4975       orc_program_add_temporary (p, 2, "t2");
4976
4977       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
4978           ORC_VAR_D1);
4979       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
4980           ORC_VAR_D1);
4981       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
4982           ORC_VAR_D1);
4983       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
4984           ORC_VAR_D1);
4985       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4986           ORC_VAR_D1);
4987       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
4988           ORC_VAR_D1);
4989       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
4990           ORC_VAR_D1);
4991       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
4992           ORC_VAR_D1);
4993       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P4,
4994           ORC_VAR_D1);
4995       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P5,
4996           ORC_VAR_D1);
4997       orc_program_append_2 (p, "convwb", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
4998           ORC_VAR_D1);
4999
5000       orc_program_compile (p);
5001     }
5002     p_inited = TRUE;
5003     orc_once_mutex_unlock ();
5004   }
5005   ex->program = p;
5006
5007   ex->n = n;
5008   ex->arrays[ORC_VAR_D1] = d1;
5009   ex->arrays[ORC_VAR_S1] = (void *) s1;
5010   ex->arrays[ORC_VAR_S2] = (void *) s2;
5011   ex->arrays[ORC_VAR_S3] = (void *) s3;
5012   ex->params[ORC_VAR_P1] = p1;
5013   ex->params[ORC_VAR_P2] = p2;
5014   ex->params[ORC_VAR_P3] = p3;
5015   ex->params[ORC_VAR_P4] = p4;
5016   ex->params[ORC_VAR_P5] = p5;
5017
5018   func = p->code_exec;
5019   func (ex);
5020 }
5021 #endif
5022
5023
5024 /* orc_pack_123x */
5025 #ifdef DISABLE_ORC
5026 void
5027 orc_pack_123x (guint32 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1,
5028     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
5029     int p1, int n)
5030 {
5031   int i;
5032   orc_union32 *ORC_RESTRICT ptr0;
5033   const orc_int8 *ORC_RESTRICT ptr4;
5034   const orc_int8 *ORC_RESTRICT ptr5;
5035   const orc_int8 *ORC_RESTRICT ptr6;
5036   orc_int8 var34;
5037   orc_int8 var35;
5038   orc_int8 var36;
5039   orc_int8 var37;
5040   orc_union32 var38;
5041   orc_union16 var39;
5042   orc_union16 var40;
5043
5044   ptr0 = (orc_union32 *) d1;
5045   ptr4 = (orc_int8 *) s1;
5046   ptr5 = (orc_int8 *) s2;
5047   ptr6 = (orc_int8 *) s3;
5048
5049   /* 4: loadpb */
5050   var37 = p1;
5051
5052   for (i = 0; i < n; i++) {
5053     /* 0: loadb */
5054     var34 = ptr4[i];
5055     /* 1: loadb */
5056     var35 = ptr5[i];
5057     /* 2: mergebw */
5058     {
5059       orc_union16 _dest;
5060       _dest.x2[0] = var34;
5061       _dest.x2[1] = var35;
5062       var39.i = _dest.i;
5063     }
5064     /* 3: loadb */
5065     var36 = ptr6[i];
5066     /* 5: mergebw */
5067     {
5068       orc_union16 _dest;
5069       _dest.x2[0] = var36;
5070       _dest.x2[1] = var37;
5071       var40.i = _dest.i;
5072     }
5073     /* 6: mergewl */
5074     {
5075       orc_union32 _dest;
5076       _dest.x2[0] = var39.i;
5077       _dest.x2[1] = var40.i;
5078       var38.i = _dest.i;
5079     }
5080     /* 7: storel */
5081     ptr0[i] = var38;
5082   }
5083
5084 }
5085
5086 #else
5087 static void
5088 _backup_orc_pack_123x (OrcExecutor * ORC_RESTRICT ex)
5089 {
5090   int i;
5091   int n = ex->n;
5092   orc_union32 *ORC_RESTRICT ptr0;
5093   const orc_int8 *ORC_RESTRICT ptr4;
5094   const orc_int8 *ORC_RESTRICT ptr5;
5095   const orc_int8 *ORC_RESTRICT ptr6;
5096   orc_int8 var34;
5097   orc_int8 var35;
5098   orc_int8 var36;
5099   orc_int8 var37;
5100   orc_union32 var38;
5101   orc_union16 var39;
5102   orc_union16 var40;
5103
5104   ptr0 = (orc_union32 *) ex->arrays[0];
5105   ptr4 = (orc_int8 *) ex->arrays[4];
5106   ptr5 = (orc_int8 *) ex->arrays[5];
5107   ptr6 = (orc_int8 *) ex->arrays[6];
5108
5109   /* 4: loadpb */
5110   var37 = ex->params[24];
5111
5112   for (i = 0; i < n; i++) {
5113     /* 0: loadb */
5114     var34 = ptr4[i];
5115     /* 1: loadb */
5116     var35 = ptr5[i];
5117     /* 2: mergebw */
5118     {
5119       orc_union16 _dest;
5120       _dest.x2[0] = var34;
5121       _dest.x2[1] = var35;
5122       var39.i = _dest.i;
5123     }
5124     /* 3: loadb */
5125     var36 = ptr6[i];
5126     /* 5: mergebw */
5127     {
5128       orc_union16 _dest;
5129       _dest.x2[0] = var36;
5130       _dest.x2[1] = var37;
5131       var40.i = _dest.i;
5132     }
5133     /* 6: mergewl */
5134     {
5135       orc_union32 _dest;
5136       _dest.x2[0] = var39.i;
5137       _dest.x2[1] = var40.i;
5138       var38.i = _dest.i;
5139     }
5140     /* 7: storel */
5141     ptr0[i] = var38;
5142   }
5143
5144 }
5145
5146 void
5147 orc_pack_123x (guint32 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1,
5148     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
5149     int p1, int n)
5150 {
5151   OrcExecutor _ex, *ex = &_ex;
5152   static volatile int p_inited = 0;
5153   static OrcProgram *p = 0;
5154   void (*func) (OrcExecutor *);
5155
5156   if (!p_inited) {
5157     orc_once_mutex_lock ();
5158     if (!p_inited) {
5159
5160       p = orc_program_new ();
5161       orc_program_set_name (p, "orc_pack_123x");
5162       orc_program_set_backup_function (p, _backup_orc_pack_123x);
5163       orc_program_add_destination (p, 4, "d1");
5164       orc_program_add_source (p, 1, "s1");
5165       orc_program_add_source (p, 1, "s2");
5166       orc_program_add_source (p, 1, "s3");
5167       orc_program_add_parameter (p, 1, "p1");
5168       orc_program_add_temporary (p, 2, "t1");
5169       orc_program_add_temporary (p, 2, "t2");
5170
5171       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
5172           ORC_VAR_D1);
5173       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_P1,
5174           ORC_VAR_D1);
5175       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
5176           ORC_VAR_D1);
5177
5178       orc_program_compile (p);
5179     }
5180     p_inited = TRUE;
5181     orc_once_mutex_unlock ();
5182   }
5183   ex->program = p;
5184
5185   ex->n = n;
5186   ex->arrays[ORC_VAR_D1] = d1;
5187   ex->arrays[ORC_VAR_S1] = (void *) s1;
5188   ex->arrays[ORC_VAR_S2] = (void *) s2;
5189   ex->arrays[ORC_VAR_S3] = (void *) s3;
5190   ex->params[ORC_VAR_P1] = p1;
5191
5192   func = p->code_exec;
5193   func (ex);
5194 }
5195 #endif
5196
5197
5198 /* orc_pack_x123 */
5199 #ifdef DISABLE_ORC
5200 void
5201 orc_pack_x123 (guint32 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1,
5202     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
5203     int p1, int n)
5204 {
5205   int i;
5206   orc_union32 *ORC_RESTRICT ptr0;
5207   const orc_int8 *ORC_RESTRICT ptr4;
5208   const orc_int8 *ORC_RESTRICT ptr5;
5209   const orc_int8 *ORC_RESTRICT ptr6;
5210   orc_int8 var34;
5211   orc_int8 var35;
5212   orc_int8 var36;
5213   orc_int8 var37;
5214   orc_union32 var38;
5215   orc_union16 var39;
5216   orc_union16 var40;
5217
5218   ptr0 = (orc_union32 *) d1;
5219   ptr4 = (orc_int8 *) s1;
5220   ptr5 = (orc_int8 *) s2;
5221   ptr6 = (orc_int8 *) s3;
5222
5223   /* 0: loadpb */
5224   var34 = p1;
5225
5226   for (i = 0; i < n; i++) {
5227     /* 1: loadb */
5228     var35 = ptr4[i];
5229     /* 2: mergebw */
5230     {
5231       orc_union16 _dest;
5232       _dest.x2[0] = var34;
5233       _dest.x2[1] = var35;
5234       var39.i = _dest.i;
5235     }
5236     /* 3: loadb */
5237     var36 = ptr5[i];
5238     /* 4: loadb */
5239     var37 = ptr6[i];
5240     /* 5: mergebw */
5241     {
5242       orc_union16 _dest;
5243       _dest.x2[0] = var36;
5244       _dest.x2[1] = var37;
5245       var40.i = _dest.i;
5246     }
5247     /* 6: mergewl */
5248     {
5249       orc_union32 _dest;
5250       _dest.x2[0] = var39.i;
5251       _dest.x2[1] = var40.i;
5252       var38.i = _dest.i;
5253     }
5254     /* 7: storel */
5255     ptr0[i] = var38;
5256   }
5257
5258 }
5259
5260 #else
5261 static void
5262 _backup_orc_pack_x123 (OrcExecutor * ORC_RESTRICT ex)
5263 {
5264   int i;
5265   int n = ex->n;
5266   orc_union32 *ORC_RESTRICT ptr0;
5267   const orc_int8 *ORC_RESTRICT ptr4;
5268   const orc_int8 *ORC_RESTRICT ptr5;
5269   const orc_int8 *ORC_RESTRICT ptr6;
5270   orc_int8 var34;
5271   orc_int8 var35;
5272   orc_int8 var36;
5273   orc_int8 var37;
5274   orc_union32 var38;
5275   orc_union16 var39;
5276   orc_union16 var40;
5277
5278   ptr0 = (orc_union32 *) ex->arrays[0];
5279   ptr4 = (orc_int8 *) ex->arrays[4];
5280   ptr5 = (orc_int8 *) ex->arrays[5];
5281   ptr6 = (orc_int8 *) ex->arrays[6];
5282
5283   /* 0: loadpb */
5284   var34 = ex->params[24];
5285
5286   for (i = 0; i < n; i++) {
5287     /* 1: loadb */
5288     var35 = ptr4[i];
5289     /* 2: mergebw */
5290     {
5291       orc_union16 _dest;
5292       _dest.x2[0] = var34;
5293       _dest.x2[1] = var35;
5294       var39.i = _dest.i;
5295     }
5296     /* 3: loadb */
5297     var36 = ptr5[i];
5298     /* 4: loadb */
5299     var37 = ptr6[i];
5300     /* 5: mergebw */
5301     {
5302       orc_union16 _dest;
5303       _dest.x2[0] = var36;
5304       _dest.x2[1] = var37;
5305       var40.i = _dest.i;
5306     }
5307     /* 6: mergewl */
5308     {
5309       orc_union32 _dest;
5310       _dest.x2[0] = var39.i;
5311       _dest.x2[1] = var40.i;
5312       var38.i = _dest.i;
5313     }
5314     /* 7: storel */
5315     ptr0[i] = var38;
5316   }
5317
5318 }
5319
5320 void
5321 orc_pack_x123 (guint32 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1,
5322     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
5323     int p1, int n)
5324 {
5325   OrcExecutor _ex, *ex = &_ex;
5326   static volatile int p_inited = 0;
5327   static OrcProgram *p = 0;
5328   void (*func) (OrcExecutor *);
5329
5330   if (!p_inited) {
5331     orc_once_mutex_lock ();
5332     if (!p_inited) {
5333
5334       p = orc_program_new ();
5335       orc_program_set_name (p, "orc_pack_x123");
5336       orc_program_set_backup_function (p, _backup_orc_pack_x123);
5337       orc_program_add_destination (p, 4, "d1");
5338       orc_program_add_source (p, 1, "s1");
5339       orc_program_add_source (p, 1, "s2");
5340       orc_program_add_source (p, 1, "s3");
5341       orc_program_add_parameter (p, 1, "p1");
5342       orc_program_add_temporary (p, 2, "t1");
5343       orc_program_add_temporary (p, 2, "t2");
5344
5345       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_P1, ORC_VAR_S1,
5346           ORC_VAR_D1);
5347       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
5348           ORC_VAR_D1);
5349       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
5350           ORC_VAR_D1);
5351
5352       orc_program_compile (p);
5353     }
5354     p_inited = TRUE;
5355     orc_once_mutex_unlock ();
5356   }
5357   ex->program = p;
5358
5359   ex->n = n;
5360   ex->arrays[ORC_VAR_D1] = d1;
5361   ex->arrays[ORC_VAR_S1] = (void *) s1;
5362   ex->arrays[ORC_VAR_S2] = (void *) s2;
5363   ex->arrays[ORC_VAR_S3] = (void *) s3;
5364   ex->params[ORC_VAR_P1] = p1;
5365
5366   func = p->code_exec;
5367   func (ex);
5368 }
5369 #endif
5370
5371
5372 /* cogorc_combine2_u8 */
5373 #ifdef DISABLE_ORC
5374 void
5375 cogorc_combine2_u8 (orc_uint8 * ORC_RESTRICT d1,
5376     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
5377     int p1, int p2, int n)
5378 {
5379   int i;
5380   orc_int8 *ORC_RESTRICT ptr0;
5381   const orc_int8 *ORC_RESTRICT ptr4;
5382   const orc_int8 *ORC_RESTRICT ptr5;
5383   orc_int8 var34;
5384   orc_union16 var35;
5385   orc_int8 var36;
5386   orc_union16 var37;
5387   orc_int8 var38;
5388   orc_union16 var39;
5389   orc_union16 var40;
5390   orc_union16 var41;
5391   orc_union16 var42;
5392   orc_union16 var43;
5393   orc_union16 var44;
5394
5395   ptr0 = (orc_int8 *) d1;
5396   ptr4 = (orc_int8 *) s1;
5397   ptr5 = (orc_int8 *) s2;
5398
5399   /* 2: loadpw */
5400   var35.i = p1;
5401   /* 6: loadpw */
5402   var37.i = p2;
5403
5404   for (i = 0; i < n; i++) {
5405     /* 0: loadb */
5406     var34 = ptr4[i];
5407     /* 1: convubw */
5408     var39.i = (orc_uint8) var34;
5409     /* 3: mullw */
5410     var40.i = (var39.i * var35.i) & 0xffff;
5411     /* 4: loadb */
5412     var36 = ptr5[i];
5413     /* 5: convubw */
5414     var41.i = (orc_uint8) var36;
5415     /* 7: mullw */
5416     var42.i = (var41.i * var37.i) & 0xffff;
5417     /* 8: addw */
5418     var43.i = var40.i + var42.i;
5419     /* 9: shruw */
5420     var44.i = ((orc_uint16) var43.i) >> 8;
5421     /* 10: convsuswb */
5422     var38 = ORC_CLAMP_UB (var44.i);
5423     /* 11: storeb */
5424     ptr0[i] = var38;
5425   }
5426
5427 }
5428
5429 #else
5430 static void
5431 _backup_cogorc_combine2_u8 (OrcExecutor * ORC_RESTRICT ex)
5432 {
5433   int i;
5434   int n = ex->n;
5435   orc_int8 *ORC_RESTRICT ptr0;
5436   const orc_int8 *ORC_RESTRICT ptr4;
5437   const orc_int8 *ORC_RESTRICT ptr5;
5438   orc_int8 var34;
5439   orc_union16 var35;
5440   orc_int8 var36;
5441   orc_union16 var37;
5442   orc_int8 var38;
5443   orc_union16 var39;
5444   orc_union16 var40;
5445   orc_union16 var41;
5446   orc_union16 var42;
5447   orc_union16 var43;
5448   orc_union16 var44;
5449
5450   ptr0 = (orc_int8 *) ex->arrays[0];
5451   ptr4 = (orc_int8 *) ex->arrays[4];
5452   ptr5 = (orc_int8 *) ex->arrays[5];
5453
5454   /* 2: loadpw */
5455   var35.i = ex->params[24];
5456   /* 6: loadpw */
5457   var37.i = ex->params[25];
5458
5459   for (i = 0; i < n; i++) {
5460     /* 0: loadb */
5461     var34 = ptr4[i];
5462     /* 1: convubw */
5463     var39.i = (orc_uint8) var34;
5464     /* 3: mullw */
5465     var40.i = (var39.i * var35.i) & 0xffff;
5466     /* 4: loadb */
5467     var36 = ptr5[i];
5468     /* 5: convubw */
5469     var41.i = (orc_uint8) var36;
5470     /* 7: mullw */
5471     var42.i = (var41.i * var37.i) & 0xffff;
5472     /* 8: addw */
5473     var43.i = var40.i + var42.i;
5474     /* 9: shruw */
5475     var44.i = ((orc_uint16) var43.i) >> 8;
5476     /* 10: convsuswb */
5477     var38 = ORC_CLAMP_UB (var44.i);
5478     /* 11: storeb */
5479     ptr0[i] = var38;
5480   }
5481
5482 }
5483
5484 void
5485 cogorc_combine2_u8 (orc_uint8 * ORC_RESTRICT d1,
5486     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
5487     int p1, int p2, int n)
5488 {
5489   OrcExecutor _ex, *ex = &_ex;
5490   static volatile int p_inited = 0;
5491   static OrcProgram *p = 0;
5492   void (*func) (OrcExecutor *);
5493
5494   if (!p_inited) {
5495     orc_once_mutex_lock ();
5496     if (!p_inited) {
5497
5498       p = orc_program_new ();
5499       orc_program_set_name (p, "cogorc_combine2_u8");
5500       orc_program_set_backup_function (p, _backup_cogorc_combine2_u8);
5501       orc_program_add_destination (p, 1, "d1");
5502       orc_program_add_source (p, 1, "s1");
5503       orc_program_add_source (p, 1, "s2");
5504       orc_program_add_constant (p, 4, 0x00000008, "c1");
5505       orc_program_add_parameter (p, 2, "p1");
5506       orc_program_add_parameter (p, 2, "p2");
5507       orc_program_add_temporary (p, 2, "t1");
5508       orc_program_add_temporary (p, 2, "t2");
5509
5510       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
5511           ORC_VAR_D1);
5512       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
5513           ORC_VAR_D1);
5514       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
5515           ORC_VAR_D1);
5516       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
5517           ORC_VAR_D1);
5518       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
5519           ORC_VAR_D1);
5520       orc_program_append_2 (p, "shruw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
5521           ORC_VAR_D1);
5522       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
5523           ORC_VAR_D1, ORC_VAR_D1);
5524
5525       orc_program_compile (p);
5526     }
5527     p_inited = TRUE;
5528     orc_once_mutex_unlock ();
5529   }
5530   ex->program = p;
5531
5532   ex->n = n;
5533   ex->arrays[ORC_VAR_D1] = d1;
5534   ex->arrays[ORC_VAR_S1] = (void *) s1;
5535   ex->arrays[ORC_VAR_S2] = (void *) s2;
5536   ex->params[ORC_VAR_P1] = p1;
5537   ex->params[ORC_VAR_P2] = p2;
5538
5539   func = p->code_exec;
5540   func (ex);
5541 }
5542 #endif
5543
5544
5545 /* cogorc_combine4_u8 */
5546 #ifdef DISABLE_ORC
5547 void
5548 cogorc_combine4_u8 (orc_uint8 * ORC_RESTRICT d1,
5549     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
5550     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
5551     int p1, int p2, int p3, int p4, int n)
5552 {
5553   int i;
5554   orc_int8 *ORC_RESTRICT ptr0;
5555   const orc_int8 *ORC_RESTRICT ptr4;
5556   const orc_int8 *ORC_RESTRICT ptr5;
5557   const orc_int8 *ORC_RESTRICT ptr6;
5558   const orc_int8 *ORC_RESTRICT ptr7;
5559   orc_int8 var34;
5560   orc_union16 var35;
5561   orc_int8 var36;
5562   orc_union16 var37;
5563   orc_int8 var38;
5564   orc_union16 var39;
5565   orc_int8 var40;
5566   orc_union16 var41;
5567   orc_union16 var42;
5568   orc_int8 var43;
5569   orc_union16 var44;
5570   orc_union16 var45;
5571   orc_union16 var46;
5572   orc_union16 var47;
5573   orc_union16 var48;
5574   orc_union16 var49;
5575   orc_union16 var50;
5576   orc_union16 var51;
5577   orc_union16 var52;
5578   orc_union16 var53;
5579   orc_union16 var54;
5580   orc_union16 var55;
5581   orc_union16 var56;
5582
5583   ptr0 = (orc_int8 *) d1;
5584   ptr4 = (orc_int8 *) s1;
5585   ptr5 = (orc_int8 *) s2;
5586   ptr6 = (orc_int8 *) s3;
5587   ptr7 = (orc_int8 *) s4;
5588
5589   /* 2: loadpw */
5590   var35.i = p1;
5591   /* 6: loadpw */
5592   var37.i = p2;
5593   /* 11: loadpw */
5594   var39.i = p3;
5595   /* 16: loadpw */
5596   var41.i = p4;
5597   /* 19: loadpw */
5598   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
5599
5600   for (i = 0; i < n; i++) {
5601     /* 0: loadb */
5602     var34 = ptr4[i];
5603     /* 1: convubw */
5604     var44.i = (orc_uint8) var34;
5605     /* 3: mullw */
5606     var45.i = (var44.i * var35.i) & 0xffff;
5607     /* 4: loadb */
5608     var36 = ptr5[i];
5609     /* 5: convubw */
5610     var46.i = (orc_uint8) var36;
5611     /* 7: mullw */
5612     var47.i = (var46.i * var37.i) & 0xffff;
5613     /* 8: addw */
5614     var48.i = var45.i + var47.i;
5615     /* 9: loadb */
5616     var38 = ptr6[i];
5617     /* 10: convubw */
5618     var49.i = (orc_uint8) var38;
5619     /* 12: mullw */
5620     var50.i = (var49.i * var39.i) & 0xffff;
5621     /* 13: addw */
5622     var51.i = var48.i + var50.i;
5623     /* 14: loadb */
5624     var40 = ptr7[i];
5625     /* 15: convubw */
5626     var52.i = (orc_uint8) var40;
5627     /* 17: mullw */
5628     var53.i = (var52.i * var41.i) & 0xffff;
5629     /* 18: addw */
5630     var54.i = var51.i + var53.i;
5631     /* 20: addw */
5632     var55.i = var54.i + var42.i;
5633     /* 21: shrsw */
5634     var56.i = var55.i >> 6;
5635     /* 22: convsuswb */
5636     var43 = ORC_CLAMP_UB (var56.i);
5637     /* 23: storeb */
5638     ptr0[i] = var43;
5639   }
5640
5641 }
5642
5643 #else
5644 static void
5645 _backup_cogorc_combine4_u8 (OrcExecutor * ORC_RESTRICT ex)
5646 {
5647   int i;
5648   int n = ex->n;
5649   orc_int8 *ORC_RESTRICT ptr0;
5650   const orc_int8 *ORC_RESTRICT ptr4;
5651   const orc_int8 *ORC_RESTRICT ptr5;
5652   const orc_int8 *ORC_RESTRICT ptr6;
5653   const orc_int8 *ORC_RESTRICT ptr7;
5654   orc_int8 var34;
5655   orc_union16 var35;
5656   orc_int8 var36;
5657   orc_union16 var37;
5658   orc_int8 var38;
5659   orc_union16 var39;
5660   orc_int8 var40;
5661   orc_union16 var41;
5662   orc_union16 var42;
5663   orc_int8 var43;
5664   orc_union16 var44;
5665   orc_union16 var45;
5666   orc_union16 var46;
5667   orc_union16 var47;
5668   orc_union16 var48;
5669   orc_union16 var49;
5670   orc_union16 var50;
5671   orc_union16 var51;
5672   orc_union16 var52;
5673   orc_union16 var53;
5674   orc_union16 var54;
5675   orc_union16 var55;
5676   orc_union16 var56;
5677
5678   ptr0 = (orc_int8 *) ex->arrays[0];
5679   ptr4 = (orc_int8 *) ex->arrays[4];
5680   ptr5 = (orc_int8 *) ex->arrays[5];
5681   ptr6 = (orc_int8 *) ex->arrays[6];
5682   ptr7 = (orc_int8 *) ex->arrays[7];
5683
5684   /* 2: loadpw */
5685   var35.i = ex->params[24];
5686   /* 6: loadpw */
5687   var37.i = ex->params[25];
5688   /* 11: loadpw */
5689   var39.i = ex->params[26];
5690   /* 16: loadpw */
5691   var41.i = ex->params[27];
5692   /* 19: loadpw */
5693   var42.i = (int) 0x00000020;   /* 32 or 1.58101e-322f */
5694
5695   for (i = 0; i < n; i++) {
5696     /* 0: loadb */
5697     var34 = ptr4[i];
5698     /* 1: convubw */
5699     var44.i = (orc_uint8) var34;
5700     /* 3: mullw */
5701     var45.i = (var44.i * var35.i) & 0xffff;
5702     /* 4: loadb */
5703     var36 = ptr5[i];
5704     /* 5: convubw */
5705     var46.i = (orc_uint8) var36;
5706     /* 7: mullw */
5707     var47.i = (var46.i * var37.i) & 0xffff;
5708     /* 8: addw */
5709     var48.i = var45.i + var47.i;
5710     /* 9: loadb */
5711     var38 = ptr6[i];
5712     /* 10: convubw */
5713     var49.i = (orc_uint8) var38;
5714     /* 12: mullw */
5715     var50.i = (var49.i * var39.i) & 0xffff;
5716     /* 13: addw */
5717     var51.i = var48.i + var50.i;
5718     /* 14: loadb */
5719     var40 = ptr7[i];
5720     /* 15: convubw */
5721     var52.i = (orc_uint8) var40;
5722     /* 17: mullw */
5723     var53.i = (var52.i * var41.i) & 0xffff;
5724     /* 18: addw */
5725     var54.i = var51.i + var53.i;
5726     /* 20: addw */
5727     var55.i = var54.i + var42.i;
5728     /* 21: shrsw */
5729     var56.i = var55.i >> 6;
5730     /* 22: convsuswb */
5731     var43 = ORC_CLAMP_UB (var56.i);
5732     /* 23: storeb */
5733     ptr0[i] = var43;
5734   }
5735
5736 }
5737
5738 void
5739 cogorc_combine4_u8 (orc_uint8 * ORC_RESTRICT d1,
5740     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
5741     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
5742     int p1, int p2, int p3, int p4, int n)
5743 {
5744   OrcExecutor _ex, *ex = &_ex;
5745   static volatile int p_inited = 0;
5746   static OrcProgram *p = 0;
5747   void (*func) (OrcExecutor *);
5748
5749   if (!p_inited) {
5750     orc_once_mutex_lock ();
5751     if (!p_inited) {
5752
5753       p = orc_program_new ();
5754       orc_program_set_name (p, "cogorc_combine4_u8");
5755       orc_program_set_backup_function (p, _backup_cogorc_combine4_u8);
5756       orc_program_add_destination (p, 1, "d1");
5757       orc_program_add_source (p, 1, "s1");
5758       orc_program_add_source (p, 1, "s2");
5759       orc_program_add_source (p, 1, "s3");
5760       orc_program_add_source (p, 1, "s4");
5761       orc_program_add_constant (p, 4, 0x00000020, "c1");
5762       orc_program_add_constant (p, 4, 0x00000006, "c2");
5763       orc_program_add_parameter (p, 2, "p1");
5764       orc_program_add_parameter (p, 2, "p2");
5765       orc_program_add_parameter (p, 2, "p3");
5766       orc_program_add_parameter (p, 2, "p4");
5767       orc_program_add_temporary (p, 2, "t1");
5768       orc_program_add_temporary (p, 2, "t2");
5769
5770       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
5771           ORC_VAR_D1);
5772       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_P1,
5773           ORC_VAR_D1);
5774       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_D1,
5775           ORC_VAR_D1);
5776       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P2,
5777           ORC_VAR_D1);
5778       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
5779           ORC_VAR_D1);
5780       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S3, ORC_VAR_D1,
5781           ORC_VAR_D1);
5782       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P3,
5783           ORC_VAR_D1);
5784       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
5785           ORC_VAR_D1);
5786       orc_program_append_2 (p, "convubw", 0, ORC_VAR_T2, ORC_VAR_S4, ORC_VAR_D1,
5787           ORC_VAR_D1);
5788       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_P4,
5789           ORC_VAR_D1);
5790       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
5791           ORC_VAR_D1);
5792       orc_program_append_2 (p, "addw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
5793           ORC_VAR_D1);
5794       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C2,
5795           ORC_VAR_D1);
5796       orc_program_append_2 (p, "convsuswb", 0, ORC_VAR_D1, ORC_VAR_T1,
5797           ORC_VAR_D1, ORC_VAR_D1);
5798
5799       orc_program_compile (p);
5800     }
5801     p_inited = TRUE;
5802     orc_once_mutex_unlock ();
5803   }
5804   ex->program = p;
5805
5806   ex->n = n;
5807   ex->arrays[ORC_VAR_D1] = d1;
5808   ex->arrays[ORC_VAR_S1] = (void *) s1;
5809   ex->arrays[ORC_VAR_S2] = (void *) s2;
5810   ex->arrays[ORC_VAR_S3] = (void *) s3;
5811   ex->arrays[ORC_VAR_S4] = (void *) s4;
5812   ex->params[ORC_VAR_P1] = p1;
5813   ex->params[ORC_VAR_P2] = p2;
5814   ex->params[ORC_VAR_P3] = p3;
5815   ex->params[ORC_VAR_P4] = p4;
5816
5817   func = p->code_exec;
5818   func (ex);
5819 }
5820 #endif
5821
5822
5823 /* cogorc_unpack_axyz_0 */
5824 #ifdef DISABLE_ORC
5825 void
5826 cogorc_unpack_axyz_0 (orc_uint8 * ORC_RESTRICT d1,
5827     const orc_uint32 * ORC_RESTRICT s1, int n)
5828 {
5829   int i;
5830   orc_int8 *ORC_RESTRICT ptr0;
5831   const orc_union32 *ORC_RESTRICT ptr4;
5832   orc_union32 var33;
5833   orc_int8 var34;
5834   orc_union16 var35;
5835
5836   ptr0 = (orc_int8 *) d1;
5837   ptr4 = (orc_union32 *) s1;
5838
5839
5840   for (i = 0; i < n; i++) {
5841     /* 0: loadl */
5842     var33 = ptr4[i];
5843     /* 1: select0lw */
5844     {
5845       orc_union32 _src;
5846       _src.i = var33.i;
5847       var35.i = _src.x2[0];
5848     }
5849     /* 2: select0wb */
5850     {
5851       orc_union16 _src;
5852       _src.i = var35.i;
5853       var34 = _src.x2[0];
5854     }
5855     /* 3: storeb */
5856     ptr0[i] = var34;
5857   }
5858
5859 }
5860
5861 #else
5862 static void
5863 _backup_cogorc_unpack_axyz_0 (OrcExecutor * ORC_RESTRICT ex)
5864 {
5865   int i;
5866   int n = ex->n;
5867   orc_int8 *ORC_RESTRICT ptr0;
5868   const orc_union32 *ORC_RESTRICT ptr4;
5869   orc_union32 var33;
5870   orc_int8 var34;
5871   orc_union16 var35;
5872
5873   ptr0 = (orc_int8 *) ex->arrays[0];
5874   ptr4 = (orc_union32 *) ex->arrays[4];
5875
5876
5877   for (i = 0; i < n; i++) {
5878     /* 0: loadl */
5879     var33 = ptr4[i];
5880     /* 1: select0lw */
5881     {
5882       orc_union32 _src;
5883       _src.i = var33.i;
5884       var35.i = _src.x2[0];
5885     }
5886     /* 2: select0wb */
5887     {
5888       orc_union16 _src;
5889       _src.i = var35.i;
5890       var34 = _src.x2[0];
5891     }
5892     /* 3: storeb */
5893     ptr0[i] = var34;
5894   }
5895
5896 }
5897
5898 void
5899 cogorc_unpack_axyz_0 (orc_uint8 * ORC_RESTRICT d1,
5900     const orc_uint32 * ORC_RESTRICT s1, int n)
5901 {
5902   OrcExecutor _ex, *ex = &_ex;
5903   static volatile int p_inited = 0;
5904   static OrcProgram *p = 0;
5905   void (*func) (OrcExecutor *);
5906
5907   if (!p_inited) {
5908     orc_once_mutex_lock ();
5909     if (!p_inited) {
5910
5911       p = orc_program_new ();
5912       orc_program_set_name (p, "cogorc_unpack_axyz_0");
5913       orc_program_set_backup_function (p, _backup_cogorc_unpack_axyz_0);
5914       orc_program_add_destination (p, 1, "d1");
5915       orc_program_add_source (p, 4, "s1");
5916       orc_program_add_temporary (p, 2, "t1");
5917
5918       orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
5919           ORC_VAR_D1, ORC_VAR_D1);
5920       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
5921           ORC_VAR_D1, ORC_VAR_D1);
5922
5923       orc_program_compile (p);
5924     }
5925     p_inited = TRUE;
5926     orc_once_mutex_unlock ();
5927   }
5928   ex->program = p;
5929
5930   ex->n = n;
5931   ex->arrays[ORC_VAR_D1] = d1;
5932   ex->arrays[ORC_VAR_S1] = (void *) s1;
5933
5934   func = p->code_exec;
5935   func (ex);
5936 }
5937 #endif
5938
5939
5940 /* cogorc_unpack_axyz_1 */
5941 #ifdef DISABLE_ORC
5942 void
5943 cogorc_unpack_axyz_1 (orc_uint8 * ORC_RESTRICT d1,
5944     const orc_uint32 * ORC_RESTRICT s1, int n)
5945 {
5946   int i;
5947   orc_int8 *ORC_RESTRICT ptr0;
5948   const orc_union32 *ORC_RESTRICT ptr4;
5949   orc_union32 var33;
5950   orc_int8 var34;
5951   orc_union16 var35;
5952
5953   ptr0 = (orc_int8 *) d1;
5954   ptr4 = (orc_union32 *) s1;
5955
5956
5957   for (i = 0; i < n; i++) {
5958     /* 0: loadl */
5959     var33 = ptr4[i];
5960     /* 1: select0lw */
5961     {
5962       orc_union32 _src;
5963       _src.i = var33.i;
5964       var35.i = _src.x2[0];
5965     }
5966     /* 2: select1wb */
5967     {
5968       orc_union16 _src;
5969       _src.i = var35.i;
5970       var34 = _src.x2[1];
5971     }
5972     /* 3: storeb */
5973     ptr0[i] = var34;
5974   }
5975
5976 }
5977
5978 #else
5979 static void
5980 _backup_cogorc_unpack_axyz_1 (OrcExecutor * ORC_RESTRICT ex)
5981 {
5982   int i;
5983   int n = ex->n;
5984   orc_int8 *ORC_RESTRICT ptr0;
5985   const orc_union32 *ORC_RESTRICT ptr4;
5986   orc_union32 var33;
5987   orc_int8 var34;
5988   orc_union16 var35;
5989
5990   ptr0 = (orc_int8 *) ex->arrays[0];
5991   ptr4 = (orc_union32 *) ex->arrays[4];
5992
5993
5994   for (i = 0; i < n; i++) {
5995     /* 0: loadl */
5996     var33 = ptr4[i];
5997     /* 1: select0lw */
5998     {
5999       orc_union32 _src;
6000       _src.i = var33.i;
6001       var35.i = _src.x2[0];
6002     }
6003     /* 2: select1wb */
6004     {
6005       orc_union16 _src;
6006       _src.i = var35.i;
6007       var34 = _src.x2[1];
6008     }
6009     /* 3: storeb */
6010     ptr0[i] = var34;
6011   }
6012
6013 }
6014
6015 void
6016 cogorc_unpack_axyz_1 (orc_uint8 * ORC_RESTRICT d1,
6017     const orc_uint32 * ORC_RESTRICT s1, int n)
6018 {
6019   OrcExecutor _ex, *ex = &_ex;
6020   static volatile int p_inited = 0;
6021   static OrcProgram *p = 0;
6022   void (*func) (OrcExecutor *);
6023
6024   if (!p_inited) {
6025     orc_once_mutex_lock ();
6026     if (!p_inited) {
6027
6028       p = orc_program_new ();
6029       orc_program_set_name (p, "cogorc_unpack_axyz_1");
6030       orc_program_set_backup_function (p, _backup_cogorc_unpack_axyz_1);
6031       orc_program_add_destination (p, 1, "d1");
6032       orc_program_add_source (p, 4, "s1");
6033       orc_program_add_temporary (p, 2, "t1");
6034
6035       orc_program_append_2 (p, "select0lw", 0, ORC_VAR_T1, ORC_VAR_S1,
6036           ORC_VAR_D1, ORC_VAR_D1);
6037       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
6038           ORC_VAR_D1, ORC_VAR_D1);
6039
6040       orc_program_compile (p);
6041     }
6042     p_inited = TRUE;
6043     orc_once_mutex_unlock ();
6044   }
6045   ex->program = p;
6046
6047   ex->n = n;
6048   ex->arrays[ORC_VAR_D1] = d1;
6049   ex->arrays[ORC_VAR_S1] = (void *) s1;
6050
6051   func = p->code_exec;
6052   func (ex);
6053 }
6054 #endif
6055
6056
6057 /* cogorc_unpack_axyz_2 */
6058 #ifdef DISABLE_ORC
6059 void
6060 cogorc_unpack_axyz_2 (orc_uint8 * ORC_RESTRICT d1,
6061     const orc_uint32 * ORC_RESTRICT s1, int n)
6062 {
6063   int i;
6064   orc_int8 *ORC_RESTRICT ptr0;
6065   const orc_union32 *ORC_RESTRICT ptr4;
6066   orc_union32 var33;
6067   orc_int8 var34;
6068   orc_union16 var35;
6069
6070   ptr0 = (orc_int8 *) d1;
6071   ptr4 = (orc_union32 *) s1;
6072
6073
6074   for (i = 0; i < n; i++) {
6075     /* 0: loadl */
6076     var33 = ptr4[i];
6077     /* 1: select1lw */
6078     {
6079       orc_union32 _src;
6080       _src.i = var33.i;
6081       var35.i = _src.x2[1];
6082     }
6083     /* 2: select0wb */
6084     {
6085       orc_union16 _src;
6086       _src.i = var35.i;
6087       var34 = _src.x2[0];
6088     }
6089     /* 3: storeb */
6090     ptr0[i] = var34;
6091   }
6092
6093 }
6094
6095 #else
6096 static void
6097 _backup_cogorc_unpack_axyz_2 (OrcExecutor * ORC_RESTRICT ex)
6098 {
6099   int i;
6100   int n = ex->n;
6101   orc_int8 *ORC_RESTRICT ptr0;
6102   const orc_union32 *ORC_RESTRICT ptr4;
6103   orc_union32 var33;
6104   orc_int8 var34;
6105   orc_union16 var35;
6106
6107   ptr0 = (orc_int8 *) ex->arrays[0];
6108   ptr4 = (orc_union32 *) ex->arrays[4];
6109
6110
6111   for (i = 0; i < n; i++) {
6112     /* 0: loadl */
6113     var33 = ptr4[i];
6114     /* 1: select1lw */
6115     {
6116       orc_union32 _src;
6117       _src.i = var33.i;
6118       var35.i = _src.x2[1];
6119     }
6120     /* 2: select0wb */
6121     {
6122       orc_union16 _src;
6123       _src.i = var35.i;
6124       var34 = _src.x2[0];
6125     }
6126     /* 3: storeb */
6127     ptr0[i] = var34;
6128   }
6129
6130 }
6131
6132 void
6133 cogorc_unpack_axyz_2 (orc_uint8 * ORC_RESTRICT d1,
6134     const orc_uint32 * ORC_RESTRICT s1, int n)
6135 {
6136   OrcExecutor _ex, *ex = &_ex;
6137   static volatile int p_inited = 0;
6138   static OrcProgram *p = 0;
6139   void (*func) (OrcExecutor *);
6140
6141   if (!p_inited) {
6142     orc_once_mutex_lock ();
6143     if (!p_inited) {
6144
6145       p = orc_program_new ();
6146       orc_program_set_name (p, "cogorc_unpack_axyz_2");
6147       orc_program_set_backup_function (p, _backup_cogorc_unpack_axyz_2);
6148       orc_program_add_destination (p, 1, "d1");
6149       orc_program_add_source (p, 4, "s1");
6150       orc_program_add_temporary (p, 2, "t1");
6151
6152       orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
6153           ORC_VAR_D1, ORC_VAR_D1);
6154       orc_program_append_2 (p, "select0wb", 0, ORC_VAR_D1, ORC_VAR_T1,
6155           ORC_VAR_D1, ORC_VAR_D1);
6156
6157       orc_program_compile (p);
6158     }
6159     p_inited = TRUE;
6160     orc_once_mutex_unlock ();
6161   }
6162   ex->program = p;
6163
6164   ex->n = n;
6165   ex->arrays[ORC_VAR_D1] = d1;
6166   ex->arrays[ORC_VAR_S1] = (void *) s1;
6167
6168   func = p->code_exec;
6169   func (ex);
6170 }
6171 #endif
6172
6173
6174 /* cogorc_unpack_axyz_3 */
6175 #ifdef DISABLE_ORC
6176 void
6177 cogorc_unpack_axyz_3 (orc_uint8 * ORC_RESTRICT d1,
6178     const orc_uint32 * ORC_RESTRICT s1, int n)
6179 {
6180   int i;
6181   orc_int8 *ORC_RESTRICT ptr0;
6182   const orc_union32 *ORC_RESTRICT ptr4;
6183   orc_union32 var33;
6184   orc_int8 var34;
6185   orc_union16 var35;
6186
6187   ptr0 = (orc_int8 *) d1;
6188   ptr4 = (orc_union32 *) s1;
6189
6190
6191   for (i = 0; i < n; i++) {
6192     /* 0: loadl */
6193     var33 = ptr4[i];
6194     /* 1: select1lw */
6195     {
6196       orc_union32 _src;
6197       _src.i = var33.i;
6198       var35.i = _src.x2[1];
6199     }
6200     /* 2: select1wb */
6201     {
6202       orc_union16 _src;
6203       _src.i = var35.i;
6204       var34 = _src.x2[1];
6205     }
6206     /* 3: storeb */
6207     ptr0[i] = var34;
6208   }
6209
6210 }
6211
6212 #else
6213 static void
6214 _backup_cogorc_unpack_axyz_3 (OrcExecutor * ORC_RESTRICT ex)
6215 {
6216   int i;
6217   int n = ex->n;
6218   orc_int8 *ORC_RESTRICT ptr0;
6219   const orc_union32 *ORC_RESTRICT ptr4;
6220   orc_union32 var33;
6221   orc_int8 var34;
6222   orc_union16 var35;
6223
6224   ptr0 = (orc_int8 *) ex->arrays[0];
6225   ptr4 = (orc_union32 *) ex->arrays[4];
6226
6227
6228   for (i = 0; i < n; i++) {
6229     /* 0: loadl */
6230     var33 = ptr4[i];
6231     /* 1: select1lw */
6232     {
6233       orc_union32 _src;
6234       _src.i = var33.i;
6235       var35.i = _src.x2[1];
6236     }
6237     /* 2: select1wb */
6238     {
6239       orc_union16 _src;
6240       _src.i = var35.i;
6241       var34 = _src.x2[1];
6242     }
6243     /* 3: storeb */
6244     ptr0[i] = var34;
6245   }
6246
6247 }
6248
6249 void
6250 cogorc_unpack_axyz_3 (orc_uint8 * ORC_RESTRICT d1,
6251     const orc_uint32 * ORC_RESTRICT s1, int n)
6252 {
6253   OrcExecutor _ex, *ex = &_ex;
6254   static volatile int p_inited = 0;
6255   static OrcProgram *p = 0;
6256   void (*func) (OrcExecutor *);
6257
6258   if (!p_inited) {
6259     orc_once_mutex_lock ();
6260     if (!p_inited) {
6261
6262       p = orc_program_new ();
6263       orc_program_set_name (p, "cogorc_unpack_axyz_3");
6264       orc_program_set_backup_function (p, _backup_cogorc_unpack_axyz_3);
6265       orc_program_add_destination (p, 1, "d1");
6266       orc_program_add_source (p, 4, "s1");
6267       orc_program_add_temporary (p, 2, "t1");
6268
6269       orc_program_append_2 (p, "select1lw", 0, ORC_VAR_T1, ORC_VAR_S1,
6270           ORC_VAR_D1, ORC_VAR_D1);
6271       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
6272           ORC_VAR_D1, ORC_VAR_D1);
6273
6274       orc_program_compile (p);
6275     }
6276     p_inited = TRUE;
6277     orc_once_mutex_unlock ();
6278   }
6279   ex->program = p;
6280
6281   ex->n = n;
6282   ex->arrays[ORC_VAR_D1] = d1;
6283   ex->arrays[ORC_VAR_S1] = (void *) s1;
6284
6285   func = p->code_exec;
6286   func (ex);
6287 }
6288 #endif
6289
6290
6291 /* cogorc_resample_horiz_1tap */
6292 #ifdef DISABLE_ORC
6293 void
6294 cogorc_resample_horiz_1tap (orc_uint8 * ORC_RESTRICT d1,
6295     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n)
6296 {
6297   int i;
6298   orc_int8 *ORC_RESTRICT ptr0;
6299   const orc_int8 *ORC_RESTRICT ptr4;
6300   orc_int8 var32;
6301
6302   ptr0 = (orc_int8 *) d1;
6303   ptr4 = (orc_int8 *) s1;
6304
6305
6306   for (i = 0; i < n; i++) {
6307     /* 0: ldresnearb */
6308     var32 = ptr4[(p1 + i * p2) >> 16];
6309     /* 1: storeb */
6310     ptr0[i] = var32;
6311   }
6312
6313 }
6314
6315 #else
6316 static void
6317 _backup_cogorc_resample_horiz_1tap (OrcExecutor * ORC_RESTRICT ex)
6318 {
6319   int i;
6320   int n = ex->n;
6321   orc_int8 *ORC_RESTRICT ptr0;
6322   const orc_int8 *ORC_RESTRICT ptr4;
6323   orc_int8 var32;
6324
6325   ptr0 = (orc_int8 *) ex->arrays[0];
6326   ptr4 = (orc_int8 *) ex->arrays[4];
6327
6328
6329   for (i = 0; i < n; i++) {
6330     /* 0: ldresnearb */
6331     var32 = ptr4[(ex->params[24] + i * ex->params[25]) >> 16];
6332     /* 1: storeb */
6333     ptr0[i] = var32;
6334   }
6335
6336 }
6337
6338 void
6339 cogorc_resample_horiz_1tap (orc_uint8 * ORC_RESTRICT d1,
6340     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n)
6341 {
6342   OrcExecutor _ex, *ex = &_ex;
6343   static volatile int p_inited = 0;
6344   static OrcProgram *p = 0;
6345   void (*func) (OrcExecutor *);
6346
6347   if (!p_inited) {
6348     orc_once_mutex_lock ();
6349     if (!p_inited) {
6350
6351       p = orc_program_new ();
6352       orc_program_set_name (p, "cogorc_resample_horiz_1tap");
6353       orc_program_set_backup_function (p, _backup_cogorc_resample_horiz_1tap);
6354       orc_program_add_destination (p, 1, "d1");
6355       orc_program_add_source (p, 1, "s1");
6356       orc_program_add_parameter (p, 4, "p1");
6357       orc_program_add_parameter (p, 4, "p2");
6358
6359       orc_program_append_2 (p, "ldresnearb", 0, ORC_VAR_D1, ORC_VAR_S1,
6360           ORC_VAR_P1, ORC_VAR_P2);
6361
6362       orc_program_compile (p);
6363     }
6364     p_inited = TRUE;
6365     orc_once_mutex_unlock ();
6366   }
6367   ex->program = p;
6368
6369   ex->n = n;
6370   ex->arrays[ORC_VAR_D1] = d1;
6371   ex->arrays[ORC_VAR_S1] = (void *) s1;
6372   ex->params[ORC_VAR_P1] = p1;
6373   ex->params[ORC_VAR_P2] = p2;
6374
6375   func = p->code_exec;
6376   func (ex);
6377 }
6378 #endif
6379
6380
6381 /* cogorc_resample_horiz_2tap */
6382 #ifdef DISABLE_ORC
6383 void
6384 cogorc_resample_horiz_2tap (orc_uint8 * ORC_RESTRICT d1,
6385     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n)
6386 {
6387   int i;
6388   orc_int8 *ORC_RESTRICT ptr0;
6389   const orc_int8 *ORC_RESTRICT ptr4;
6390   orc_int8 var32;
6391
6392   ptr0 = (orc_int8 *) d1;
6393   ptr4 = (orc_int8 *) s1;
6394
6395
6396   for (i = 0; i < n; i++) {
6397     /* 0: ldreslinb */
6398     {
6399       int tmp = p1 + i * p2;
6400       var32 =
6401           ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
6402           (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
6403     }
6404     /* 1: storeb */
6405     ptr0[i] = var32;
6406   }
6407
6408 }
6409
6410 #else
6411 static void
6412 _backup_cogorc_resample_horiz_2tap (OrcExecutor * ORC_RESTRICT ex)
6413 {
6414   int i;
6415   int n = ex->n;
6416   orc_int8 *ORC_RESTRICT ptr0;
6417   const orc_int8 *ORC_RESTRICT ptr4;
6418   orc_int8 var32;
6419
6420   ptr0 = (orc_int8 *) ex->arrays[0];
6421   ptr4 = (orc_int8 *) ex->arrays[4];
6422
6423
6424   for (i = 0; i < n; i++) {
6425     /* 0: ldreslinb */
6426     {
6427       int tmp = ex->params[24] + i * ex->params[25];
6428       var32 =
6429           ((orc_uint8) ptr4[tmp >> 16] * (256 - ((tmp >> 8) & 0xff)) +
6430           (orc_uint8) ptr4[(tmp >> 16) + 1] * ((tmp >> 8) & 0xff)) >> 8;
6431     }
6432     /* 1: storeb */
6433     ptr0[i] = var32;
6434   }
6435
6436 }
6437
6438 void
6439 cogorc_resample_horiz_2tap (orc_uint8 * ORC_RESTRICT d1,
6440     const orc_uint8 * ORC_RESTRICT s1, int p1, int p2, int n)
6441 {
6442   OrcExecutor _ex, *ex = &_ex;
6443   static volatile int p_inited = 0;
6444   static OrcProgram *p = 0;
6445   void (*func) (OrcExecutor *);
6446
6447   if (!p_inited) {
6448     orc_once_mutex_lock ();
6449     if (!p_inited) {
6450
6451       p = orc_program_new ();
6452       orc_program_set_name (p, "cogorc_resample_horiz_2tap");
6453       orc_program_set_backup_function (p, _backup_cogorc_resample_horiz_2tap);
6454       orc_program_add_destination (p, 1, "d1");
6455       orc_program_add_source (p, 1, "s1");
6456       orc_program_add_parameter (p, 4, "p1");
6457       orc_program_add_parameter (p, 4, "p2");
6458
6459       orc_program_append_2 (p, "ldreslinb", 0, ORC_VAR_D1, ORC_VAR_S1,
6460           ORC_VAR_P1, ORC_VAR_P2);
6461
6462       orc_program_compile (p);
6463     }
6464     p_inited = TRUE;
6465     orc_once_mutex_unlock ();
6466   }
6467   ex->program = p;
6468
6469   ex->n = n;
6470   ex->arrays[ORC_VAR_D1] = d1;
6471   ex->arrays[ORC_VAR_S1] = (void *) s1;
6472   ex->params[ORC_VAR_P1] = p1;
6473   ex->params[ORC_VAR_P2] = p2;
6474
6475   func = p->code_exec;
6476   func (ex);
6477 }
6478 #endif
6479
6480
6481 /* cogorc_convert_I420_UYVY */
6482 #ifdef DISABLE_ORC
6483 void
6484 cogorc_convert_I420_UYVY (orc_uint32 * ORC_RESTRICT d1,
6485     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
6486     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
6487     const orc_uint8 * ORC_RESTRICT s4, int n)
6488 {
6489   int i;
6490   orc_union32 *ORC_RESTRICT ptr0;
6491   orc_union32 *ORC_RESTRICT ptr1;
6492   const orc_union16 *ORC_RESTRICT ptr4;
6493   const orc_union16 *ORC_RESTRICT ptr5;
6494   const orc_int8 *ORC_RESTRICT ptr6;
6495   const orc_int8 *ORC_RESTRICT ptr7;
6496   orc_int8 var33;
6497   orc_int8 var34;
6498   orc_union16 var35;
6499   orc_union32 var36;
6500   orc_union16 var37;
6501   orc_union32 var38;
6502   orc_union16 var39;
6503
6504   ptr0 = (orc_union32 *) d1;
6505   ptr1 = (orc_union32 *) d2;
6506   ptr4 = (orc_union16 *) s1;
6507   ptr5 = (orc_union16 *) s2;
6508   ptr6 = (orc_int8 *) s3;
6509   ptr7 = (orc_int8 *) s4;
6510
6511
6512   for (i = 0; i < n; i++) {
6513     /* 0: loadb */
6514     var33 = ptr6[i];
6515     /* 1: loadb */
6516     var34 = ptr7[i];
6517     /* 2: mergebw */
6518     {
6519       orc_union16 _dest;
6520       _dest.x2[0] = var33;
6521       _dest.x2[1] = var34;
6522       var39.i = _dest.i;
6523     }
6524     /* 3: loadw */
6525     var35 = ptr4[i];
6526     /* 4: mergebw */
6527     {
6528       orc_union16 _dest;
6529       _dest.x2[0] = var39.x2[0];
6530       _dest.x2[1] = var35.x2[0];
6531       var36.x2[0] = _dest.i;
6532     }
6533     {
6534       orc_union16 _dest;
6535       _dest.x2[0] = var39.x2[1];
6536       _dest.x2[1] = var35.x2[1];
6537       var36.x2[1] = _dest.i;
6538     }
6539     /* 5: storel */
6540     ptr0[i] = var36;
6541     /* 6: loadw */
6542     var37 = ptr5[i];
6543     /* 7: mergebw */
6544     {
6545       orc_union16 _dest;
6546       _dest.x2[0] = var39.x2[0];
6547       _dest.x2[1] = var37.x2[0];
6548       var38.x2[0] = _dest.i;
6549     }
6550     {
6551       orc_union16 _dest;
6552       _dest.x2[0] = var39.x2[1];
6553       _dest.x2[1] = var37.x2[1];
6554       var38.x2[1] = _dest.i;
6555     }
6556     /* 8: storel */
6557     ptr1[i] = var38;
6558   }
6559
6560 }
6561
6562 #else
6563 static void
6564 _backup_cogorc_convert_I420_UYVY (OrcExecutor * ORC_RESTRICT ex)
6565 {
6566   int i;
6567   int n = ex->n;
6568   orc_union32 *ORC_RESTRICT ptr0;
6569   orc_union32 *ORC_RESTRICT ptr1;
6570   const orc_union16 *ORC_RESTRICT ptr4;
6571   const orc_union16 *ORC_RESTRICT ptr5;
6572   const orc_int8 *ORC_RESTRICT ptr6;
6573   const orc_int8 *ORC_RESTRICT ptr7;
6574   orc_int8 var33;
6575   orc_int8 var34;
6576   orc_union16 var35;
6577   orc_union32 var36;
6578   orc_union16 var37;
6579   orc_union32 var38;
6580   orc_union16 var39;
6581
6582   ptr0 = (orc_union32 *) ex->arrays[0];
6583   ptr1 = (orc_union32 *) ex->arrays[1];
6584   ptr4 = (orc_union16 *) ex->arrays[4];
6585   ptr5 = (orc_union16 *) ex->arrays[5];
6586   ptr6 = (orc_int8 *) ex->arrays[6];
6587   ptr7 = (orc_int8 *) ex->arrays[7];
6588
6589
6590   for (i = 0; i < n; i++) {
6591     /* 0: loadb */
6592     var33 = ptr6[i];
6593     /* 1: loadb */
6594     var34 = ptr7[i];
6595     /* 2: mergebw */
6596     {
6597       orc_union16 _dest;
6598       _dest.x2[0] = var33;
6599       _dest.x2[1] = var34;
6600       var39.i = _dest.i;
6601     }
6602     /* 3: loadw */
6603     var35 = ptr4[i];
6604     /* 4: mergebw */
6605     {
6606       orc_union16 _dest;
6607       _dest.x2[0] = var39.x2[0];
6608       _dest.x2[1] = var35.x2[0];
6609       var36.x2[0] = _dest.i;
6610     }
6611     {
6612       orc_union16 _dest;
6613       _dest.x2[0] = var39.x2[1];
6614       _dest.x2[1] = var35.x2[1];
6615       var36.x2[1] = _dest.i;
6616     }
6617     /* 5: storel */
6618     ptr0[i] = var36;
6619     /* 6: loadw */
6620     var37 = ptr5[i];
6621     /* 7: mergebw */
6622     {
6623       orc_union16 _dest;
6624       _dest.x2[0] = var39.x2[0];
6625       _dest.x2[1] = var37.x2[0];
6626       var38.x2[0] = _dest.i;
6627     }
6628     {
6629       orc_union16 _dest;
6630       _dest.x2[0] = var39.x2[1];
6631       _dest.x2[1] = var37.x2[1];
6632       var38.x2[1] = _dest.i;
6633     }
6634     /* 8: storel */
6635     ptr1[i] = var38;
6636   }
6637
6638 }
6639
6640 void
6641 cogorc_convert_I420_UYVY (orc_uint32 * ORC_RESTRICT d1,
6642     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
6643     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
6644     const orc_uint8 * ORC_RESTRICT s4, int n)
6645 {
6646   OrcExecutor _ex, *ex = &_ex;
6647   static volatile int p_inited = 0;
6648   static OrcProgram *p = 0;
6649   void (*func) (OrcExecutor *);
6650
6651   if (!p_inited) {
6652     orc_once_mutex_lock ();
6653     if (!p_inited) {
6654
6655       p = orc_program_new ();
6656       orc_program_set_name (p, "cogorc_convert_I420_UYVY");
6657       orc_program_set_backup_function (p, _backup_cogorc_convert_I420_UYVY);
6658       orc_program_add_destination (p, 4, "d1");
6659       orc_program_add_destination (p, 4, "d2");
6660       orc_program_add_source (p, 2, "s1");
6661       orc_program_add_source (p, 2, "s2");
6662       orc_program_add_source (p, 1, "s3");
6663       orc_program_add_source (p, 1, "s4");
6664       orc_program_add_temporary (p, 2, "t1");
6665
6666       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
6667           ORC_VAR_D1);
6668       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
6669           ORC_VAR_D1);
6670       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_S2,
6671           ORC_VAR_D1);
6672
6673       orc_program_compile (p);
6674     }
6675     p_inited = TRUE;
6676     orc_once_mutex_unlock ();
6677   }
6678   ex->program = p;
6679
6680   ex->n = n;
6681   ex->arrays[ORC_VAR_D1] = d1;
6682   ex->arrays[ORC_VAR_D2] = d2;
6683   ex->arrays[ORC_VAR_S1] = (void *) s1;
6684   ex->arrays[ORC_VAR_S2] = (void *) s2;
6685   ex->arrays[ORC_VAR_S3] = (void *) s3;
6686   ex->arrays[ORC_VAR_S4] = (void *) s4;
6687
6688   func = p->code_exec;
6689   func (ex);
6690 }
6691 #endif
6692
6693
6694 /* cogorc_convert_I420_YUY2 */
6695 #ifdef DISABLE_ORC
6696 void
6697 cogorc_convert_I420_YUY2 (orc_uint32 * ORC_RESTRICT d1,
6698     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
6699     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
6700     const orc_uint8 * ORC_RESTRICT s4, int n)
6701 {
6702   int i;
6703   orc_union32 *ORC_RESTRICT ptr0;
6704   orc_union32 *ORC_RESTRICT ptr1;
6705   const orc_union16 *ORC_RESTRICT ptr4;
6706   const orc_union16 *ORC_RESTRICT ptr5;
6707   const orc_int8 *ORC_RESTRICT ptr6;
6708   const orc_int8 *ORC_RESTRICT ptr7;
6709   orc_int8 var33;
6710   orc_int8 var34;
6711   orc_union16 var35;
6712   orc_union32 var36;
6713   orc_union16 var37;
6714   orc_union32 var38;
6715   orc_union16 var39;
6716
6717   ptr0 = (orc_union32 *) d1;
6718   ptr1 = (orc_union32 *) d2;
6719   ptr4 = (orc_union16 *) s1;
6720   ptr5 = (orc_union16 *) s2;
6721   ptr6 = (orc_int8 *) s3;
6722   ptr7 = (orc_int8 *) s4;
6723
6724
6725   for (i = 0; i < n; i++) {
6726     /* 0: loadb */
6727     var33 = ptr6[i];
6728     /* 1: loadb */
6729     var34 = ptr7[i];
6730     /* 2: mergebw */
6731     {
6732       orc_union16 _dest;
6733       _dest.x2[0] = var33;
6734       _dest.x2[1] = var34;
6735       var39.i = _dest.i;
6736     }
6737     /* 3: loadw */
6738     var35 = ptr4[i];
6739     /* 4: mergebw */
6740     {
6741       orc_union16 _dest;
6742       _dest.x2[0] = var35.x2[0];
6743       _dest.x2[1] = var39.x2[0];
6744       var36.x2[0] = _dest.i;
6745     }
6746     {
6747       orc_union16 _dest;
6748       _dest.x2[0] = var35.x2[1];
6749       _dest.x2[1] = var39.x2[1];
6750       var36.x2[1] = _dest.i;
6751     }
6752     /* 5: storel */
6753     ptr0[i] = var36;
6754     /* 6: loadw */
6755     var37 = ptr5[i];
6756     /* 7: mergebw */
6757     {
6758       orc_union16 _dest;
6759       _dest.x2[0] = var37.x2[0];
6760       _dest.x2[1] = var39.x2[0];
6761       var38.x2[0] = _dest.i;
6762     }
6763     {
6764       orc_union16 _dest;
6765       _dest.x2[0] = var37.x2[1];
6766       _dest.x2[1] = var39.x2[1];
6767       var38.x2[1] = _dest.i;
6768     }
6769     /* 8: storel */
6770     ptr1[i] = var38;
6771   }
6772
6773 }
6774
6775 #else
6776 static void
6777 _backup_cogorc_convert_I420_YUY2 (OrcExecutor * ORC_RESTRICT ex)
6778 {
6779   int i;
6780   int n = ex->n;
6781   orc_union32 *ORC_RESTRICT ptr0;
6782   orc_union32 *ORC_RESTRICT ptr1;
6783   const orc_union16 *ORC_RESTRICT ptr4;
6784   const orc_union16 *ORC_RESTRICT ptr5;
6785   const orc_int8 *ORC_RESTRICT ptr6;
6786   const orc_int8 *ORC_RESTRICT ptr7;
6787   orc_int8 var33;
6788   orc_int8 var34;
6789   orc_union16 var35;
6790   orc_union32 var36;
6791   orc_union16 var37;
6792   orc_union32 var38;
6793   orc_union16 var39;
6794
6795   ptr0 = (orc_union32 *) ex->arrays[0];
6796   ptr1 = (orc_union32 *) ex->arrays[1];
6797   ptr4 = (orc_union16 *) ex->arrays[4];
6798   ptr5 = (orc_union16 *) ex->arrays[5];
6799   ptr6 = (orc_int8 *) ex->arrays[6];
6800   ptr7 = (orc_int8 *) ex->arrays[7];
6801
6802
6803   for (i = 0; i < n; i++) {
6804     /* 0: loadb */
6805     var33 = ptr6[i];
6806     /* 1: loadb */
6807     var34 = ptr7[i];
6808     /* 2: mergebw */
6809     {
6810       orc_union16 _dest;
6811       _dest.x2[0] = var33;
6812       _dest.x2[1] = var34;
6813       var39.i = _dest.i;
6814     }
6815     /* 3: loadw */
6816     var35 = ptr4[i];
6817     /* 4: mergebw */
6818     {
6819       orc_union16 _dest;
6820       _dest.x2[0] = var35.x2[0];
6821       _dest.x2[1] = var39.x2[0];
6822       var36.x2[0] = _dest.i;
6823     }
6824     {
6825       orc_union16 _dest;
6826       _dest.x2[0] = var35.x2[1];
6827       _dest.x2[1] = var39.x2[1];
6828       var36.x2[1] = _dest.i;
6829     }
6830     /* 5: storel */
6831     ptr0[i] = var36;
6832     /* 6: loadw */
6833     var37 = ptr5[i];
6834     /* 7: mergebw */
6835     {
6836       orc_union16 _dest;
6837       _dest.x2[0] = var37.x2[0];
6838       _dest.x2[1] = var39.x2[0];
6839       var38.x2[0] = _dest.i;
6840     }
6841     {
6842       orc_union16 _dest;
6843       _dest.x2[0] = var37.x2[1];
6844       _dest.x2[1] = var39.x2[1];
6845       var38.x2[1] = _dest.i;
6846     }
6847     /* 8: storel */
6848     ptr1[i] = var38;
6849   }
6850
6851 }
6852
6853 void
6854 cogorc_convert_I420_YUY2 (orc_uint32 * ORC_RESTRICT d1,
6855     orc_uint32 * ORC_RESTRICT d2, const orc_uint16 * ORC_RESTRICT s1,
6856     const orc_uint16 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
6857     const orc_uint8 * ORC_RESTRICT s4, int n)
6858 {
6859   OrcExecutor _ex, *ex = &_ex;
6860   static volatile int p_inited = 0;
6861   static OrcProgram *p = 0;
6862   void (*func) (OrcExecutor *);
6863
6864   if (!p_inited) {
6865     orc_once_mutex_lock ();
6866     if (!p_inited) {
6867
6868       p = orc_program_new ();
6869       orc_program_set_name (p, "cogorc_convert_I420_YUY2");
6870       orc_program_set_backup_function (p, _backup_cogorc_convert_I420_YUY2);
6871       orc_program_add_destination (p, 4, "d1");
6872       orc_program_add_destination (p, 4, "d2");
6873       orc_program_add_source (p, 2, "s1");
6874       orc_program_add_source (p, 2, "s2");
6875       orc_program_add_source (p, 1, "s3");
6876       orc_program_add_source (p, 1, "s4");
6877       orc_program_add_temporary (p, 2, "t1");
6878
6879       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S3, ORC_VAR_S4,
6880           ORC_VAR_D1);
6881       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
6882           ORC_VAR_D1);
6883       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D2, ORC_VAR_S2, ORC_VAR_T1,
6884           ORC_VAR_D1);
6885
6886       orc_program_compile (p);
6887     }
6888     p_inited = TRUE;
6889     orc_once_mutex_unlock ();
6890   }
6891   ex->program = p;
6892
6893   ex->n = n;
6894   ex->arrays[ORC_VAR_D1] = d1;
6895   ex->arrays[ORC_VAR_D2] = d2;
6896   ex->arrays[ORC_VAR_S1] = (void *) s1;
6897   ex->arrays[ORC_VAR_S2] = (void *) s2;
6898   ex->arrays[ORC_VAR_S3] = (void *) s3;
6899   ex->arrays[ORC_VAR_S4] = (void *) s4;
6900
6901   func = p->code_exec;
6902   func (ex);
6903 }
6904 #endif
6905
6906
6907 /* cogorc_convert_I420_AYUV */
6908 #ifdef DISABLE_ORC
6909 void
6910 cogorc_convert_I420_AYUV (orc_uint32 * ORC_RESTRICT d1,
6911     orc_uint32 * ORC_RESTRICT d2, const orc_uint8 * ORC_RESTRICT s1,
6912     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
6913     const orc_uint8 * ORC_RESTRICT s4, int n)
6914 {
6915   int i;
6916   orc_union32 *ORC_RESTRICT ptr0;
6917   orc_union32 *ORC_RESTRICT ptr1;
6918   const orc_int8 *ORC_RESTRICT ptr4;
6919   const orc_int8 *ORC_RESTRICT ptr5;
6920   const orc_int8 *ORC_RESTRICT ptr6;
6921   const orc_int8 *ORC_RESTRICT ptr7;
6922   orc_int8 var36;
6923   orc_int8 var37;
6924   orc_union32 var38;
6925   orc_int8 var39;
6926   orc_int8 var40;
6927   orc_union32 var41;
6928   orc_int8 var42;
6929   orc_int8 var43;
6930   orc_union16 var44;
6931   orc_union16 var45;
6932   orc_union16 var46;
6933
6934   ptr0 = (orc_union32 *) d1;
6935   ptr1 = (orc_union32 *) d2;
6936   ptr4 = (orc_int8 *) s1;
6937   ptr5 = (orc_int8 *) s2;
6938   ptr6 = (orc_int8 *) s3;
6939   ptr7 = (orc_int8 *) s4;
6940
6941   /* 3: loadpb */
6942   var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
6943   /* 8: loadpb */
6944   var39 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
6945
6946   for (i = 0; i < n; i++) {
6947     /* 0: loadupdb */
6948     var42 = ptr6[i >> 1];
6949     /* 1: loadupdb */
6950     var43 = ptr7[i >> 1];
6951     /* 2: mergebw */
6952     {
6953       orc_union16 _dest;
6954       _dest.x2[0] = var42;
6955       _dest.x2[1] = var43;
6956       var44.i = _dest.i;
6957     }
6958     /* 4: loadb */
6959     var37 = ptr4[i];
6960     /* 5: mergebw */
6961     {
6962       orc_union16 _dest;
6963       _dest.x2[0] = var36;
6964       _dest.x2[1] = var37;
6965       var45.i = _dest.i;
6966     }
6967     /* 6: mergewl */
6968     {
6969       orc_union32 _dest;
6970       _dest.x2[0] = var45.i;
6971       _dest.x2[1] = var44.i;
6972       var38.i = _dest.i;
6973     }
6974     /* 7: storel */
6975     ptr0[i] = var38;
6976     /* 9: loadb */
6977     var40 = ptr5[i];
6978     /* 10: mergebw */
6979     {
6980       orc_union16 _dest;
6981       _dest.x2[0] = var39;
6982       _dest.x2[1] = var40;
6983       var46.i = _dest.i;
6984     }
6985     /* 11: mergewl */
6986     {
6987       orc_union32 _dest;
6988       _dest.x2[0] = var46.i;
6989       _dest.x2[1] = var44.i;
6990       var41.i = _dest.i;
6991     }
6992     /* 12: storel */
6993     ptr1[i] = var41;
6994   }
6995
6996 }
6997
6998 #else
6999 static void
7000 _backup_cogorc_convert_I420_AYUV (OrcExecutor * ORC_RESTRICT ex)
7001 {
7002   int i;
7003   int n = ex->n;
7004   orc_union32 *ORC_RESTRICT ptr0;
7005   orc_union32 *ORC_RESTRICT ptr1;
7006   const orc_int8 *ORC_RESTRICT ptr4;
7007   const orc_int8 *ORC_RESTRICT ptr5;
7008   const orc_int8 *ORC_RESTRICT ptr6;
7009   const orc_int8 *ORC_RESTRICT ptr7;
7010   orc_int8 var36;
7011   orc_int8 var37;
7012   orc_union32 var38;
7013   orc_int8 var39;
7014   orc_int8 var40;
7015   orc_union32 var41;
7016   orc_int8 var42;
7017   orc_int8 var43;
7018   orc_union16 var44;
7019   orc_union16 var45;
7020   orc_union16 var46;
7021
7022   ptr0 = (orc_union32 *) ex->arrays[0];
7023   ptr1 = (orc_union32 *) ex->arrays[1];
7024   ptr4 = (orc_int8 *) ex->arrays[4];
7025   ptr5 = (orc_int8 *) ex->arrays[5];
7026   ptr6 = (orc_int8 *) ex->arrays[6];
7027   ptr7 = (orc_int8 *) ex->arrays[7];
7028
7029   /* 3: loadpb */
7030   var36 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
7031   /* 8: loadpb */
7032   var39 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
7033
7034   for (i = 0; i < n; i++) {
7035     /* 0: loadupdb */
7036     var42 = ptr6[i >> 1];
7037     /* 1: loadupdb */
7038     var43 = ptr7[i >> 1];
7039     /* 2: mergebw */
7040     {
7041       orc_union16 _dest;
7042       _dest.x2[0] = var42;
7043       _dest.x2[1] = var43;
7044       var44.i = _dest.i;
7045     }
7046     /* 4: loadb */
7047     var37 = ptr4[i];
7048     /* 5: mergebw */
7049     {
7050       orc_union16 _dest;
7051       _dest.x2[0] = var36;
7052       _dest.x2[1] = var37;
7053       var45.i = _dest.i;
7054     }
7055     /* 6: mergewl */
7056     {
7057       orc_union32 _dest;
7058       _dest.x2[0] = var45.i;
7059       _dest.x2[1] = var44.i;
7060       var38.i = _dest.i;
7061     }
7062     /* 7: storel */
7063     ptr0[i] = var38;
7064     /* 9: loadb */
7065     var40 = ptr5[i];
7066     /* 10: mergebw */
7067     {
7068       orc_union16 _dest;
7069       _dest.x2[0] = var39;
7070       _dest.x2[1] = var40;
7071       var46.i = _dest.i;
7072     }
7073     /* 11: mergewl */
7074     {
7075       orc_union32 _dest;
7076       _dest.x2[0] = var46.i;
7077       _dest.x2[1] = var44.i;
7078       var41.i = _dest.i;
7079     }
7080     /* 12: storel */
7081     ptr1[i] = var41;
7082   }
7083
7084 }
7085
7086 void
7087 cogorc_convert_I420_AYUV (orc_uint32 * ORC_RESTRICT d1,
7088     orc_uint32 * ORC_RESTRICT d2, const orc_uint8 * ORC_RESTRICT s1,
7089     const orc_uint8 * ORC_RESTRICT s2, const orc_uint8 * ORC_RESTRICT s3,
7090     const orc_uint8 * ORC_RESTRICT s4, int n)
7091 {
7092   OrcExecutor _ex, *ex = &_ex;
7093   static volatile int p_inited = 0;
7094   static OrcProgram *p = 0;
7095   void (*func) (OrcExecutor *);
7096
7097   if (!p_inited) {
7098     orc_once_mutex_lock ();
7099     if (!p_inited) {
7100
7101       p = orc_program_new ();
7102       orc_program_set_name (p, "cogorc_convert_I420_AYUV");
7103       orc_program_set_backup_function (p, _backup_cogorc_convert_I420_AYUV);
7104       orc_program_add_destination (p, 4, "d1");
7105       orc_program_add_destination (p, 4, "d2");
7106       orc_program_add_source (p, 1, "s1");
7107       orc_program_add_source (p, 1, "s2");
7108       orc_program_add_source (p, 1, "s3");
7109       orc_program_add_source (p, 1, "s4");
7110       orc_program_add_constant (p, 1, 0x000000ff, "c1");
7111       orc_program_add_temporary (p, 2, "t1");
7112       orc_program_add_temporary (p, 2, "t2");
7113       orc_program_add_temporary (p, 1, "t3");
7114       orc_program_add_temporary (p, 1, "t4");
7115
7116       orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T3, ORC_VAR_S3,
7117           ORC_VAR_D1, ORC_VAR_D1);
7118       orc_program_append_2 (p, "loadupdb", 0, ORC_VAR_T4, ORC_VAR_S4,
7119           ORC_VAR_D1, ORC_VAR_D1);
7120       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
7121           ORC_VAR_D1);
7122       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
7123           ORC_VAR_D1);
7124       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
7125           ORC_VAR_D1);
7126       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S2,
7127           ORC_VAR_D1);
7128       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1,
7129           ORC_VAR_D1);
7130
7131       orc_program_compile (p);
7132     }
7133     p_inited = TRUE;
7134     orc_once_mutex_unlock ();
7135   }
7136   ex->program = p;
7137
7138   ex->n = n;
7139   ex->arrays[ORC_VAR_D1] = d1;
7140   ex->arrays[ORC_VAR_D2] = d2;
7141   ex->arrays[ORC_VAR_S1] = (void *) s1;
7142   ex->arrays[ORC_VAR_S2] = (void *) s2;
7143   ex->arrays[ORC_VAR_S3] = (void *) s3;
7144   ex->arrays[ORC_VAR_S4] = (void *) s4;
7145
7146   func = p->code_exec;
7147   func (ex);
7148 }
7149 #endif
7150
7151
7152 /* cogorc_convert_YUY2_I420 */
7153 #ifdef DISABLE_ORC
7154 void
7155 cogorc_convert_YUY2_I420 (orc_uint16 * ORC_RESTRICT d1,
7156     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
7157     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
7158     const orc_uint32 * ORC_RESTRICT s2, int n)
7159 {
7160   int i;
7161   orc_union16 *ORC_RESTRICT ptr0;
7162   orc_union16 *ORC_RESTRICT ptr1;
7163   orc_int8 *ORC_RESTRICT ptr2;
7164   orc_int8 *ORC_RESTRICT ptr3;
7165   const orc_union32 *ORC_RESTRICT ptr4;
7166   const orc_union32 *ORC_RESTRICT ptr5;
7167   orc_union32 var35;
7168   orc_union32 var36;
7169   orc_int8 var37;
7170   orc_int8 var38;
7171   orc_union16 var39;
7172   orc_union16 var40;
7173   orc_union16 var41;
7174   orc_union16 var42;
7175   orc_union16 var43;
7176
7177   ptr0 = (orc_union16 *) d1;
7178   ptr1 = (orc_union16 *) d2;
7179   ptr2 = (orc_int8 *) d3;
7180   ptr3 = (orc_int8 *) d4;
7181   ptr4 = (orc_union32 *) s1;
7182   ptr5 = (orc_union32 *) s2;
7183
7184
7185   for (i = 0; i < n; i++) {
7186     /* 0: loadl */
7187     var35 = ptr4[i];
7188     /* 1: splitwb */
7189     {
7190       orc_union16 _src;
7191       _src.i = var35.x2[0];
7192       var39.x2[0] = _src.x2[1];
7193       var40.x2[0] = _src.x2[0];
7194     }
7195     {
7196       orc_union16 _src;
7197       _src.i = var35.x2[1];
7198       var39.x2[1] = _src.x2[1];
7199       var40.x2[1] = _src.x2[0];
7200     }
7201     /* 2: storew */
7202     ptr0[i] = var40;
7203     /* 3: loadl */
7204     var36 = ptr5[i];
7205     /* 4: splitwb */
7206     {
7207       orc_union16 _src;
7208       _src.i = var36.x2[0];
7209       var41.x2[0] = _src.x2[1];
7210       var42.x2[0] = _src.x2[0];
7211     }
7212     {
7213       orc_union16 _src;
7214       _src.i = var36.x2[1];
7215       var41.x2[1] = _src.x2[1];
7216       var42.x2[1] = _src.x2[0];
7217     }
7218     /* 5: storew */
7219     ptr1[i] = var42;
7220     /* 6: avgub */
7221     var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
7222     var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
7223     /* 7: splitwb */
7224     {
7225       orc_union16 _src;
7226       _src.i = var43.i;
7227       var37 = _src.x2[1];
7228       var38 = _src.x2[0];
7229     }
7230     /* 8: storeb */
7231     ptr3[i] = var37;
7232     /* 9: storeb */
7233     ptr2[i] = var38;
7234   }
7235
7236 }
7237
7238 #else
7239 static void
7240 _backup_cogorc_convert_YUY2_I420 (OrcExecutor * ORC_RESTRICT ex)
7241 {
7242   int i;
7243   int n = ex->n;
7244   orc_union16 *ORC_RESTRICT ptr0;
7245   orc_union16 *ORC_RESTRICT ptr1;
7246   orc_int8 *ORC_RESTRICT ptr2;
7247   orc_int8 *ORC_RESTRICT ptr3;
7248   const orc_union32 *ORC_RESTRICT ptr4;
7249   const orc_union32 *ORC_RESTRICT ptr5;
7250   orc_union32 var35;
7251   orc_union32 var36;
7252   orc_int8 var37;
7253   orc_int8 var38;
7254   orc_union16 var39;
7255   orc_union16 var40;
7256   orc_union16 var41;
7257   orc_union16 var42;
7258   orc_union16 var43;
7259
7260   ptr0 = (orc_union16 *) ex->arrays[0];
7261   ptr1 = (orc_union16 *) ex->arrays[1];
7262   ptr2 = (orc_int8 *) ex->arrays[2];
7263   ptr3 = (orc_int8 *) ex->arrays[3];
7264   ptr4 = (orc_union32 *) ex->arrays[4];
7265   ptr5 = (orc_union32 *) ex->arrays[5];
7266
7267
7268   for (i = 0; i < n; i++) {
7269     /* 0: loadl */
7270     var35 = ptr4[i];
7271     /* 1: splitwb */
7272     {
7273       orc_union16 _src;
7274       _src.i = var35.x2[0];
7275       var39.x2[0] = _src.x2[1];
7276       var40.x2[0] = _src.x2[0];
7277     }
7278     {
7279       orc_union16 _src;
7280       _src.i = var35.x2[1];
7281       var39.x2[1] = _src.x2[1];
7282       var40.x2[1] = _src.x2[0];
7283     }
7284     /* 2: storew */
7285     ptr0[i] = var40;
7286     /* 3: loadl */
7287     var36 = ptr5[i];
7288     /* 4: splitwb */
7289     {
7290       orc_union16 _src;
7291       _src.i = var36.x2[0];
7292       var41.x2[0] = _src.x2[1];
7293       var42.x2[0] = _src.x2[0];
7294     }
7295     {
7296       orc_union16 _src;
7297       _src.i = var36.x2[1];
7298       var41.x2[1] = _src.x2[1];
7299       var42.x2[1] = _src.x2[0];
7300     }
7301     /* 5: storew */
7302     ptr1[i] = var42;
7303     /* 6: avgub */
7304     var43.x2[0] = ((orc_uint8) var39.x2[0] + (orc_uint8) var41.x2[0] + 1) >> 1;
7305     var43.x2[1] = ((orc_uint8) var39.x2[1] + (orc_uint8) var41.x2[1] + 1) >> 1;
7306     /* 7: splitwb */
7307     {
7308       orc_union16 _src;
7309       _src.i = var43.i;
7310       var37 = _src.x2[1];
7311       var38 = _src.x2[0];
7312     }
7313     /* 8: storeb */
7314     ptr3[i] = var37;
7315     /* 9: storeb */
7316     ptr2[i] = var38;
7317   }
7318
7319 }
7320
7321 void
7322 cogorc_convert_YUY2_I420 (orc_uint16 * ORC_RESTRICT d1,
7323     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
7324     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
7325     const orc_uint32 * ORC_RESTRICT s2, int n)
7326 {
7327   OrcExecutor _ex, *ex = &_ex;
7328   static volatile int p_inited = 0;
7329   static OrcProgram *p = 0;
7330   void (*func) (OrcExecutor *);
7331
7332   if (!p_inited) {
7333     orc_once_mutex_lock ();
7334     if (!p_inited) {
7335
7336       p = orc_program_new ();
7337       orc_program_set_name (p, "cogorc_convert_YUY2_I420");
7338       orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_I420);
7339       orc_program_add_destination (p, 2, "d1");
7340       orc_program_add_destination (p, 2, "d2");
7341       orc_program_add_destination (p, 1, "d3");
7342       orc_program_add_destination (p, 1, "d4");
7343       orc_program_add_source (p, 4, "s1");
7344       orc_program_add_source (p, 4, "s2");
7345       orc_program_add_temporary (p, 2, "t1");
7346       orc_program_add_temporary (p, 2, "t2");
7347       orc_program_add_temporary (p, 2, "t3");
7348
7349       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_S1,
7350           ORC_VAR_D1);
7351       orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
7352           ORC_VAR_D1);
7353       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_S2,
7354           ORC_VAR_D1);
7355       orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
7356           ORC_VAR_D1);
7357       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
7358           ORC_VAR_D1);
7359       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
7360           ORC_VAR_D1);
7361
7362       orc_program_compile (p);
7363     }
7364     p_inited = TRUE;
7365     orc_once_mutex_unlock ();
7366   }
7367   ex->program = p;
7368
7369   ex->n = n;
7370   ex->arrays[ORC_VAR_D1] = d1;
7371   ex->arrays[ORC_VAR_D2] = d2;
7372   ex->arrays[ORC_VAR_D3] = d3;
7373   ex->arrays[ORC_VAR_D4] = d4;
7374   ex->arrays[ORC_VAR_S1] = (void *) s1;
7375   ex->arrays[ORC_VAR_S2] = (void *) s2;
7376
7377   func = p->code_exec;
7378   func (ex);
7379 }
7380 #endif
7381
7382
7383 /* cogorc_convert_UYVY_YUY2 */
7384 #ifdef DISABLE_ORC
7385 void
7386 cogorc_convert_UYVY_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
7387     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7388 {
7389   int i;
7390   int j;
7391   orc_union32 *ORC_RESTRICT ptr0;
7392   const orc_union32 *ORC_RESTRICT ptr4;
7393   orc_union32 var32;
7394   orc_union32 var33;
7395
7396   for (j = 0; j < m; j++) {
7397     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7398     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7399
7400
7401     for (i = 0; i < n; i++) {
7402       /* 0: loadl */
7403       var32 = ptr4[i];
7404       /* 1: swapw */
7405       var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
7406       var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
7407       /* 2: storel */
7408       ptr0[i] = var33;
7409     }
7410   }
7411
7412 }
7413
7414 #else
7415 static void
7416 _backup_cogorc_convert_UYVY_YUY2 (OrcExecutor * ORC_RESTRICT ex)
7417 {
7418   int i;
7419   int j;
7420   int n = ex->n;
7421   int m = ex->params[ORC_VAR_A1];
7422   orc_union32 *ORC_RESTRICT ptr0;
7423   const orc_union32 *ORC_RESTRICT ptr4;
7424   orc_union32 var32;
7425   orc_union32 var33;
7426
7427   for (j = 0; j < m; j++) {
7428     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
7429     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
7430
7431
7432     for (i = 0; i < n; i++) {
7433       /* 0: loadl */
7434       var32 = ptr4[i];
7435       /* 1: swapw */
7436       var33.x2[0] = ORC_SWAP_W (var32.x2[0]);
7437       var33.x2[1] = ORC_SWAP_W (var32.x2[1]);
7438       /* 2: storel */
7439       ptr0[i] = var33;
7440     }
7441   }
7442
7443 }
7444
7445 void
7446 cogorc_convert_UYVY_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
7447     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7448 {
7449   OrcExecutor _ex, *ex = &_ex;
7450   static volatile int p_inited = 0;
7451   static OrcProgram *p = 0;
7452   void (*func) (OrcExecutor *);
7453
7454   if (!p_inited) {
7455     orc_once_mutex_lock ();
7456     if (!p_inited) {
7457
7458       p = orc_program_new ();
7459       orc_program_set_2d (p);
7460       orc_program_set_name (p, "cogorc_convert_UYVY_YUY2");
7461       orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_YUY2);
7462       orc_program_add_destination (p, 4, "d1");
7463       orc_program_add_source (p, 4, "s1");
7464
7465       orc_program_append_2 (p, "swapw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
7466           ORC_VAR_D1);
7467
7468       orc_program_compile (p);
7469     }
7470     p_inited = TRUE;
7471     orc_once_mutex_unlock ();
7472   }
7473   ex->program = p;
7474
7475   ex->n = n;
7476   ORC_EXECUTOR_M (ex) = m;
7477   ex->arrays[ORC_VAR_D1] = d1;
7478   ex->params[ORC_VAR_D1] = d1_stride;
7479   ex->arrays[ORC_VAR_S1] = (void *) s1;
7480   ex->params[ORC_VAR_S1] = s1_stride;
7481
7482   func = p->code_exec;
7483   func (ex);
7484 }
7485 #endif
7486
7487
7488 /* cogorc_planar_chroma_420_422 */
7489 #ifdef DISABLE_ORC
7490 void
7491 cogorc_planar_chroma_420_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
7492     orc_uint8 * ORC_RESTRICT d2, int d2_stride,
7493     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7494 {
7495   int i;
7496   int j;
7497   orc_int8 *ORC_RESTRICT ptr0;
7498   orc_int8 *ORC_RESTRICT ptr1;
7499   const orc_int8 *ORC_RESTRICT ptr4;
7500   orc_int8 var32;
7501   orc_int8 var33;
7502   orc_int8 var34;
7503   orc_int8 var35;
7504
7505   for (j = 0; j < m; j++) {
7506     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7507     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
7508     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7509
7510
7511     for (i = 0; i < n; i++) {
7512       /* 0: loadb */
7513       var32 = ptr4[i];
7514       /* 1: copyb */
7515       var33 = var32;
7516       /* 2: storeb */
7517       ptr0[i] = var33;
7518       /* 3: loadb */
7519       var34 = ptr4[i];
7520       /* 4: copyb */
7521       var35 = var34;
7522       /* 5: storeb */
7523       ptr1[i] = var35;
7524     }
7525   }
7526
7527 }
7528
7529 #else
7530 static void
7531 _backup_cogorc_planar_chroma_420_422 (OrcExecutor * ORC_RESTRICT ex)
7532 {
7533   int i;
7534   int j;
7535   int n = ex->n;
7536   int m = ex->params[ORC_VAR_A1];
7537   orc_int8 *ORC_RESTRICT ptr0;
7538   orc_int8 *ORC_RESTRICT ptr1;
7539   const orc_int8 *ORC_RESTRICT ptr4;
7540   orc_int8 var32;
7541   orc_int8 var33;
7542   orc_int8 var34;
7543   orc_int8 var35;
7544
7545   for (j = 0; j < m; j++) {
7546     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
7547     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
7548     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
7549
7550
7551     for (i = 0; i < n; i++) {
7552       /* 0: loadb */
7553       var32 = ptr4[i];
7554       /* 1: copyb */
7555       var33 = var32;
7556       /* 2: storeb */
7557       ptr0[i] = var33;
7558       /* 3: loadb */
7559       var34 = ptr4[i];
7560       /* 4: copyb */
7561       var35 = var34;
7562       /* 5: storeb */
7563       ptr1[i] = var35;
7564     }
7565   }
7566
7567 }
7568
7569 void
7570 cogorc_planar_chroma_420_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
7571     orc_uint8 * ORC_RESTRICT d2, int d2_stride,
7572     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7573 {
7574   OrcExecutor _ex, *ex = &_ex;
7575   static volatile int p_inited = 0;
7576   static OrcProgram *p = 0;
7577   void (*func) (OrcExecutor *);
7578
7579   if (!p_inited) {
7580     orc_once_mutex_lock ();
7581     if (!p_inited) {
7582
7583       p = orc_program_new ();
7584       orc_program_set_2d (p);
7585       orc_program_set_name (p, "cogorc_planar_chroma_420_422");
7586       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_422);
7587       orc_program_add_destination (p, 1, "d1");
7588       orc_program_add_destination (p, 1, "d2");
7589       orc_program_add_source (p, 1, "s1");
7590
7591       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1,
7592           ORC_VAR_D1);
7593       orc_program_append_2 (p, "copyb", 0, ORC_VAR_D2, ORC_VAR_S1, ORC_VAR_D1,
7594           ORC_VAR_D1);
7595
7596       orc_program_compile (p);
7597     }
7598     p_inited = TRUE;
7599     orc_once_mutex_unlock ();
7600   }
7601   ex->program = p;
7602
7603   ex->n = n;
7604   ORC_EXECUTOR_M (ex) = m;
7605   ex->arrays[ORC_VAR_D1] = d1;
7606   ex->params[ORC_VAR_D1] = d1_stride;
7607   ex->arrays[ORC_VAR_D2] = d2;
7608   ex->params[ORC_VAR_D2] = d2_stride;
7609   ex->arrays[ORC_VAR_S1] = (void *) s1;
7610   ex->params[ORC_VAR_S1] = s1_stride;
7611
7612   func = p->code_exec;
7613   func (ex);
7614 }
7615 #endif
7616
7617
7618 /* cogorc_planar_chroma_420_444 */
7619 #ifdef DISABLE_ORC
7620 void
7621 cogorc_planar_chroma_420_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
7622     orc_uint16 * ORC_RESTRICT d2, int d2_stride,
7623     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7624 {
7625   int i;
7626   int j;
7627   orc_union16 *ORC_RESTRICT ptr0;
7628   orc_union16 *ORC_RESTRICT ptr1;
7629   const orc_int8 *ORC_RESTRICT ptr4;
7630   orc_int8 var33;
7631   orc_union16 var34;
7632
7633   for (j = 0; j < m; j++) {
7634     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7635     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
7636     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7637
7638
7639     for (i = 0; i < n; i++) {
7640       /* 0: loadb */
7641       var33 = ptr4[i];
7642       /* 1: splatbw */
7643       var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
7644       /* 2: storew */
7645       ptr0[i] = var34;
7646       /* 3: storew */
7647       ptr1[i] = var34;
7648     }
7649   }
7650
7651 }
7652
7653 #else
7654 static void
7655 _backup_cogorc_planar_chroma_420_444 (OrcExecutor * ORC_RESTRICT ex)
7656 {
7657   int i;
7658   int j;
7659   int n = ex->n;
7660   int m = ex->params[ORC_VAR_A1];
7661   orc_union16 *ORC_RESTRICT ptr0;
7662   orc_union16 *ORC_RESTRICT ptr1;
7663   const orc_int8 *ORC_RESTRICT ptr4;
7664   orc_int8 var33;
7665   orc_union16 var34;
7666
7667   for (j = 0; j < m; j++) {
7668     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
7669     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
7670     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
7671
7672
7673     for (i = 0; i < n; i++) {
7674       /* 0: loadb */
7675       var33 = ptr4[i];
7676       /* 1: splatbw */
7677       var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
7678       /* 2: storew */
7679       ptr0[i] = var34;
7680       /* 3: storew */
7681       ptr1[i] = var34;
7682     }
7683   }
7684
7685 }
7686
7687 void
7688 cogorc_planar_chroma_420_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
7689     orc_uint16 * ORC_RESTRICT d2, int d2_stride,
7690     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7691 {
7692   OrcExecutor _ex, *ex = &_ex;
7693   static volatile int p_inited = 0;
7694   static OrcProgram *p = 0;
7695   void (*func) (OrcExecutor *);
7696
7697   if (!p_inited) {
7698     orc_once_mutex_lock ();
7699     if (!p_inited) {
7700
7701       p = orc_program_new ();
7702       orc_program_set_2d (p);
7703       orc_program_set_name (p, "cogorc_planar_chroma_420_444");
7704       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_420_444);
7705       orc_program_add_destination (p, 2, "d1");
7706       orc_program_add_destination (p, 2, "d2");
7707       orc_program_add_source (p, 1, "s1");
7708       orc_program_add_temporary (p, 2, "t1");
7709
7710       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
7711           ORC_VAR_D1);
7712       orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
7713           ORC_VAR_D1);
7714       orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_D1,
7715           ORC_VAR_D1);
7716
7717       orc_program_compile (p);
7718     }
7719     p_inited = TRUE;
7720     orc_once_mutex_unlock ();
7721   }
7722   ex->program = p;
7723
7724   ex->n = n;
7725   ORC_EXECUTOR_M (ex) = m;
7726   ex->arrays[ORC_VAR_D1] = d1;
7727   ex->params[ORC_VAR_D1] = d1_stride;
7728   ex->arrays[ORC_VAR_D2] = d2;
7729   ex->params[ORC_VAR_D2] = d2_stride;
7730   ex->arrays[ORC_VAR_S1] = (void *) s1;
7731   ex->params[ORC_VAR_S1] = s1_stride;
7732
7733   func = p->code_exec;
7734   func (ex);
7735 }
7736 #endif
7737
7738
7739 /* cogorc_planar_chroma_422_444 */
7740 #ifdef DISABLE_ORC
7741 void
7742 cogorc_planar_chroma_422_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
7743     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7744 {
7745   int i;
7746   int j;
7747   orc_union16 *ORC_RESTRICT ptr0;
7748   const orc_int8 *ORC_RESTRICT ptr4;
7749   orc_int8 var33;
7750   orc_union16 var34;
7751
7752   for (j = 0; j < m; j++) {
7753     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7754     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7755
7756
7757     for (i = 0; i < n; i++) {
7758       /* 0: loadb */
7759       var33 = ptr4[i];
7760       /* 1: splatbw */
7761       var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
7762       /* 2: storew */
7763       ptr0[i] = var34;
7764     }
7765   }
7766
7767 }
7768
7769 #else
7770 static void
7771 _backup_cogorc_planar_chroma_422_444 (OrcExecutor * ORC_RESTRICT ex)
7772 {
7773   int i;
7774   int j;
7775   int n = ex->n;
7776   int m = ex->params[ORC_VAR_A1];
7777   orc_union16 *ORC_RESTRICT ptr0;
7778   const orc_int8 *ORC_RESTRICT ptr4;
7779   orc_int8 var33;
7780   orc_union16 var34;
7781
7782   for (j = 0; j < m; j++) {
7783     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
7784     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
7785
7786
7787     for (i = 0; i < n; i++) {
7788       /* 0: loadb */
7789       var33 = ptr4[i];
7790       /* 1: splatbw */
7791       var34.i = ((var33 & 0xff) << 8) | (var33 & 0xff);
7792       /* 2: storew */
7793       ptr0[i] = var34;
7794     }
7795   }
7796
7797 }
7798
7799 void
7800 cogorc_planar_chroma_422_444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
7801     const orc_uint8 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7802 {
7803   OrcExecutor _ex, *ex = &_ex;
7804   static volatile int p_inited = 0;
7805   static OrcProgram *p = 0;
7806   void (*func) (OrcExecutor *);
7807
7808   if (!p_inited) {
7809     orc_once_mutex_lock ();
7810     if (!p_inited) {
7811
7812       p = orc_program_new ();
7813       orc_program_set_2d (p);
7814       orc_program_set_name (p, "cogorc_planar_chroma_422_444");
7815       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_444);
7816       orc_program_add_destination (p, 2, "d1");
7817       orc_program_add_source (p, 1, "s1");
7818       orc_program_add_temporary (p, 2, "t1");
7819
7820       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1,
7821           ORC_VAR_D1);
7822       orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_D1,
7823           ORC_VAR_D1);
7824
7825       orc_program_compile (p);
7826     }
7827     p_inited = TRUE;
7828     orc_once_mutex_unlock ();
7829   }
7830   ex->program = p;
7831
7832   ex->n = n;
7833   ORC_EXECUTOR_M (ex) = m;
7834   ex->arrays[ORC_VAR_D1] = d1;
7835   ex->params[ORC_VAR_D1] = d1_stride;
7836   ex->arrays[ORC_VAR_S1] = (void *) s1;
7837   ex->params[ORC_VAR_S1] = s1_stride;
7838
7839   func = p->code_exec;
7840   func (ex);
7841 }
7842 #endif
7843
7844
7845 /* cogorc_planar_chroma_444_422 */
7846 #ifdef DISABLE_ORC
7847 void
7848 cogorc_planar_chroma_444_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
7849     const orc_uint16 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7850 {
7851   int i;
7852   int j;
7853   orc_int8 *ORC_RESTRICT ptr0;
7854   const orc_union16 *ORC_RESTRICT ptr4;
7855   orc_union16 var34;
7856   orc_int8 var35;
7857   orc_int8 var36;
7858   orc_int8 var37;
7859
7860   for (j = 0; j < m; j++) {
7861     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7862     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7863
7864
7865     for (i = 0; i < n; i++) {
7866       /* 0: loadw */
7867       var34 = ptr4[i];
7868       /* 1: splitwb */
7869       {
7870         orc_union16 _src;
7871         _src.i = var34.i;
7872         var36 = _src.x2[1];
7873         var37 = _src.x2[0];
7874       }
7875       /* 2: avgub */
7876       var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
7877       /* 3: storeb */
7878       ptr0[i] = var35;
7879     }
7880   }
7881
7882 }
7883
7884 #else
7885 static void
7886 _backup_cogorc_planar_chroma_444_422 (OrcExecutor * ORC_RESTRICT ex)
7887 {
7888   int i;
7889   int j;
7890   int n = ex->n;
7891   int m = ex->params[ORC_VAR_A1];
7892   orc_int8 *ORC_RESTRICT ptr0;
7893   const orc_union16 *ORC_RESTRICT ptr4;
7894   orc_union16 var34;
7895   orc_int8 var35;
7896   orc_int8 var36;
7897   orc_int8 var37;
7898
7899   for (j = 0; j < m; j++) {
7900     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
7901     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
7902
7903
7904     for (i = 0; i < n; i++) {
7905       /* 0: loadw */
7906       var34 = ptr4[i];
7907       /* 1: splitwb */
7908       {
7909         orc_union16 _src;
7910         _src.i = var34.i;
7911         var36 = _src.x2[1];
7912         var37 = _src.x2[0];
7913       }
7914       /* 2: avgub */
7915       var35 = ((orc_uint8) var36 + (orc_uint8) var37 + 1) >> 1;
7916       /* 3: storeb */
7917       ptr0[i] = var35;
7918     }
7919   }
7920
7921 }
7922
7923 void
7924 cogorc_planar_chroma_444_422 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
7925     const orc_uint16 * ORC_RESTRICT s1, int s1_stride, int n, int m)
7926 {
7927   OrcExecutor _ex, *ex = &_ex;
7928   static volatile int p_inited = 0;
7929   static OrcProgram *p = 0;
7930   void (*func) (OrcExecutor *);
7931
7932   if (!p_inited) {
7933     orc_once_mutex_lock ();
7934     if (!p_inited) {
7935
7936       p = orc_program_new ();
7937       orc_program_set_2d (p);
7938       orc_program_set_name (p, "cogorc_planar_chroma_444_422");
7939       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_422);
7940       orc_program_add_destination (p, 1, "d1");
7941       orc_program_add_source (p, 2, "s1");
7942       orc_program_add_temporary (p, 1, "t1");
7943       orc_program_add_temporary (p, 1, "t2");
7944
7945       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
7946           ORC_VAR_D1);
7947       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
7948           ORC_VAR_D1);
7949
7950       orc_program_compile (p);
7951     }
7952     p_inited = TRUE;
7953     orc_once_mutex_unlock ();
7954   }
7955   ex->program = p;
7956
7957   ex->n = n;
7958   ORC_EXECUTOR_M (ex) = m;
7959   ex->arrays[ORC_VAR_D1] = d1;
7960   ex->params[ORC_VAR_D1] = d1_stride;
7961   ex->arrays[ORC_VAR_S1] = (void *) s1;
7962   ex->params[ORC_VAR_S1] = s1_stride;
7963
7964   func = p->code_exec;
7965   func (ex);
7966 }
7967 #endif
7968
7969
7970 /* cogorc_planar_chroma_444_420 */
7971 #ifdef DISABLE_ORC
7972 void
7973 cogorc_planar_chroma_444_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
7974     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
7975     const orc_uint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
7976 {
7977   int i;
7978   int j;
7979   orc_int8 *ORC_RESTRICT ptr0;
7980   const orc_union16 *ORC_RESTRICT ptr4;
7981   const orc_union16 *ORC_RESTRICT ptr5;
7982   orc_union16 var35;
7983   orc_union16 var36;
7984   orc_int8 var37;
7985   orc_union16 var38;
7986   orc_int8 var39;
7987   orc_int8 var40;
7988
7989   for (j = 0; j < m; j++) {
7990     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
7991     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
7992     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
7993
7994
7995     for (i = 0; i < n; i++) {
7996       /* 0: loadw */
7997       var35 = ptr4[i];
7998       /* 1: loadw */
7999       var36 = ptr5[i];
8000       /* 2: avgub */
8001       var38.x2[0] =
8002           ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
8003       var38.x2[1] =
8004           ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
8005       /* 3: splitwb */
8006       {
8007         orc_union16 _src;
8008         _src.i = var38.i;
8009         var39 = _src.x2[1];
8010         var40 = _src.x2[0];
8011       }
8012       /* 4: avgub */
8013       var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
8014       /* 5: storeb */
8015       ptr0[i] = var37;
8016     }
8017   }
8018
8019 }
8020
8021 #else
8022 static void
8023 _backup_cogorc_planar_chroma_444_420 (OrcExecutor * ORC_RESTRICT ex)
8024 {
8025   int i;
8026   int j;
8027   int n = ex->n;
8028   int m = ex->params[ORC_VAR_A1];
8029   orc_int8 *ORC_RESTRICT ptr0;
8030   const orc_union16 *ORC_RESTRICT ptr4;
8031   const orc_union16 *ORC_RESTRICT ptr5;
8032   orc_union16 var35;
8033   orc_union16 var36;
8034   orc_int8 var37;
8035   orc_union16 var38;
8036   orc_int8 var39;
8037   orc_int8 var40;
8038
8039   for (j = 0; j < m; j++) {
8040     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8041     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8042     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
8043
8044
8045     for (i = 0; i < n; i++) {
8046       /* 0: loadw */
8047       var35 = ptr4[i];
8048       /* 1: loadw */
8049       var36 = ptr5[i];
8050       /* 2: avgub */
8051       var38.x2[0] =
8052           ((orc_uint8) var35.x2[0] + (orc_uint8) var36.x2[0] + 1) >> 1;
8053       var38.x2[1] =
8054           ((orc_uint8) var35.x2[1] + (orc_uint8) var36.x2[1] + 1) >> 1;
8055       /* 3: splitwb */
8056       {
8057         orc_union16 _src;
8058         _src.i = var38.i;
8059         var39 = _src.x2[1];
8060         var40 = _src.x2[0];
8061       }
8062       /* 4: avgub */
8063       var37 = ((orc_uint8) var39 + (orc_uint8) var40 + 1) >> 1;
8064       /* 5: storeb */
8065       ptr0[i] = var37;
8066     }
8067   }
8068
8069 }
8070
8071 void
8072 cogorc_planar_chroma_444_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
8073     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
8074     const orc_uint16 * ORC_RESTRICT s2, int s2_stride, int n, int m)
8075 {
8076   OrcExecutor _ex, *ex = &_ex;
8077   static volatile int p_inited = 0;
8078   static OrcProgram *p = 0;
8079   void (*func) (OrcExecutor *);
8080
8081   if (!p_inited) {
8082     orc_once_mutex_lock ();
8083     if (!p_inited) {
8084
8085       p = orc_program_new ();
8086       orc_program_set_2d (p);
8087       orc_program_set_name (p, "cogorc_planar_chroma_444_420");
8088       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_444_420);
8089       orc_program_add_destination (p, 1, "d1");
8090       orc_program_add_source (p, 2, "s1");
8091       orc_program_add_source (p, 2, "s2");
8092       orc_program_add_temporary (p, 2, "t1");
8093       orc_program_add_temporary (p, 1, "t2");
8094       orc_program_add_temporary (p, 1, "t3");
8095
8096       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S2,
8097           ORC_VAR_D1);
8098       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T1,
8099           ORC_VAR_D1);
8100       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T3,
8101           ORC_VAR_D1);
8102
8103       orc_program_compile (p);
8104     }
8105     p_inited = TRUE;
8106     orc_once_mutex_unlock ();
8107   }
8108   ex->program = p;
8109
8110   ex->n = n;
8111   ORC_EXECUTOR_M (ex) = m;
8112   ex->arrays[ORC_VAR_D1] = d1;
8113   ex->params[ORC_VAR_D1] = d1_stride;
8114   ex->arrays[ORC_VAR_S1] = (void *) s1;
8115   ex->params[ORC_VAR_S1] = s1_stride;
8116   ex->arrays[ORC_VAR_S2] = (void *) s2;
8117   ex->params[ORC_VAR_S2] = s2_stride;
8118
8119   func = p->code_exec;
8120   func (ex);
8121 }
8122 #endif
8123
8124
8125 /* cogorc_planar_chroma_422_420 */
8126 #ifdef DISABLE_ORC
8127 void
8128 cogorc_planar_chroma_422_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
8129     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
8130     const orc_uint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
8131 {
8132   int i;
8133   int j;
8134   orc_int8 *ORC_RESTRICT ptr0;
8135   const orc_int8 *ORC_RESTRICT ptr4;
8136   const orc_int8 *ORC_RESTRICT ptr5;
8137   orc_int8 var32;
8138   orc_int8 var33;
8139   orc_int8 var34;
8140
8141   for (j = 0; j < m; j++) {
8142     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
8143     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
8144     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
8145
8146
8147     for (i = 0; i < n; i++) {
8148       /* 0: loadb */
8149       var32 = ptr4[i];
8150       /* 1: loadb */
8151       var33 = ptr5[i];
8152       /* 2: avgub */
8153       var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
8154       /* 3: storeb */
8155       ptr0[i] = var34;
8156     }
8157   }
8158
8159 }
8160
8161 #else
8162 static void
8163 _backup_cogorc_planar_chroma_422_420 (OrcExecutor * ORC_RESTRICT ex)
8164 {
8165   int i;
8166   int j;
8167   int n = ex->n;
8168   int m = ex->params[ORC_VAR_A1];
8169   orc_int8 *ORC_RESTRICT ptr0;
8170   const orc_int8 *ORC_RESTRICT ptr4;
8171   const orc_int8 *ORC_RESTRICT ptr5;
8172   orc_int8 var32;
8173   orc_int8 var33;
8174   orc_int8 var34;
8175
8176   for (j = 0; j < m; j++) {
8177     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8178     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8179     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
8180
8181
8182     for (i = 0; i < n; i++) {
8183       /* 0: loadb */
8184       var32 = ptr4[i];
8185       /* 1: loadb */
8186       var33 = ptr5[i];
8187       /* 2: avgub */
8188       var34 = ((orc_uint8) var32 + (orc_uint8) var33 + 1) >> 1;
8189       /* 3: storeb */
8190       ptr0[i] = var34;
8191     }
8192   }
8193
8194 }
8195
8196 void
8197 cogorc_planar_chroma_422_420 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
8198     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
8199     const orc_uint8 * ORC_RESTRICT s2, int s2_stride, int n, int m)
8200 {
8201   OrcExecutor _ex, *ex = &_ex;
8202   static volatile int p_inited = 0;
8203   static OrcProgram *p = 0;
8204   void (*func) (OrcExecutor *);
8205
8206   if (!p_inited) {
8207     orc_once_mutex_lock ();
8208     if (!p_inited) {
8209
8210       p = orc_program_new ();
8211       orc_program_set_2d (p);
8212       orc_program_set_name (p, "cogorc_planar_chroma_422_420");
8213       orc_program_set_backup_function (p, _backup_cogorc_planar_chroma_422_420);
8214       orc_program_add_destination (p, 1, "d1");
8215       orc_program_add_source (p, 1, "s1");
8216       orc_program_add_source (p, 1, "s2");
8217
8218       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_S2,
8219           ORC_VAR_D1);
8220
8221       orc_program_compile (p);
8222     }
8223     p_inited = TRUE;
8224     orc_once_mutex_unlock ();
8225   }
8226   ex->program = p;
8227
8228   ex->n = n;
8229   ORC_EXECUTOR_M (ex) = m;
8230   ex->arrays[ORC_VAR_D1] = d1;
8231   ex->params[ORC_VAR_D1] = d1_stride;
8232   ex->arrays[ORC_VAR_S1] = (void *) s1;
8233   ex->params[ORC_VAR_S1] = s1_stride;
8234   ex->arrays[ORC_VAR_S2] = (void *) s2;
8235   ex->params[ORC_VAR_S2] = s2_stride;
8236
8237   func = p->code_exec;
8238   func (ex);
8239 }
8240 #endif
8241
8242
8243 /* cogorc_convert_YUY2_AYUV */
8244 #ifdef DISABLE_ORC
8245 void
8246 cogorc_convert_YUY2_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
8247     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
8248 {
8249   int i;
8250   int j;
8251   orc_union64 *ORC_RESTRICT ptr0;
8252   const orc_union32 *ORC_RESTRICT ptr4;
8253   orc_union32 var36;
8254   orc_union16 var37;
8255   orc_union64 var38;
8256   orc_union16 var39;
8257   orc_union16 var40;
8258   orc_union32 var41;
8259   orc_union32 var42;
8260
8261   for (j = 0; j < m; j++) {
8262     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
8263     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
8264
8265     /* 2: loadpb */
8266     var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8267     var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8268
8269     for (i = 0; i < n; i++) {
8270       /* 0: loadl */
8271       var36 = ptr4[i];
8272       /* 1: splitwb */
8273       {
8274         orc_union16 _src;
8275         _src.i = var36.x2[0];
8276         var39.x2[0] = _src.x2[1];
8277         var40.x2[0] = _src.x2[0];
8278       }
8279       {
8280         orc_union16 _src;
8281         _src.i = var36.x2[1];
8282         var39.x2[1] = _src.x2[1];
8283         var40.x2[1] = _src.x2[0];
8284       }
8285       /* 3: mergebw */
8286       {
8287         orc_union16 _dest;
8288         _dest.x2[0] = var37.x2[0];
8289         _dest.x2[1] = var40.x2[0];
8290         var41.x2[0] = _dest.i;
8291       }
8292       {
8293         orc_union16 _dest;
8294         _dest.x2[0] = var37.x2[1];
8295         _dest.x2[1] = var40.x2[1];
8296         var41.x2[1] = _dest.i;
8297       }
8298       /* 4: mergewl */
8299       {
8300         orc_union32 _dest;
8301         _dest.x2[0] = var39.i;
8302         _dest.x2[1] = var39.i;
8303         var42.i = _dest.i;
8304       }
8305       /* 5: mergewl */
8306       {
8307         orc_union32 _dest;
8308         _dest.x2[0] = var41.x2[0];
8309         _dest.x2[1] = var42.x2[0];
8310         var38.x2[0] = _dest.i;
8311       }
8312       {
8313         orc_union32 _dest;
8314         _dest.x2[0] = var41.x2[1];
8315         _dest.x2[1] = var42.x2[1];
8316         var38.x2[1] = _dest.i;
8317       }
8318       /* 6: storeq */
8319       ptr0[i] = var38;
8320     }
8321   }
8322
8323 }
8324
8325 #else
8326 static void
8327 _backup_cogorc_convert_YUY2_AYUV (OrcExecutor * ORC_RESTRICT ex)
8328 {
8329   int i;
8330   int j;
8331   int n = ex->n;
8332   int m = ex->params[ORC_VAR_A1];
8333   orc_union64 *ORC_RESTRICT ptr0;
8334   const orc_union32 *ORC_RESTRICT ptr4;
8335   orc_union32 var36;
8336   orc_union16 var37;
8337   orc_union64 var38;
8338   orc_union16 var39;
8339   orc_union16 var40;
8340   orc_union32 var41;
8341   orc_union32 var42;
8342
8343   for (j = 0; j < m; j++) {
8344     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8345     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8346
8347     /* 2: loadpb */
8348     var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8349     var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8350
8351     for (i = 0; i < n; i++) {
8352       /* 0: loadl */
8353       var36 = ptr4[i];
8354       /* 1: splitwb */
8355       {
8356         orc_union16 _src;
8357         _src.i = var36.x2[0];
8358         var39.x2[0] = _src.x2[1];
8359         var40.x2[0] = _src.x2[0];
8360       }
8361       {
8362         orc_union16 _src;
8363         _src.i = var36.x2[1];
8364         var39.x2[1] = _src.x2[1];
8365         var40.x2[1] = _src.x2[0];
8366       }
8367       /* 3: mergebw */
8368       {
8369         orc_union16 _dest;
8370         _dest.x2[0] = var37.x2[0];
8371         _dest.x2[1] = var40.x2[0];
8372         var41.x2[0] = _dest.i;
8373       }
8374       {
8375         orc_union16 _dest;
8376         _dest.x2[0] = var37.x2[1];
8377         _dest.x2[1] = var40.x2[1];
8378         var41.x2[1] = _dest.i;
8379       }
8380       /* 4: mergewl */
8381       {
8382         orc_union32 _dest;
8383         _dest.x2[0] = var39.i;
8384         _dest.x2[1] = var39.i;
8385         var42.i = _dest.i;
8386       }
8387       /* 5: mergewl */
8388       {
8389         orc_union32 _dest;
8390         _dest.x2[0] = var41.x2[0];
8391         _dest.x2[1] = var42.x2[0];
8392         var38.x2[0] = _dest.i;
8393       }
8394       {
8395         orc_union32 _dest;
8396         _dest.x2[0] = var41.x2[1];
8397         _dest.x2[1] = var42.x2[1];
8398         var38.x2[1] = _dest.i;
8399       }
8400       /* 6: storeq */
8401       ptr0[i] = var38;
8402     }
8403   }
8404
8405 }
8406
8407 void
8408 cogorc_convert_YUY2_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
8409     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
8410 {
8411   OrcExecutor _ex, *ex = &_ex;
8412   static volatile int p_inited = 0;
8413   static OrcProgram *p = 0;
8414   void (*func) (OrcExecutor *);
8415
8416   if (!p_inited) {
8417     orc_once_mutex_lock ();
8418     if (!p_inited) {
8419
8420       p = orc_program_new ();
8421       orc_program_set_2d (p);
8422       orc_program_set_name (p, "cogorc_convert_YUY2_AYUV");
8423       orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_AYUV);
8424       orc_program_add_destination (p, 8, "d1");
8425       orc_program_add_source (p, 4, "s1");
8426       orc_program_add_constant (p, 2, 0x000000ff, "c1");
8427       orc_program_add_temporary (p, 2, "t1");
8428       orc_program_add_temporary (p, 2, "t2");
8429       orc_program_add_temporary (p, 4, "t3");
8430       orc_program_add_temporary (p, 4, "t4");
8431
8432       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
8433           ORC_VAR_D1);
8434       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
8435           ORC_VAR_D1);
8436       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
8437           ORC_VAR_D1);
8438       orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
8439           ORC_VAR_D1);
8440
8441       orc_program_compile (p);
8442     }
8443     p_inited = TRUE;
8444     orc_once_mutex_unlock ();
8445   }
8446   ex->program = p;
8447
8448   ex->n = n;
8449   ORC_EXECUTOR_M (ex) = m;
8450   ex->arrays[ORC_VAR_D1] = d1;
8451   ex->params[ORC_VAR_D1] = d1_stride;
8452   ex->arrays[ORC_VAR_S1] = (void *) s1;
8453   ex->params[ORC_VAR_S1] = s1_stride;
8454
8455   func = p->code_exec;
8456   func (ex);
8457 }
8458 #endif
8459
8460
8461 /* cogorc_convert_UYVY_AYUV */
8462 #ifdef DISABLE_ORC
8463 void
8464 cogorc_convert_UYVY_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
8465     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
8466 {
8467   int i;
8468   int j;
8469   orc_union64 *ORC_RESTRICT ptr0;
8470   const orc_union32 *ORC_RESTRICT ptr4;
8471   orc_union32 var36;
8472   orc_union16 var37;
8473   orc_union64 var38;
8474   orc_union16 var39;
8475   orc_union16 var40;
8476   orc_union32 var41;
8477   orc_union32 var42;
8478
8479   for (j = 0; j < m; j++) {
8480     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
8481     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
8482
8483     /* 2: loadpb */
8484     var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8485     var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8486
8487     for (i = 0; i < n; i++) {
8488       /* 0: loadl */
8489       var36 = ptr4[i];
8490       /* 1: splitwb */
8491       {
8492         orc_union16 _src;
8493         _src.i = var36.x2[0];
8494         var39.x2[0] = _src.x2[1];
8495         var40.x2[0] = _src.x2[0];
8496       }
8497       {
8498         orc_union16 _src;
8499         _src.i = var36.x2[1];
8500         var39.x2[1] = _src.x2[1];
8501         var40.x2[1] = _src.x2[0];
8502       }
8503       /* 3: mergebw */
8504       {
8505         orc_union16 _dest;
8506         _dest.x2[0] = var37.x2[0];
8507         _dest.x2[1] = var39.x2[0];
8508         var41.x2[0] = _dest.i;
8509       }
8510       {
8511         orc_union16 _dest;
8512         _dest.x2[0] = var37.x2[1];
8513         _dest.x2[1] = var39.x2[1];
8514         var41.x2[1] = _dest.i;
8515       }
8516       /* 4: mergewl */
8517       {
8518         orc_union32 _dest;
8519         _dest.x2[0] = var40.i;
8520         _dest.x2[1] = var40.i;
8521         var42.i = _dest.i;
8522       }
8523       /* 5: mergewl */
8524       {
8525         orc_union32 _dest;
8526         _dest.x2[0] = var41.x2[0];
8527         _dest.x2[1] = var42.x2[0];
8528         var38.x2[0] = _dest.i;
8529       }
8530       {
8531         orc_union32 _dest;
8532         _dest.x2[0] = var41.x2[1];
8533         _dest.x2[1] = var42.x2[1];
8534         var38.x2[1] = _dest.i;
8535       }
8536       /* 6: storeq */
8537       ptr0[i] = var38;
8538     }
8539   }
8540
8541 }
8542
8543 #else
8544 static void
8545 _backup_cogorc_convert_UYVY_AYUV (OrcExecutor * ORC_RESTRICT ex)
8546 {
8547   int i;
8548   int j;
8549   int n = ex->n;
8550   int m = ex->params[ORC_VAR_A1];
8551   orc_union64 *ORC_RESTRICT ptr0;
8552   const orc_union32 *ORC_RESTRICT ptr4;
8553   orc_union32 var36;
8554   orc_union16 var37;
8555   orc_union64 var38;
8556   orc_union16 var39;
8557   orc_union16 var40;
8558   orc_union32 var41;
8559   orc_union32 var42;
8560
8561   for (j = 0; j < m; j++) {
8562     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8563     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8564
8565     /* 2: loadpb */
8566     var37.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8567     var37.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
8568
8569     for (i = 0; i < n; i++) {
8570       /* 0: loadl */
8571       var36 = ptr4[i];
8572       /* 1: splitwb */
8573       {
8574         orc_union16 _src;
8575         _src.i = var36.x2[0];
8576         var39.x2[0] = _src.x2[1];
8577         var40.x2[0] = _src.x2[0];
8578       }
8579       {
8580         orc_union16 _src;
8581         _src.i = var36.x2[1];
8582         var39.x2[1] = _src.x2[1];
8583         var40.x2[1] = _src.x2[0];
8584       }
8585       /* 3: mergebw */
8586       {
8587         orc_union16 _dest;
8588         _dest.x2[0] = var37.x2[0];
8589         _dest.x2[1] = var39.x2[0];
8590         var41.x2[0] = _dest.i;
8591       }
8592       {
8593         orc_union16 _dest;
8594         _dest.x2[0] = var37.x2[1];
8595         _dest.x2[1] = var39.x2[1];
8596         var41.x2[1] = _dest.i;
8597       }
8598       /* 4: mergewl */
8599       {
8600         orc_union32 _dest;
8601         _dest.x2[0] = var40.i;
8602         _dest.x2[1] = var40.i;
8603         var42.i = _dest.i;
8604       }
8605       /* 5: mergewl */
8606       {
8607         orc_union32 _dest;
8608         _dest.x2[0] = var41.x2[0];
8609         _dest.x2[1] = var42.x2[0];
8610         var38.x2[0] = _dest.i;
8611       }
8612       {
8613         orc_union32 _dest;
8614         _dest.x2[0] = var41.x2[1];
8615         _dest.x2[1] = var42.x2[1];
8616         var38.x2[1] = _dest.i;
8617       }
8618       /* 6: storeq */
8619       ptr0[i] = var38;
8620     }
8621   }
8622
8623 }
8624
8625 void
8626 cogorc_convert_UYVY_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
8627     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
8628 {
8629   OrcExecutor _ex, *ex = &_ex;
8630   static volatile int p_inited = 0;
8631   static OrcProgram *p = 0;
8632   void (*func) (OrcExecutor *);
8633
8634   if (!p_inited) {
8635     orc_once_mutex_lock ();
8636     if (!p_inited) {
8637
8638       p = orc_program_new ();
8639       orc_program_set_2d (p);
8640       orc_program_set_name (p, "cogorc_convert_UYVY_AYUV");
8641       orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_AYUV);
8642       orc_program_add_destination (p, 8, "d1");
8643       orc_program_add_source (p, 4, "s1");
8644       orc_program_add_constant (p, 2, 0x000000ff, "c1");
8645       orc_program_add_temporary (p, 2, "t1");
8646       orc_program_add_temporary (p, 2, "t2");
8647       orc_program_add_temporary (p, 4, "t3");
8648       orc_program_add_temporary (p, 4, "t4");
8649
8650       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_T2, ORC_VAR_S1,
8651           ORC_VAR_D1);
8652       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T3, ORC_VAR_C1, ORC_VAR_T1,
8653           ORC_VAR_D1);
8654       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T2,
8655           ORC_VAR_D1);
8656       orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T4,
8657           ORC_VAR_D1);
8658
8659       orc_program_compile (p);
8660     }
8661     p_inited = TRUE;
8662     orc_once_mutex_unlock ();
8663   }
8664   ex->program = p;
8665
8666   ex->n = n;
8667   ORC_EXECUTOR_M (ex) = m;
8668   ex->arrays[ORC_VAR_D1] = d1;
8669   ex->params[ORC_VAR_D1] = d1_stride;
8670   ex->arrays[ORC_VAR_S1] = (void *) s1;
8671   ex->params[ORC_VAR_S1] = s1_stride;
8672
8673   func = p->code_exec;
8674   func (ex);
8675 }
8676 #endif
8677
8678
8679 /* cogorc_convert_YUY2_Y42B */
8680 #ifdef DISABLE_ORC
8681 void
8682 cogorc_convert_YUY2_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
8683     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
8684     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
8685     int m)
8686 {
8687   int i;
8688   int j;
8689   orc_union16 *ORC_RESTRICT ptr0;
8690   orc_int8 *ORC_RESTRICT ptr1;
8691   orc_int8 *ORC_RESTRICT ptr2;
8692   const orc_union32 *ORC_RESTRICT ptr4;
8693   orc_union32 var33;
8694   orc_union16 var34;
8695   orc_int8 var35;
8696   orc_int8 var36;
8697   orc_union16 var37;
8698
8699   for (j = 0; j < m; j++) {
8700     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
8701     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
8702     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
8703     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
8704
8705
8706     for (i = 0; i < n; i++) {
8707       /* 0: loadl */
8708       var33 = ptr4[i];
8709       /* 1: splitwb */
8710       {
8711         orc_union16 _src;
8712         _src.i = var33.x2[0];
8713         var37.x2[0] = _src.x2[1];
8714         var34.x2[0] = _src.x2[0];
8715       }
8716       {
8717         orc_union16 _src;
8718         _src.i = var33.x2[1];
8719         var37.x2[1] = _src.x2[1];
8720         var34.x2[1] = _src.x2[0];
8721       }
8722       /* 2: storew */
8723       ptr0[i] = var34;
8724       /* 3: splitwb */
8725       {
8726         orc_union16 _src;
8727         _src.i = var37.i;
8728         var35 = _src.x2[1];
8729         var36 = _src.x2[0];
8730       }
8731       /* 4: storeb */
8732       ptr2[i] = var35;
8733       /* 5: storeb */
8734       ptr1[i] = var36;
8735     }
8736   }
8737
8738 }
8739
8740 #else
8741 static void
8742 _backup_cogorc_convert_YUY2_Y42B (OrcExecutor * ORC_RESTRICT ex)
8743 {
8744   int i;
8745   int j;
8746   int n = ex->n;
8747   int m = ex->params[ORC_VAR_A1];
8748   orc_union16 *ORC_RESTRICT ptr0;
8749   orc_int8 *ORC_RESTRICT ptr1;
8750   orc_int8 *ORC_RESTRICT ptr2;
8751   const orc_union32 *ORC_RESTRICT ptr4;
8752   orc_union32 var33;
8753   orc_union16 var34;
8754   orc_int8 var35;
8755   orc_int8 var36;
8756   orc_union16 var37;
8757
8758   for (j = 0; j < m; j++) {
8759     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8760     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
8761     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
8762     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8763
8764
8765     for (i = 0; i < n; i++) {
8766       /* 0: loadl */
8767       var33 = ptr4[i];
8768       /* 1: splitwb */
8769       {
8770         orc_union16 _src;
8771         _src.i = var33.x2[0];
8772         var37.x2[0] = _src.x2[1];
8773         var34.x2[0] = _src.x2[0];
8774       }
8775       {
8776         orc_union16 _src;
8777         _src.i = var33.x2[1];
8778         var37.x2[1] = _src.x2[1];
8779         var34.x2[1] = _src.x2[0];
8780       }
8781       /* 2: storew */
8782       ptr0[i] = var34;
8783       /* 3: splitwb */
8784       {
8785         orc_union16 _src;
8786         _src.i = var37.i;
8787         var35 = _src.x2[1];
8788         var36 = _src.x2[0];
8789       }
8790       /* 4: storeb */
8791       ptr2[i] = var35;
8792       /* 5: storeb */
8793       ptr1[i] = var36;
8794     }
8795   }
8796
8797 }
8798
8799 void
8800 cogorc_convert_YUY2_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
8801     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
8802     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
8803     int m)
8804 {
8805   OrcExecutor _ex, *ex = &_ex;
8806   static volatile int p_inited = 0;
8807   static OrcProgram *p = 0;
8808   void (*func) (OrcExecutor *);
8809
8810   if (!p_inited) {
8811     orc_once_mutex_lock ();
8812     if (!p_inited) {
8813
8814       p = orc_program_new ();
8815       orc_program_set_2d (p);
8816       orc_program_set_name (p, "cogorc_convert_YUY2_Y42B");
8817       orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y42B);
8818       orc_program_add_destination (p, 2, "d1");
8819       orc_program_add_destination (p, 1, "d2");
8820       orc_program_add_destination (p, 1, "d3");
8821       orc_program_add_source (p, 4, "s1");
8822       orc_program_add_temporary (p, 2, "t1");
8823
8824       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
8825           ORC_VAR_D1);
8826       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
8827           ORC_VAR_D1);
8828
8829       orc_program_compile (p);
8830     }
8831     p_inited = TRUE;
8832     orc_once_mutex_unlock ();
8833   }
8834   ex->program = p;
8835
8836   ex->n = n;
8837   ORC_EXECUTOR_M (ex) = m;
8838   ex->arrays[ORC_VAR_D1] = d1;
8839   ex->params[ORC_VAR_D1] = d1_stride;
8840   ex->arrays[ORC_VAR_D2] = d2;
8841   ex->params[ORC_VAR_D2] = d2_stride;
8842   ex->arrays[ORC_VAR_D3] = d3;
8843   ex->params[ORC_VAR_D3] = d3_stride;
8844   ex->arrays[ORC_VAR_S1] = (void *) s1;
8845   ex->params[ORC_VAR_S1] = s1_stride;
8846
8847   func = p->code_exec;
8848   func (ex);
8849 }
8850 #endif
8851
8852
8853 /* cogorc_convert_UYVY_Y42B */
8854 #ifdef DISABLE_ORC
8855 void
8856 cogorc_convert_UYVY_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
8857     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
8858     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
8859     int m)
8860 {
8861   int i;
8862   int j;
8863   orc_union16 *ORC_RESTRICT ptr0;
8864   orc_int8 *ORC_RESTRICT ptr1;
8865   orc_int8 *ORC_RESTRICT ptr2;
8866   const orc_union32 *ORC_RESTRICT ptr4;
8867   orc_union32 var33;
8868   orc_union16 var34;
8869   orc_int8 var35;
8870   orc_int8 var36;
8871   orc_union16 var37;
8872
8873   for (j = 0; j < m; j++) {
8874     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
8875     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
8876     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
8877     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
8878
8879
8880     for (i = 0; i < n; i++) {
8881       /* 0: loadl */
8882       var33 = ptr4[i];
8883       /* 1: splitwb */
8884       {
8885         orc_union16 _src;
8886         _src.i = var33.x2[0];
8887         var34.x2[0] = _src.x2[1];
8888         var37.x2[0] = _src.x2[0];
8889       }
8890       {
8891         orc_union16 _src;
8892         _src.i = var33.x2[1];
8893         var34.x2[1] = _src.x2[1];
8894         var37.x2[1] = _src.x2[0];
8895       }
8896       /* 2: storew */
8897       ptr0[i] = var34;
8898       /* 3: splitwb */
8899       {
8900         orc_union16 _src;
8901         _src.i = var37.i;
8902         var35 = _src.x2[1];
8903         var36 = _src.x2[0];
8904       }
8905       /* 4: storeb */
8906       ptr2[i] = var35;
8907       /* 5: storeb */
8908       ptr1[i] = var36;
8909     }
8910   }
8911
8912 }
8913
8914 #else
8915 static void
8916 _backup_cogorc_convert_UYVY_Y42B (OrcExecutor * ORC_RESTRICT ex)
8917 {
8918   int i;
8919   int j;
8920   int n = ex->n;
8921   int m = ex->params[ORC_VAR_A1];
8922   orc_union16 *ORC_RESTRICT ptr0;
8923   orc_int8 *ORC_RESTRICT ptr1;
8924   orc_int8 *ORC_RESTRICT ptr2;
8925   const orc_union32 *ORC_RESTRICT ptr4;
8926   orc_union32 var33;
8927   orc_union16 var34;
8928   orc_int8 var35;
8929   orc_int8 var36;
8930   orc_union16 var37;
8931
8932   for (j = 0; j < m; j++) {
8933     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
8934     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
8935     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
8936     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
8937
8938
8939     for (i = 0; i < n; i++) {
8940       /* 0: loadl */
8941       var33 = ptr4[i];
8942       /* 1: splitwb */
8943       {
8944         orc_union16 _src;
8945         _src.i = var33.x2[0];
8946         var34.x2[0] = _src.x2[1];
8947         var37.x2[0] = _src.x2[0];
8948       }
8949       {
8950         orc_union16 _src;
8951         _src.i = var33.x2[1];
8952         var34.x2[1] = _src.x2[1];
8953         var37.x2[1] = _src.x2[0];
8954       }
8955       /* 2: storew */
8956       ptr0[i] = var34;
8957       /* 3: splitwb */
8958       {
8959         orc_union16 _src;
8960         _src.i = var37.i;
8961         var35 = _src.x2[1];
8962         var36 = _src.x2[0];
8963       }
8964       /* 4: storeb */
8965       ptr2[i] = var35;
8966       /* 5: storeb */
8967       ptr1[i] = var36;
8968     }
8969   }
8970
8971 }
8972
8973 void
8974 cogorc_convert_UYVY_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
8975     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
8976     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
8977     int m)
8978 {
8979   OrcExecutor _ex, *ex = &_ex;
8980   static volatile int p_inited = 0;
8981   static OrcProgram *p = 0;
8982   void (*func) (OrcExecutor *);
8983
8984   if (!p_inited) {
8985     orc_once_mutex_lock ();
8986     if (!p_inited) {
8987
8988       p = orc_program_new ();
8989       orc_program_set_2d (p);
8990       orc_program_set_name (p, "cogorc_convert_UYVY_Y42B");
8991       orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y42B);
8992       orc_program_add_destination (p, 2, "d1");
8993       orc_program_add_destination (p, 1, "d2");
8994       orc_program_add_destination (p, 1, "d3");
8995       orc_program_add_source (p, 4, "s1");
8996       orc_program_add_temporary (p, 2, "t1");
8997
8998       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
8999           ORC_VAR_D1);
9000       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T1,
9001           ORC_VAR_D1);
9002
9003       orc_program_compile (p);
9004     }
9005     p_inited = TRUE;
9006     orc_once_mutex_unlock ();
9007   }
9008   ex->program = p;
9009
9010   ex->n = n;
9011   ORC_EXECUTOR_M (ex) = m;
9012   ex->arrays[ORC_VAR_D1] = d1;
9013   ex->params[ORC_VAR_D1] = d1_stride;
9014   ex->arrays[ORC_VAR_D2] = d2;
9015   ex->params[ORC_VAR_D2] = d2_stride;
9016   ex->arrays[ORC_VAR_D3] = d3;
9017   ex->params[ORC_VAR_D3] = d3_stride;
9018   ex->arrays[ORC_VAR_S1] = (void *) s1;
9019   ex->params[ORC_VAR_S1] = s1_stride;
9020
9021   func = p->code_exec;
9022   func (ex);
9023 }
9024 #endif
9025
9026
9027 /* cogorc_convert_YUY2_Y444 */
9028 #ifdef DISABLE_ORC
9029 void
9030 cogorc_convert_YUY2_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9031     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
9032     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
9033     int m)
9034 {
9035   int i;
9036   int j;
9037   orc_union16 *ORC_RESTRICT ptr0;
9038   orc_union16 *ORC_RESTRICT ptr1;
9039   orc_union16 *ORC_RESTRICT ptr2;
9040   const orc_union32 *ORC_RESTRICT ptr4;
9041   orc_union32 var35;
9042   orc_union16 var36;
9043   orc_union16 var37;
9044   orc_union16 var38;
9045   orc_union16 var39;
9046   orc_int8 var40;
9047   orc_int8 var41;
9048
9049   for (j = 0; j < m; j++) {
9050     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
9051     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
9052     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
9053     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
9054
9055
9056     for (i = 0; i < n; i++) {
9057       /* 0: loadl */
9058       var35 = ptr4[i];
9059       /* 1: splitwb */
9060       {
9061         orc_union16 _src;
9062         _src.i = var35.x2[0];
9063         var39.x2[0] = _src.x2[1];
9064         var36.x2[0] = _src.x2[0];
9065       }
9066       {
9067         orc_union16 _src;
9068         _src.i = var35.x2[1];
9069         var39.x2[1] = _src.x2[1];
9070         var36.x2[1] = _src.x2[0];
9071       }
9072       /* 2: storew */
9073       ptr0[i] = var36;
9074       /* 3: splitwb */
9075       {
9076         orc_union16 _src;
9077         _src.i = var39.i;
9078         var40 = _src.x2[1];
9079         var41 = _src.x2[0];
9080       }
9081       /* 4: splatbw */
9082       var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
9083       /* 5: storew */
9084       ptr1[i] = var37;
9085       /* 6: splatbw */
9086       var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
9087       /* 7: storew */
9088       ptr2[i] = var38;
9089     }
9090   }
9091
9092 }
9093
9094 #else
9095 static void
9096 _backup_cogorc_convert_YUY2_Y444 (OrcExecutor * ORC_RESTRICT ex)
9097 {
9098   int i;
9099   int j;
9100   int n = ex->n;
9101   int m = ex->params[ORC_VAR_A1];
9102   orc_union16 *ORC_RESTRICT ptr0;
9103   orc_union16 *ORC_RESTRICT ptr1;
9104   orc_union16 *ORC_RESTRICT ptr2;
9105   const orc_union32 *ORC_RESTRICT ptr4;
9106   orc_union32 var35;
9107   orc_union16 var36;
9108   orc_union16 var37;
9109   orc_union16 var38;
9110   orc_union16 var39;
9111   orc_int8 var40;
9112   orc_int8 var41;
9113
9114   for (j = 0; j < m; j++) {
9115     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
9116     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
9117     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
9118     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
9119
9120
9121     for (i = 0; i < n; i++) {
9122       /* 0: loadl */
9123       var35 = ptr4[i];
9124       /* 1: splitwb */
9125       {
9126         orc_union16 _src;
9127         _src.i = var35.x2[0];
9128         var39.x2[0] = _src.x2[1];
9129         var36.x2[0] = _src.x2[0];
9130       }
9131       {
9132         orc_union16 _src;
9133         _src.i = var35.x2[1];
9134         var39.x2[1] = _src.x2[1];
9135         var36.x2[1] = _src.x2[0];
9136       }
9137       /* 2: storew */
9138       ptr0[i] = var36;
9139       /* 3: splitwb */
9140       {
9141         orc_union16 _src;
9142         _src.i = var39.i;
9143         var40 = _src.x2[1];
9144         var41 = _src.x2[0];
9145       }
9146       /* 4: splatbw */
9147       var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
9148       /* 5: storew */
9149       ptr1[i] = var37;
9150       /* 6: splatbw */
9151       var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
9152       /* 7: storew */
9153       ptr2[i] = var38;
9154     }
9155   }
9156
9157 }
9158
9159 void
9160 cogorc_convert_YUY2_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9161     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
9162     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
9163     int m)
9164 {
9165   OrcExecutor _ex, *ex = &_ex;
9166   static volatile int p_inited = 0;
9167   static OrcProgram *p = 0;
9168   void (*func) (OrcExecutor *);
9169
9170   if (!p_inited) {
9171     orc_once_mutex_lock ();
9172     if (!p_inited) {
9173
9174       p = orc_program_new ();
9175       orc_program_set_2d (p);
9176       orc_program_set_name (p, "cogorc_convert_YUY2_Y444");
9177       orc_program_set_backup_function (p, _backup_cogorc_convert_YUY2_Y444);
9178       orc_program_add_destination (p, 2, "d1");
9179       orc_program_add_destination (p, 2, "d2");
9180       orc_program_add_destination (p, 2, "d3");
9181       orc_program_add_source (p, 4, "s1");
9182       orc_program_add_temporary (p, 2, "t1");
9183       orc_program_add_temporary (p, 1, "t2");
9184       orc_program_add_temporary (p, 1, "t3");
9185
9186       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_S1,
9187           ORC_VAR_D1);
9188       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
9189           ORC_VAR_D1);
9190       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
9191           ORC_VAR_D1);
9192       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
9193           ORC_VAR_D1);
9194
9195       orc_program_compile (p);
9196     }
9197     p_inited = TRUE;
9198     orc_once_mutex_unlock ();
9199   }
9200   ex->program = p;
9201
9202   ex->n = n;
9203   ORC_EXECUTOR_M (ex) = m;
9204   ex->arrays[ORC_VAR_D1] = d1;
9205   ex->params[ORC_VAR_D1] = d1_stride;
9206   ex->arrays[ORC_VAR_D2] = d2;
9207   ex->params[ORC_VAR_D2] = d2_stride;
9208   ex->arrays[ORC_VAR_D3] = d3;
9209   ex->params[ORC_VAR_D3] = d3_stride;
9210   ex->arrays[ORC_VAR_S1] = (void *) s1;
9211   ex->params[ORC_VAR_S1] = s1_stride;
9212
9213   func = p->code_exec;
9214   func (ex);
9215 }
9216 #endif
9217
9218
9219 /* cogorc_convert_UYVY_Y444 */
9220 #ifdef DISABLE_ORC
9221 void
9222 cogorc_convert_UYVY_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9223     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
9224     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
9225     int m)
9226 {
9227   int i;
9228   int j;
9229   orc_union16 *ORC_RESTRICT ptr0;
9230   orc_union16 *ORC_RESTRICT ptr1;
9231   orc_union16 *ORC_RESTRICT ptr2;
9232   const orc_union32 *ORC_RESTRICT ptr4;
9233   orc_union32 var35;
9234   orc_union16 var36;
9235   orc_union16 var37;
9236   orc_union16 var38;
9237   orc_union16 var39;
9238   orc_int8 var40;
9239   orc_int8 var41;
9240
9241   for (j = 0; j < m; j++) {
9242     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
9243     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
9244     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
9245     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
9246
9247
9248     for (i = 0; i < n; i++) {
9249       /* 0: loadl */
9250       var35 = ptr4[i];
9251       /* 1: splitwb */
9252       {
9253         orc_union16 _src;
9254         _src.i = var35.x2[0];
9255         var36.x2[0] = _src.x2[1];
9256         var39.x2[0] = _src.x2[0];
9257       }
9258       {
9259         orc_union16 _src;
9260         _src.i = var35.x2[1];
9261         var36.x2[1] = _src.x2[1];
9262         var39.x2[1] = _src.x2[0];
9263       }
9264       /* 2: storew */
9265       ptr0[i] = var36;
9266       /* 3: splitwb */
9267       {
9268         orc_union16 _src;
9269         _src.i = var39.i;
9270         var40 = _src.x2[1];
9271         var41 = _src.x2[0];
9272       }
9273       /* 4: splatbw */
9274       var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
9275       /* 5: storew */
9276       ptr1[i] = var37;
9277       /* 6: splatbw */
9278       var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
9279       /* 7: storew */
9280       ptr2[i] = var38;
9281     }
9282   }
9283
9284 }
9285
9286 #else
9287 static void
9288 _backup_cogorc_convert_UYVY_Y444 (OrcExecutor * ORC_RESTRICT ex)
9289 {
9290   int i;
9291   int j;
9292   int n = ex->n;
9293   int m = ex->params[ORC_VAR_A1];
9294   orc_union16 *ORC_RESTRICT ptr0;
9295   orc_union16 *ORC_RESTRICT ptr1;
9296   orc_union16 *ORC_RESTRICT ptr2;
9297   const orc_union32 *ORC_RESTRICT ptr4;
9298   orc_union32 var35;
9299   orc_union16 var36;
9300   orc_union16 var37;
9301   orc_union16 var38;
9302   orc_union16 var39;
9303   orc_int8 var40;
9304   orc_int8 var41;
9305
9306   for (j = 0; j < m; j++) {
9307     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
9308     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
9309     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
9310     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
9311
9312
9313     for (i = 0; i < n; i++) {
9314       /* 0: loadl */
9315       var35 = ptr4[i];
9316       /* 1: splitwb */
9317       {
9318         orc_union16 _src;
9319         _src.i = var35.x2[0];
9320         var36.x2[0] = _src.x2[1];
9321         var39.x2[0] = _src.x2[0];
9322       }
9323       {
9324         orc_union16 _src;
9325         _src.i = var35.x2[1];
9326         var36.x2[1] = _src.x2[1];
9327         var39.x2[1] = _src.x2[0];
9328       }
9329       /* 2: storew */
9330       ptr0[i] = var36;
9331       /* 3: splitwb */
9332       {
9333         orc_union16 _src;
9334         _src.i = var39.i;
9335         var40 = _src.x2[1];
9336         var41 = _src.x2[0];
9337       }
9338       /* 4: splatbw */
9339       var37.i = ((var41 & 0xff) << 8) | (var41 & 0xff);
9340       /* 5: storew */
9341       ptr1[i] = var37;
9342       /* 6: splatbw */
9343       var38.i = ((var40 & 0xff) << 8) | (var40 & 0xff);
9344       /* 7: storew */
9345       ptr2[i] = var38;
9346     }
9347   }
9348
9349 }
9350
9351 void
9352 cogorc_convert_UYVY_Y444 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9353     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint16 * ORC_RESTRICT d3,
9354     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
9355     int m)
9356 {
9357   OrcExecutor _ex, *ex = &_ex;
9358   static volatile int p_inited = 0;
9359   static OrcProgram *p = 0;
9360   void (*func) (OrcExecutor *);
9361
9362   if (!p_inited) {
9363     orc_once_mutex_lock ();
9364     if (!p_inited) {
9365
9366       p = orc_program_new ();
9367       orc_program_set_2d (p);
9368       orc_program_set_name (p, "cogorc_convert_UYVY_Y444");
9369       orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_Y444);
9370       orc_program_add_destination (p, 2, "d1");
9371       orc_program_add_destination (p, 2, "d2");
9372       orc_program_add_destination (p, 2, "d3");
9373       orc_program_add_source (p, 4, "s1");
9374       orc_program_add_temporary (p, 2, "t1");
9375       orc_program_add_temporary (p, 1, "t2");
9376       orc_program_add_temporary (p, 1, "t3");
9377
9378       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
9379           ORC_VAR_D1);
9380       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
9381           ORC_VAR_D1);
9382       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_D1,
9383           ORC_VAR_D1);
9384       orc_program_append_2 (p, "splatbw", 0, ORC_VAR_D3, ORC_VAR_T3, ORC_VAR_D1,
9385           ORC_VAR_D1);
9386
9387       orc_program_compile (p);
9388     }
9389     p_inited = TRUE;
9390     orc_once_mutex_unlock ();
9391   }
9392   ex->program = p;
9393
9394   ex->n = n;
9395   ORC_EXECUTOR_M (ex) = m;
9396   ex->arrays[ORC_VAR_D1] = d1;
9397   ex->params[ORC_VAR_D1] = d1_stride;
9398   ex->arrays[ORC_VAR_D2] = d2;
9399   ex->params[ORC_VAR_D2] = d2_stride;
9400   ex->arrays[ORC_VAR_D3] = d3;
9401   ex->params[ORC_VAR_D3] = d3_stride;
9402   ex->arrays[ORC_VAR_S1] = (void *) s1;
9403   ex->params[ORC_VAR_S1] = s1_stride;
9404
9405   func = p->code_exec;
9406   func (ex);
9407 }
9408 #endif
9409
9410
9411 /* cogorc_convert_UYVY_I420 */
9412 #ifdef DISABLE_ORC
9413 void
9414 cogorc_convert_UYVY_I420 (orc_uint16 * ORC_RESTRICT d1,
9415     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
9416     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
9417     const orc_uint32 * ORC_RESTRICT s2, int n)
9418 {
9419   int i;
9420   orc_union16 *ORC_RESTRICT ptr0;
9421   orc_union16 *ORC_RESTRICT ptr1;
9422   orc_int8 *ORC_RESTRICT ptr2;
9423   orc_int8 *ORC_RESTRICT ptr3;
9424   const orc_union32 *ORC_RESTRICT ptr4;
9425   const orc_union32 *ORC_RESTRICT ptr5;
9426   orc_union32 var35;
9427   orc_union32 var36;
9428   orc_int8 var37;
9429   orc_int8 var38;
9430   orc_union16 var39;
9431   orc_union16 var40;
9432   orc_union16 var41;
9433   orc_union16 var42;
9434   orc_union16 var43;
9435
9436   ptr0 = (orc_union16 *) d1;
9437   ptr1 = (orc_union16 *) d2;
9438   ptr2 = (orc_int8 *) d3;
9439   ptr3 = (orc_int8 *) d4;
9440   ptr4 = (orc_union32 *) s1;
9441   ptr5 = (orc_union32 *) s2;
9442
9443
9444   for (i = 0; i < n; i++) {
9445     /* 0: loadl */
9446     var35 = ptr4[i];
9447     /* 1: splitwb */
9448     {
9449       orc_union16 _src;
9450       _src.i = var35.x2[0];
9451       var39.x2[0] = _src.x2[1];
9452       var40.x2[0] = _src.x2[0];
9453     }
9454     {
9455       orc_union16 _src;
9456       _src.i = var35.x2[1];
9457       var39.x2[1] = _src.x2[1];
9458       var40.x2[1] = _src.x2[0];
9459     }
9460     /* 2: storew */
9461     ptr0[i] = var39;
9462     /* 3: loadl */
9463     var36 = ptr5[i];
9464     /* 4: splitwb */
9465     {
9466       orc_union16 _src;
9467       _src.i = var36.x2[0];
9468       var41.x2[0] = _src.x2[1];
9469       var42.x2[0] = _src.x2[0];
9470     }
9471     {
9472       orc_union16 _src;
9473       _src.i = var36.x2[1];
9474       var41.x2[1] = _src.x2[1];
9475       var42.x2[1] = _src.x2[0];
9476     }
9477     /* 5: storew */
9478     ptr1[i] = var41;
9479     /* 6: avgub */
9480     var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
9481     var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
9482     /* 7: splitwb */
9483     {
9484       orc_union16 _src;
9485       _src.i = var43.i;
9486       var37 = _src.x2[1];
9487       var38 = _src.x2[0];
9488     }
9489     /* 8: storeb */
9490     ptr3[i] = var37;
9491     /* 9: storeb */
9492     ptr2[i] = var38;
9493   }
9494
9495 }
9496
9497 #else
9498 static void
9499 _backup_cogorc_convert_UYVY_I420 (OrcExecutor * ORC_RESTRICT ex)
9500 {
9501   int i;
9502   int n = ex->n;
9503   orc_union16 *ORC_RESTRICT ptr0;
9504   orc_union16 *ORC_RESTRICT ptr1;
9505   orc_int8 *ORC_RESTRICT ptr2;
9506   orc_int8 *ORC_RESTRICT ptr3;
9507   const orc_union32 *ORC_RESTRICT ptr4;
9508   const orc_union32 *ORC_RESTRICT ptr5;
9509   orc_union32 var35;
9510   orc_union32 var36;
9511   orc_int8 var37;
9512   orc_int8 var38;
9513   orc_union16 var39;
9514   orc_union16 var40;
9515   orc_union16 var41;
9516   orc_union16 var42;
9517   orc_union16 var43;
9518
9519   ptr0 = (orc_union16 *) ex->arrays[0];
9520   ptr1 = (orc_union16 *) ex->arrays[1];
9521   ptr2 = (orc_int8 *) ex->arrays[2];
9522   ptr3 = (orc_int8 *) ex->arrays[3];
9523   ptr4 = (orc_union32 *) ex->arrays[4];
9524   ptr5 = (orc_union32 *) ex->arrays[5];
9525
9526
9527   for (i = 0; i < n; i++) {
9528     /* 0: loadl */
9529     var35 = ptr4[i];
9530     /* 1: splitwb */
9531     {
9532       orc_union16 _src;
9533       _src.i = var35.x2[0];
9534       var39.x2[0] = _src.x2[1];
9535       var40.x2[0] = _src.x2[0];
9536     }
9537     {
9538       orc_union16 _src;
9539       _src.i = var35.x2[1];
9540       var39.x2[1] = _src.x2[1];
9541       var40.x2[1] = _src.x2[0];
9542     }
9543     /* 2: storew */
9544     ptr0[i] = var39;
9545     /* 3: loadl */
9546     var36 = ptr5[i];
9547     /* 4: splitwb */
9548     {
9549       orc_union16 _src;
9550       _src.i = var36.x2[0];
9551       var41.x2[0] = _src.x2[1];
9552       var42.x2[0] = _src.x2[0];
9553     }
9554     {
9555       orc_union16 _src;
9556       _src.i = var36.x2[1];
9557       var41.x2[1] = _src.x2[1];
9558       var42.x2[1] = _src.x2[0];
9559     }
9560     /* 5: storew */
9561     ptr1[i] = var41;
9562     /* 6: avgub */
9563     var43.x2[0] = ((orc_uint8) var40.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
9564     var43.x2[1] = ((orc_uint8) var40.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
9565     /* 7: splitwb */
9566     {
9567       orc_union16 _src;
9568       _src.i = var43.i;
9569       var37 = _src.x2[1];
9570       var38 = _src.x2[0];
9571     }
9572     /* 8: storeb */
9573     ptr3[i] = var37;
9574     /* 9: storeb */
9575     ptr2[i] = var38;
9576   }
9577
9578 }
9579
9580 void
9581 cogorc_convert_UYVY_I420 (orc_uint16 * ORC_RESTRICT d1,
9582     orc_uint16 * ORC_RESTRICT d2, orc_uint8 * ORC_RESTRICT d3,
9583     orc_uint8 * ORC_RESTRICT d4, const orc_uint32 * ORC_RESTRICT s1,
9584     const orc_uint32 * ORC_RESTRICT s2, int n)
9585 {
9586   OrcExecutor _ex, *ex = &_ex;
9587   static volatile int p_inited = 0;
9588   static OrcProgram *p = 0;
9589   void (*func) (OrcExecutor *);
9590
9591   if (!p_inited) {
9592     orc_once_mutex_lock ();
9593     if (!p_inited) {
9594
9595       p = orc_program_new ();
9596       orc_program_set_name (p, "cogorc_convert_UYVY_I420");
9597       orc_program_set_backup_function (p, _backup_cogorc_convert_UYVY_I420);
9598       orc_program_add_destination (p, 2, "d1");
9599       orc_program_add_destination (p, 2, "d2");
9600       orc_program_add_destination (p, 1, "d3");
9601       orc_program_add_destination (p, 1, "d4");
9602       orc_program_add_source (p, 4, "s1");
9603       orc_program_add_source (p, 4, "s2");
9604       orc_program_add_temporary (p, 2, "t1");
9605       orc_program_add_temporary (p, 2, "t2");
9606       orc_program_add_temporary (p, 2, "t3");
9607
9608       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S1,
9609           ORC_VAR_D1);
9610       orc_program_append_2 (p, "storew", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_D1,
9611           ORC_VAR_D1);
9612       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S2,
9613           ORC_VAR_D1);
9614       orc_program_append_2 (p, "storew", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_D1,
9615           ORC_VAR_D1);
9616       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_T2,
9617           ORC_VAR_D1);
9618       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D4, ORC_VAR_D3, ORC_VAR_T1,
9619           ORC_VAR_D1);
9620
9621       orc_program_compile (p);
9622     }
9623     p_inited = TRUE;
9624     orc_once_mutex_unlock ();
9625   }
9626   ex->program = p;
9627
9628   ex->n = n;
9629   ex->arrays[ORC_VAR_D1] = d1;
9630   ex->arrays[ORC_VAR_D2] = d2;
9631   ex->arrays[ORC_VAR_D3] = d3;
9632   ex->arrays[ORC_VAR_D4] = d4;
9633   ex->arrays[ORC_VAR_S1] = (void *) s1;
9634   ex->arrays[ORC_VAR_S2] = (void *) s2;
9635
9636   func = p->code_exec;
9637   func (ex);
9638 }
9639 #endif
9640
9641
9642 /* cogorc_convert_AYUV_I420 */
9643 #ifdef DISABLE_ORC
9644 void
9645 cogorc_convert_AYUV_I420 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9646     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
9647     int d3_stride, orc_uint8 * ORC_RESTRICT d4, int d4_stride,
9648     const orc_uint64 * ORC_RESTRICT s1, int s1_stride,
9649     const orc_uint64 * ORC_RESTRICT s2, int s2_stride, int n, int m)
9650 {
9651   int i;
9652   int j;
9653   orc_union16 *ORC_RESTRICT ptr0;
9654   orc_union16 *ORC_RESTRICT ptr1;
9655   orc_int8 *ORC_RESTRICT ptr2;
9656   orc_int8 *ORC_RESTRICT ptr3;
9657   const orc_union64 *ORC_RESTRICT ptr4;
9658   const orc_union64 *ORC_RESTRICT ptr5;
9659   orc_union64 var40;
9660   orc_union16 var41;
9661   orc_union64 var42;
9662   orc_union16 var43;
9663   orc_int8 var44;
9664   orc_int8 var45;
9665   orc_union32 var46;
9666   orc_union32 var47;
9667   orc_union32 var48;
9668   orc_union32 var49;
9669   orc_union32 var50;
9670   orc_union16 var51;
9671   orc_union16 var52;
9672   orc_int8 var53;
9673   orc_int8 var54;
9674   orc_int8 var55;
9675   orc_int8 var56;
9676
9677   for (j = 0; j < m; j++) {
9678     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
9679     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
9680     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
9681     ptr3 = ORC_PTR_OFFSET (d4, d4_stride * j);
9682     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
9683     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
9684
9685
9686     for (i = 0; i < n; i++) {
9687       /* 0: loadq */
9688       var40 = ptr4[i];
9689       /* 1: splitlw */
9690       {
9691         orc_union32 _src;
9692         _src.i = var40.x2[0];
9693         var46.x2[0] = _src.x2[1];
9694         var47.x2[0] = _src.x2[0];
9695       }
9696       {
9697         orc_union32 _src;
9698         _src.i = var40.x2[1];
9699         var46.x2[1] = _src.x2[1];
9700         var47.x2[1] = _src.x2[0];
9701       }
9702       /* 2: select1wb */
9703       {
9704         orc_union16 _src;
9705         _src.i = var47.x2[0];
9706         var41.x2[0] = _src.x2[1];
9707       }
9708       {
9709         orc_union16 _src;
9710         _src.i = var47.x2[1];
9711         var41.x2[1] = _src.x2[1];
9712       }
9713       /* 3: storew */
9714       ptr0[i] = var41;
9715       /* 4: loadq */
9716       var42 = ptr5[i];
9717       /* 5: splitlw */
9718       {
9719         orc_union32 _src;
9720         _src.i = var42.x2[0];
9721         var48.x2[0] = _src.x2[1];
9722         var49.x2[0] = _src.x2[0];
9723       }
9724       {
9725         orc_union32 _src;
9726         _src.i = var42.x2[1];
9727         var48.x2[1] = _src.x2[1];
9728         var49.x2[1] = _src.x2[0];
9729       }
9730       /* 6: select1wb */
9731       {
9732         orc_union16 _src;
9733         _src.i = var49.x2[0];
9734         var43.x2[0] = _src.x2[1];
9735       }
9736       {
9737         orc_union16 _src;
9738         _src.i = var49.x2[1];
9739         var43.x2[1] = _src.x2[1];
9740       }
9741       /* 7: storew */
9742       ptr1[i] = var43;
9743       /* 8: avgub */
9744       var50.x4[0] =
9745           ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
9746       var50.x4[1] =
9747           ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
9748       var50.x4[2] =
9749           ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
9750       var50.x4[3] =
9751           ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
9752       /* 9: splitwb */
9753       {
9754         orc_union16 _src;
9755         _src.i = var50.x2[0];
9756         var51.x2[0] = _src.x2[1];
9757         var52.x2[0] = _src.x2[0];
9758       }
9759       {
9760         orc_union16 _src;
9761         _src.i = var50.x2[1];
9762         var51.x2[1] = _src.x2[1];
9763         var52.x2[1] = _src.x2[0];
9764       }
9765       /* 10: splitwb */
9766       {
9767         orc_union16 _src;
9768         _src.i = var52.i;
9769         var53 = _src.x2[1];
9770         var54 = _src.x2[0];
9771       }
9772       /* 11: avgub */
9773       var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
9774       /* 12: storeb */
9775       ptr2[i] = var44;
9776       /* 13: splitwb */
9777       {
9778         orc_union16 _src;
9779         _src.i = var51.i;
9780         var55 = _src.x2[1];
9781         var56 = _src.x2[0];
9782       }
9783       /* 14: avgub */
9784       var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
9785       /* 15: storeb */
9786       ptr3[i] = var45;
9787     }
9788   }
9789
9790 }
9791
9792 #else
9793 static void
9794 _backup_cogorc_convert_AYUV_I420 (OrcExecutor * ORC_RESTRICT ex)
9795 {
9796   int i;
9797   int j;
9798   int n = ex->n;
9799   int m = ex->params[ORC_VAR_A1];
9800   orc_union16 *ORC_RESTRICT ptr0;
9801   orc_union16 *ORC_RESTRICT ptr1;
9802   orc_int8 *ORC_RESTRICT ptr2;
9803   orc_int8 *ORC_RESTRICT ptr3;
9804   const orc_union64 *ORC_RESTRICT ptr4;
9805   const orc_union64 *ORC_RESTRICT ptr5;
9806   orc_union64 var40;
9807   orc_union16 var41;
9808   orc_union64 var42;
9809   orc_union16 var43;
9810   orc_int8 var44;
9811   orc_int8 var45;
9812   orc_union32 var46;
9813   orc_union32 var47;
9814   orc_union32 var48;
9815   orc_union32 var49;
9816   orc_union32 var50;
9817   orc_union16 var51;
9818   orc_union16 var52;
9819   orc_int8 var53;
9820   orc_int8 var54;
9821   orc_int8 var55;
9822   orc_int8 var56;
9823
9824   for (j = 0; j < m; j++) {
9825     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
9826     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
9827     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
9828     ptr3 = ORC_PTR_OFFSET (ex->arrays[3], ex->params[3] * j);
9829     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
9830     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
9831
9832
9833     for (i = 0; i < n; i++) {
9834       /* 0: loadq */
9835       var40 = ptr4[i];
9836       /* 1: splitlw */
9837       {
9838         orc_union32 _src;
9839         _src.i = var40.x2[0];
9840         var46.x2[0] = _src.x2[1];
9841         var47.x2[0] = _src.x2[0];
9842       }
9843       {
9844         orc_union32 _src;
9845         _src.i = var40.x2[1];
9846         var46.x2[1] = _src.x2[1];
9847         var47.x2[1] = _src.x2[0];
9848       }
9849       /* 2: select1wb */
9850       {
9851         orc_union16 _src;
9852         _src.i = var47.x2[0];
9853         var41.x2[0] = _src.x2[1];
9854       }
9855       {
9856         orc_union16 _src;
9857         _src.i = var47.x2[1];
9858         var41.x2[1] = _src.x2[1];
9859       }
9860       /* 3: storew */
9861       ptr0[i] = var41;
9862       /* 4: loadq */
9863       var42 = ptr5[i];
9864       /* 5: splitlw */
9865       {
9866         orc_union32 _src;
9867         _src.i = var42.x2[0];
9868         var48.x2[0] = _src.x2[1];
9869         var49.x2[0] = _src.x2[0];
9870       }
9871       {
9872         orc_union32 _src;
9873         _src.i = var42.x2[1];
9874         var48.x2[1] = _src.x2[1];
9875         var49.x2[1] = _src.x2[0];
9876       }
9877       /* 6: select1wb */
9878       {
9879         orc_union16 _src;
9880         _src.i = var49.x2[0];
9881         var43.x2[0] = _src.x2[1];
9882       }
9883       {
9884         orc_union16 _src;
9885         _src.i = var49.x2[1];
9886         var43.x2[1] = _src.x2[1];
9887       }
9888       /* 7: storew */
9889       ptr1[i] = var43;
9890       /* 8: avgub */
9891       var50.x4[0] =
9892           ((orc_uint8) var46.x4[0] + (orc_uint8) var48.x4[0] + 1) >> 1;
9893       var50.x4[1] =
9894           ((orc_uint8) var46.x4[1] + (orc_uint8) var48.x4[1] + 1) >> 1;
9895       var50.x4[2] =
9896           ((orc_uint8) var46.x4[2] + (orc_uint8) var48.x4[2] + 1) >> 1;
9897       var50.x4[3] =
9898           ((orc_uint8) var46.x4[3] + (orc_uint8) var48.x4[3] + 1) >> 1;
9899       /* 9: splitwb */
9900       {
9901         orc_union16 _src;
9902         _src.i = var50.x2[0];
9903         var51.x2[0] = _src.x2[1];
9904         var52.x2[0] = _src.x2[0];
9905       }
9906       {
9907         orc_union16 _src;
9908         _src.i = var50.x2[1];
9909         var51.x2[1] = _src.x2[1];
9910         var52.x2[1] = _src.x2[0];
9911       }
9912       /* 10: splitwb */
9913       {
9914         orc_union16 _src;
9915         _src.i = var52.i;
9916         var53 = _src.x2[1];
9917         var54 = _src.x2[0];
9918       }
9919       /* 11: avgub */
9920       var44 = ((orc_uint8) var53 + (orc_uint8) var54 + 1) >> 1;
9921       /* 12: storeb */
9922       ptr2[i] = var44;
9923       /* 13: splitwb */
9924       {
9925         orc_union16 _src;
9926         _src.i = var51.i;
9927         var55 = _src.x2[1];
9928         var56 = _src.x2[0];
9929       }
9930       /* 14: avgub */
9931       var45 = ((orc_uint8) var55 + (orc_uint8) var56 + 1) >> 1;
9932       /* 15: storeb */
9933       ptr3[i] = var45;
9934     }
9935   }
9936
9937 }
9938
9939 void
9940 cogorc_convert_AYUV_I420 (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
9941     orc_uint16 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
9942     int d3_stride, orc_uint8 * ORC_RESTRICT d4, int d4_stride,
9943     const orc_uint64 * ORC_RESTRICT s1, int s1_stride,
9944     const orc_uint64 * ORC_RESTRICT s2, int s2_stride, int n, int m)
9945 {
9946   OrcExecutor _ex, *ex = &_ex;
9947   static volatile int p_inited = 0;
9948   static OrcProgram *p = 0;
9949   void (*func) (OrcExecutor *);
9950
9951   if (!p_inited) {
9952     orc_once_mutex_lock ();
9953     if (!p_inited) {
9954
9955       p = orc_program_new ();
9956       orc_program_set_2d (p);
9957       orc_program_set_name (p, "cogorc_convert_AYUV_I420");
9958       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_I420);
9959       orc_program_add_destination (p, 2, "d1");
9960       orc_program_add_destination (p, 2, "d2");
9961       orc_program_add_destination (p, 1, "d3");
9962       orc_program_add_destination (p, 1, "d4");
9963       orc_program_add_source (p, 8, "s1");
9964       orc_program_add_source (p, 8, "s2");
9965       orc_program_add_temporary (p, 4, "t1");
9966       orc_program_add_temporary (p, 4, "t2");
9967       orc_program_add_temporary (p, 4, "t3");
9968       orc_program_add_temporary (p, 4, "t4");
9969       orc_program_add_temporary (p, 2, "t5");
9970       orc_program_add_temporary (p, 2, "t6");
9971       orc_program_add_temporary (p, 1, "t7");
9972       orc_program_add_temporary (p, 1, "t8");
9973
9974       orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
9975           ORC_VAR_D1);
9976       orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
9977           ORC_VAR_D1, ORC_VAR_D1);
9978       orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_S2,
9979           ORC_VAR_D1);
9980       orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D2, ORC_VAR_T1,
9981           ORC_VAR_D1, ORC_VAR_D1);
9982       orc_program_append_2 (p, "avgub", 2, ORC_VAR_T4, ORC_VAR_T2, ORC_VAR_T3,
9983           ORC_VAR_D1);
9984       orc_program_append_2 (p, "splitwb", 1, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T4,
9985           ORC_VAR_D1);
9986       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T5,
9987           ORC_VAR_D1);
9988       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D3, ORC_VAR_T7, ORC_VAR_T8,
9989           ORC_VAR_D1);
9990       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T8, ORC_VAR_T6,
9991           ORC_VAR_D1);
9992       orc_program_append_2 (p, "avgub", 0, ORC_VAR_D4, ORC_VAR_T7, ORC_VAR_T8,
9993           ORC_VAR_D1);
9994
9995       orc_program_compile (p);
9996     }
9997     p_inited = TRUE;
9998     orc_once_mutex_unlock ();
9999   }
10000   ex->program = p;
10001
10002   ex->n = n;
10003   ORC_EXECUTOR_M (ex) = m;
10004   ex->arrays[ORC_VAR_D1] = d1;
10005   ex->params[ORC_VAR_D1] = d1_stride;
10006   ex->arrays[ORC_VAR_D2] = d2;
10007   ex->params[ORC_VAR_D2] = d2_stride;
10008   ex->arrays[ORC_VAR_D3] = d3;
10009   ex->params[ORC_VAR_D3] = d3_stride;
10010   ex->arrays[ORC_VAR_D4] = d4;
10011   ex->params[ORC_VAR_D4] = d4_stride;
10012   ex->arrays[ORC_VAR_S1] = (void *) s1;
10013   ex->params[ORC_VAR_S1] = s1_stride;
10014   ex->arrays[ORC_VAR_S2] = (void *) s2;
10015   ex->params[ORC_VAR_S2] = s2_stride;
10016
10017   func = p->code_exec;
10018   func (ex);
10019 }
10020 #endif
10021
10022
10023 /* cogorc_convert_AYUV_YUY2 */
10024 #ifdef DISABLE_ORC
10025 void
10026 cogorc_convert_AYUV_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
10027     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m)
10028 {
10029   int i;
10030   int j;
10031   orc_union32 *ORC_RESTRICT ptr0;
10032   const orc_union64 *ORC_RESTRICT ptr4;
10033   orc_union64 var37;
10034   orc_union32 var38;
10035   orc_union32 var39;
10036   orc_union32 var40;
10037   orc_union16 var41;
10038   orc_union16 var42;
10039   orc_union16 var43;
10040   orc_union16 var44;
10041
10042   for (j = 0; j < m; j++) {
10043     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
10044     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
10045
10046
10047     for (i = 0; i < n; i++) {
10048       /* 0: loadq */
10049       var37 = ptr4[i];
10050       /* 1: splitlw */
10051       {
10052         orc_union32 _src;
10053         _src.i = var37.x2[0];
10054         var39.x2[0] = _src.x2[1];
10055         var40.x2[0] = _src.x2[0];
10056       }
10057       {
10058         orc_union32 _src;
10059         _src.i = var37.x2[1];
10060         var39.x2[1] = _src.x2[1];
10061         var40.x2[1] = _src.x2[0];
10062       }
10063       /* 2: splitlw */
10064       {
10065         orc_union32 _src;
10066         _src.i = var39.i;
10067         var41.i = _src.x2[1];
10068         var42.i = _src.x2[0];
10069       }
10070       /* 3: avgub */
10071       var43.x2[0] =
10072           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
10073       var43.x2[1] =
10074           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
10075       /* 4: select1wb */
10076       {
10077         orc_union16 _src;
10078         _src.i = var40.x2[0];
10079         var44.x2[0] = _src.x2[1];
10080       }
10081       {
10082         orc_union16 _src;
10083         _src.i = var40.x2[1];
10084         var44.x2[1] = _src.x2[1];
10085       }
10086       /* 5: mergebw */
10087       {
10088         orc_union16 _dest;
10089         _dest.x2[0] = var44.x2[0];
10090         _dest.x2[1] = var43.x2[0];
10091         var38.x2[0] = _dest.i;
10092       }
10093       {
10094         orc_union16 _dest;
10095         _dest.x2[0] = var44.x2[1];
10096         _dest.x2[1] = var43.x2[1];
10097         var38.x2[1] = _dest.i;
10098       }
10099       /* 6: storel */
10100       ptr0[i] = var38;
10101     }
10102   }
10103
10104 }
10105
10106 #else
10107 static void
10108 _backup_cogorc_convert_AYUV_YUY2 (OrcExecutor * ORC_RESTRICT ex)
10109 {
10110   int i;
10111   int j;
10112   int n = ex->n;
10113   int m = ex->params[ORC_VAR_A1];
10114   orc_union32 *ORC_RESTRICT ptr0;
10115   const orc_union64 *ORC_RESTRICT ptr4;
10116   orc_union64 var37;
10117   orc_union32 var38;
10118   orc_union32 var39;
10119   orc_union32 var40;
10120   orc_union16 var41;
10121   orc_union16 var42;
10122   orc_union16 var43;
10123   orc_union16 var44;
10124
10125   for (j = 0; j < m; j++) {
10126     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
10127     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
10128
10129
10130     for (i = 0; i < n; i++) {
10131       /* 0: loadq */
10132       var37 = ptr4[i];
10133       /* 1: splitlw */
10134       {
10135         orc_union32 _src;
10136         _src.i = var37.x2[0];
10137         var39.x2[0] = _src.x2[1];
10138         var40.x2[0] = _src.x2[0];
10139       }
10140       {
10141         orc_union32 _src;
10142         _src.i = var37.x2[1];
10143         var39.x2[1] = _src.x2[1];
10144         var40.x2[1] = _src.x2[0];
10145       }
10146       /* 2: splitlw */
10147       {
10148         orc_union32 _src;
10149         _src.i = var39.i;
10150         var41.i = _src.x2[1];
10151         var42.i = _src.x2[0];
10152       }
10153       /* 3: avgub */
10154       var43.x2[0] =
10155           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
10156       var43.x2[1] =
10157           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
10158       /* 4: select1wb */
10159       {
10160         orc_union16 _src;
10161         _src.i = var40.x2[0];
10162         var44.x2[0] = _src.x2[1];
10163       }
10164       {
10165         orc_union16 _src;
10166         _src.i = var40.x2[1];
10167         var44.x2[1] = _src.x2[1];
10168       }
10169       /* 5: mergebw */
10170       {
10171         orc_union16 _dest;
10172         _dest.x2[0] = var44.x2[0];
10173         _dest.x2[1] = var43.x2[0];
10174         var38.x2[0] = _dest.i;
10175       }
10176       {
10177         orc_union16 _dest;
10178         _dest.x2[0] = var44.x2[1];
10179         _dest.x2[1] = var43.x2[1];
10180         var38.x2[1] = _dest.i;
10181       }
10182       /* 6: storel */
10183       ptr0[i] = var38;
10184     }
10185   }
10186
10187 }
10188
10189 void
10190 cogorc_convert_AYUV_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
10191     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m)
10192 {
10193   OrcExecutor _ex, *ex = &_ex;
10194   static volatile int p_inited = 0;
10195   static OrcProgram *p = 0;
10196   void (*func) (OrcExecutor *);
10197
10198   if (!p_inited) {
10199     orc_once_mutex_lock ();
10200     if (!p_inited) {
10201
10202       p = orc_program_new ();
10203       orc_program_set_2d (p);
10204       orc_program_set_name (p, "cogorc_convert_AYUV_YUY2");
10205       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_YUY2);
10206       orc_program_add_destination (p, 4, "d1");
10207       orc_program_add_source (p, 8, "s1");
10208       orc_program_add_temporary (p, 2, "t1");
10209       orc_program_add_temporary (p, 2, "t2");
10210       orc_program_add_temporary (p, 2, "t3");
10211       orc_program_add_temporary (p, 4, "t4");
10212       orc_program_add_temporary (p, 4, "t5");
10213
10214       orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
10215           ORC_VAR_D1);
10216       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
10217           ORC_VAR_D1);
10218       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
10219           ORC_VAR_D1);
10220       orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
10221           ORC_VAR_D1, ORC_VAR_D1);
10222       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2,
10223           ORC_VAR_D1);
10224
10225       orc_program_compile (p);
10226     }
10227     p_inited = TRUE;
10228     orc_once_mutex_unlock ();
10229   }
10230   ex->program = p;
10231
10232   ex->n = n;
10233   ORC_EXECUTOR_M (ex) = m;
10234   ex->arrays[ORC_VAR_D1] = d1;
10235   ex->params[ORC_VAR_D1] = d1_stride;
10236   ex->arrays[ORC_VAR_S1] = (void *) s1;
10237   ex->params[ORC_VAR_S1] = s1_stride;
10238
10239   func = p->code_exec;
10240   func (ex);
10241 }
10242 #endif
10243
10244
10245 /* cogorc_convert_AYUV_UYVY */
10246 #ifdef DISABLE_ORC
10247 void
10248 cogorc_convert_AYUV_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
10249     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m)
10250 {
10251   int i;
10252   int j;
10253   orc_union32 *ORC_RESTRICT ptr0;
10254   const orc_union64 *ORC_RESTRICT ptr4;
10255   orc_union64 var37;
10256   orc_union32 var38;
10257   orc_union32 var39;
10258   orc_union32 var40;
10259   orc_union16 var41;
10260   orc_union16 var42;
10261   orc_union16 var43;
10262   orc_union16 var44;
10263
10264   for (j = 0; j < m; j++) {
10265     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
10266     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
10267
10268
10269     for (i = 0; i < n; i++) {
10270       /* 0: loadq */
10271       var37 = ptr4[i];
10272       /* 1: splitlw */
10273       {
10274         orc_union32 _src;
10275         _src.i = var37.x2[0];
10276         var39.x2[0] = _src.x2[1];
10277         var40.x2[0] = _src.x2[0];
10278       }
10279       {
10280         orc_union32 _src;
10281         _src.i = var37.x2[1];
10282         var39.x2[1] = _src.x2[1];
10283         var40.x2[1] = _src.x2[0];
10284       }
10285       /* 2: splitlw */
10286       {
10287         orc_union32 _src;
10288         _src.i = var39.i;
10289         var41.i = _src.x2[1];
10290         var42.i = _src.x2[0];
10291       }
10292       /* 3: avgub */
10293       var43.x2[0] =
10294           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
10295       var43.x2[1] =
10296           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
10297       /* 4: select1wb */
10298       {
10299         orc_union16 _src;
10300         _src.i = var40.x2[0];
10301         var44.x2[0] = _src.x2[1];
10302       }
10303       {
10304         orc_union16 _src;
10305         _src.i = var40.x2[1];
10306         var44.x2[1] = _src.x2[1];
10307       }
10308       /* 5: mergebw */
10309       {
10310         orc_union16 _dest;
10311         _dest.x2[0] = var43.x2[0];
10312         _dest.x2[1] = var44.x2[0];
10313         var38.x2[0] = _dest.i;
10314       }
10315       {
10316         orc_union16 _dest;
10317         _dest.x2[0] = var43.x2[1];
10318         _dest.x2[1] = var44.x2[1];
10319         var38.x2[1] = _dest.i;
10320       }
10321       /* 6: storel */
10322       ptr0[i] = var38;
10323     }
10324   }
10325
10326 }
10327
10328 #else
10329 static void
10330 _backup_cogorc_convert_AYUV_UYVY (OrcExecutor * ORC_RESTRICT ex)
10331 {
10332   int i;
10333   int j;
10334   int n = ex->n;
10335   int m = ex->params[ORC_VAR_A1];
10336   orc_union32 *ORC_RESTRICT ptr0;
10337   const orc_union64 *ORC_RESTRICT ptr4;
10338   orc_union64 var37;
10339   orc_union32 var38;
10340   orc_union32 var39;
10341   orc_union32 var40;
10342   orc_union16 var41;
10343   orc_union16 var42;
10344   orc_union16 var43;
10345   orc_union16 var44;
10346
10347   for (j = 0; j < m; j++) {
10348     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
10349     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
10350
10351
10352     for (i = 0; i < n; i++) {
10353       /* 0: loadq */
10354       var37 = ptr4[i];
10355       /* 1: splitlw */
10356       {
10357         orc_union32 _src;
10358         _src.i = var37.x2[0];
10359         var39.x2[0] = _src.x2[1];
10360         var40.x2[0] = _src.x2[0];
10361       }
10362       {
10363         orc_union32 _src;
10364         _src.i = var37.x2[1];
10365         var39.x2[1] = _src.x2[1];
10366         var40.x2[1] = _src.x2[0];
10367       }
10368       /* 2: splitlw */
10369       {
10370         orc_union32 _src;
10371         _src.i = var39.i;
10372         var41.i = _src.x2[1];
10373         var42.i = _src.x2[0];
10374       }
10375       /* 3: avgub */
10376       var43.x2[0] =
10377           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
10378       var43.x2[1] =
10379           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
10380       /* 4: select1wb */
10381       {
10382         orc_union16 _src;
10383         _src.i = var40.x2[0];
10384         var44.x2[0] = _src.x2[1];
10385       }
10386       {
10387         orc_union16 _src;
10388         _src.i = var40.x2[1];
10389         var44.x2[1] = _src.x2[1];
10390       }
10391       /* 5: mergebw */
10392       {
10393         orc_union16 _dest;
10394         _dest.x2[0] = var43.x2[0];
10395         _dest.x2[1] = var44.x2[0];
10396         var38.x2[0] = _dest.i;
10397       }
10398       {
10399         orc_union16 _dest;
10400         _dest.x2[0] = var43.x2[1];
10401         _dest.x2[1] = var44.x2[1];
10402         var38.x2[1] = _dest.i;
10403       }
10404       /* 6: storel */
10405       ptr0[i] = var38;
10406     }
10407   }
10408
10409 }
10410
10411 void
10412 cogorc_convert_AYUV_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
10413     const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n, int m)
10414 {
10415   OrcExecutor _ex, *ex = &_ex;
10416   static volatile int p_inited = 0;
10417   static OrcProgram *p = 0;
10418   void (*func) (OrcExecutor *);
10419
10420   if (!p_inited) {
10421     orc_once_mutex_lock ();
10422     if (!p_inited) {
10423
10424       p = orc_program_new ();
10425       orc_program_set_2d (p);
10426       orc_program_set_name (p, "cogorc_convert_AYUV_UYVY");
10427       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_UYVY);
10428       orc_program_add_destination (p, 4, "d1");
10429       orc_program_add_source (p, 8, "s1");
10430       orc_program_add_temporary (p, 2, "t1");
10431       orc_program_add_temporary (p, 2, "t2");
10432       orc_program_add_temporary (p, 2, "t3");
10433       orc_program_add_temporary (p, 4, "t4");
10434       orc_program_add_temporary (p, 4, "t5");
10435
10436       orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
10437           ORC_VAR_D1);
10438       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T5,
10439           ORC_VAR_D1);
10440       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3,
10441           ORC_VAR_D1);
10442       orc_program_append_2 (p, "select1wb", 1, ORC_VAR_T1, ORC_VAR_T4,
10443           ORC_VAR_D1, ORC_VAR_D1);
10444       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
10445           ORC_VAR_D1);
10446
10447       orc_program_compile (p);
10448     }
10449     p_inited = TRUE;
10450     orc_once_mutex_unlock ();
10451   }
10452   ex->program = p;
10453
10454   ex->n = n;
10455   ORC_EXECUTOR_M (ex) = m;
10456   ex->arrays[ORC_VAR_D1] = d1;
10457   ex->params[ORC_VAR_D1] = d1_stride;
10458   ex->arrays[ORC_VAR_S1] = (void *) s1;
10459   ex->params[ORC_VAR_S1] = s1_stride;
10460
10461   func = p->code_exec;
10462   func (ex);
10463 }
10464 #endif
10465
10466
10467 /* cogorc_convert_AYUV_Y42B */
10468 #ifdef DISABLE_ORC
10469 void
10470 cogorc_convert_AYUV_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
10471     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
10472     int d3_stride, const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n,
10473     int m)
10474 {
10475   int i;
10476   int j;
10477   orc_union16 *ORC_RESTRICT ptr0;
10478   orc_int8 *ORC_RESTRICT ptr1;
10479   orc_int8 *ORC_RESTRICT ptr2;
10480   const orc_union64 *ORC_RESTRICT ptr4;
10481   orc_union64 var36;
10482   orc_int8 var37;
10483   orc_int8 var38;
10484   orc_union16 var39;
10485   orc_union32 var40;
10486   orc_union32 var41;
10487   orc_union16 var42;
10488   orc_union16 var43;
10489   orc_union16 var44;
10490
10491   for (j = 0; j < m; j++) {
10492     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
10493     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
10494     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
10495     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
10496
10497
10498     for (i = 0; i < n; i++) {
10499       /* 0: loadq */
10500       var36 = ptr4[i];
10501       /* 1: splitlw */
10502       {
10503         orc_union32 _src;
10504         _src.i = var36.x2[0];
10505         var40.x2[0] = _src.x2[1];
10506         var41.x2[0] = _src.x2[0];
10507       }
10508       {
10509         orc_union32 _src;
10510         _src.i = var36.x2[1];
10511         var40.x2[1] = _src.x2[1];
10512         var41.x2[1] = _src.x2[0];
10513       }
10514       /* 2: splitlw */
10515       {
10516         orc_union32 _src;
10517         _src.i = var40.i;
10518         var42.i = _src.x2[1];
10519         var43.i = _src.x2[0];
10520       }
10521       /* 3: avgub */
10522       var44.x2[0] =
10523           ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
10524       var44.x2[1] =
10525           ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
10526       /* 4: splitwb */
10527       {
10528         orc_union16 _src;
10529         _src.i = var44.i;
10530         var37 = _src.x2[1];
10531         var38 = _src.x2[0];
10532       }
10533       /* 5: storeb */
10534       ptr2[i] = var37;
10535       /* 6: storeb */
10536       ptr1[i] = var38;
10537       /* 7: select1wb */
10538       {
10539         orc_union16 _src;
10540         _src.i = var41.x2[0];
10541         var39.x2[0] = _src.x2[1];
10542       }
10543       {
10544         orc_union16 _src;
10545         _src.i = var41.x2[1];
10546         var39.x2[1] = _src.x2[1];
10547       }
10548       /* 8: storew */
10549       ptr0[i] = var39;
10550     }
10551   }
10552
10553 }
10554
10555 #else
10556 static void
10557 _backup_cogorc_convert_AYUV_Y42B (OrcExecutor * ORC_RESTRICT ex)
10558 {
10559   int i;
10560   int j;
10561   int n = ex->n;
10562   int m = ex->params[ORC_VAR_A1];
10563   orc_union16 *ORC_RESTRICT ptr0;
10564   orc_int8 *ORC_RESTRICT ptr1;
10565   orc_int8 *ORC_RESTRICT ptr2;
10566   const orc_union64 *ORC_RESTRICT ptr4;
10567   orc_union64 var36;
10568   orc_int8 var37;
10569   orc_int8 var38;
10570   orc_union16 var39;
10571   orc_union32 var40;
10572   orc_union32 var41;
10573   orc_union16 var42;
10574   orc_union16 var43;
10575   orc_union16 var44;
10576
10577   for (j = 0; j < m; j++) {
10578     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
10579     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
10580     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
10581     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
10582
10583
10584     for (i = 0; i < n; i++) {
10585       /* 0: loadq */
10586       var36 = ptr4[i];
10587       /* 1: splitlw */
10588       {
10589         orc_union32 _src;
10590         _src.i = var36.x2[0];
10591         var40.x2[0] = _src.x2[1];
10592         var41.x2[0] = _src.x2[0];
10593       }
10594       {
10595         orc_union32 _src;
10596         _src.i = var36.x2[1];
10597         var40.x2[1] = _src.x2[1];
10598         var41.x2[1] = _src.x2[0];
10599       }
10600       /* 2: splitlw */
10601       {
10602         orc_union32 _src;
10603         _src.i = var40.i;
10604         var42.i = _src.x2[1];
10605         var43.i = _src.x2[0];
10606       }
10607       /* 3: avgub */
10608       var44.x2[0] =
10609           ((orc_uint8) var42.x2[0] + (orc_uint8) var43.x2[0] + 1) >> 1;
10610       var44.x2[1] =
10611           ((orc_uint8) var42.x2[1] + (orc_uint8) var43.x2[1] + 1) >> 1;
10612       /* 4: splitwb */
10613       {
10614         orc_union16 _src;
10615         _src.i = var44.i;
10616         var37 = _src.x2[1];
10617         var38 = _src.x2[0];
10618       }
10619       /* 5: storeb */
10620       ptr2[i] = var37;
10621       /* 6: storeb */
10622       ptr1[i] = var38;
10623       /* 7: select1wb */
10624       {
10625         orc_union16 _src;
10626         _src.i = var41.x2[0];
10627         var39.x2[0] = _src.x2[1];
10628       }
10629       {
10630         orc_union16 _src;
10631         _src.i = var41.x2[1];
10632         var39.x2[1] = _src.x2[1];
10633       }
10634       /* 8: storew */
10635       ptr0[i] = var39;
10636     }
10637   }
10638
10639 }
10640
10641 void
10642 cogorc_convert_AYUV_Y42B (orc_uint16 * ORC_RESTRICT d1, int d1_stride,
10643     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
10644     int d3_stride, const orc_uint64 * ORC_RESTRICT s1, int s1_stride, int n,
10645     int m)
10646 {
10647   OrcExecutor _ex, *ex = &_ex;
10648   static volatile int p_inited = 0;
10649   static OrcProgram *p = 0;
10650   void (*func) (OrcExecutor *);
10651
10652   if (!p_inited) {
10653     orc_once_mutex_lock ();
10654     if (!p_inited) {
10655
10656       p = orc_program_new ();
10657       orc_program_set_2d (p);
10658       orc_program_set_name (p, "cogorc_convert_AYUV_Y42B");
10659       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y42B);
10660       orc_program_add_destination (p, 2, "d1");
10661       orc_program_add_destination (p, 1, "d2");
10662       orc_program_add_destination (p, 1, "d3");
10663       orc_program_add_source (p, 8, "s1");
10664       orc_program_add_temporary (p, 4, "t1");
10665       orc_program_add_temporary (p, 4, "t2");
10666       orc_program_add_temporary (p, 2, "t3");
10667       orc_program_add_temporary (p, 2, "t4");
10668
10669       orc_program_append_2 (p, "splitlw", 1, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
10670           ORC_VAR_D1);
10671       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
10672           ORC_VAR_D1);
10673       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
10674           ORC_VAR_D1);
10675       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T3,
10676           ORC_VAR_D1);
10677       orc_program_append_2 (p, "select1wb", 1, ORC_VAR_D1, ORC_VAR_T1,
10678           ORC_VAR_D1, ORC_VAR_D1);
10679
10680       orc_program_compile (p);
10681     }
10682     p_inited = TRUE;
10683     orc_once_mutex_unlock ();
10684   }
10685   ex->program = p;
10686
10687   ex->n = n;
10688   ORC_EXECUTOR_M (ex) = m;
10689   ex->arrays[ORC_VAR_D1] = d1;
10690   ex->params[ORC_VAR_D1] = d1_stride;
10691   ex->arrays[ORC_VAR_D2] = d2;
10692   ex->params[ORC_VAR_D2] = d2_stride;
10693   ex->arrays[ORC_VAR_D3] = d3;
10694   ex->params[ORC_VAR_D3] = d3_stride;
10695   ex->arrays[ORC_VAR_S1] = (void *) s1;
10696   ex->params[ORC_VAR_S1] = s1_stride;
10697
10698   func = p->code_exec;
10699   func (ex);
10700 }
10701 #endif
10702
10703
10704 /* cogorc_convert_AYUV_Y444 */
10705 #ifdef DISABLE_ORC
10706 void
10707 cogorc_convert_AYUV_Y444 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
10708     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
10709     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
10710     int m)
10711 {
10712   int i;
10713   int j;
10714   orc_int8 *ORC_RESTRICT ptr0;
10715   orc_int8 *ORC_RESTRICT ptr1;
10716   orc_int8 *ORC_RESTRICT ptr2;
10717   const orc_union32 *ORC_RESTRICT ptr4;
10718   orc_union32 var34;
10719   orc_int8 var35;
10720   orc_int8 var36;
10721   orc_int8 var37;
10722   orc_union16 var38;
10723   orc_union16 var39;
10724
10725   for (j = 0; j < m; j++) {
10726     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
10727     ptr1 = ORC_PTR_OFFSET (d2, d2_stride * j);
10728     ptr2 = ORC_PTR_OFFSET (d3, d3_stride * j);
10729     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
10730
10731
10732     for (i = 0; i < n; i++) {
10733       /* 0: loadl */
10734       var34 = ptr4[i];
10735       /* 1: splitlw */
10736       {
10737         orc_union32 _src;
10738         _src.i = var34.i;
10739         var38.i = _src.x2[1];
10740         var39.i = _src.x2[0];
10741       }
10742       /* 2: splitwb */
10743       {
10744         orc_union16 _src;
10745         _src.i = var38.i;
10746         var35 = _src.x2[1];
10747         var36 = _src.x2[0];
10748       }
10749       /* 3: storeb */
10750       ptr2[i] = var35;
10751       /* 4: storeb */
10752       ptr1[i] = var36;
10753       /* 5: select1wb */
10754       {
10755         orc_union16 _src;
10756         _src.i = var39.i;
10757         var37 = _src.x2[1];
10758       }
10759       /* 6: storeb */
10760       ptr0[i] = var37;
10761     }
10762   }
10763
10764 }
10765
10766 #else
10767 static void
10768 _backup_cogorc_convert_AYUV_Y444 (OrcExecutor * ORC_RESTRICT ex)
10769 {
10770   int i;
10771   int j;
10772   int n = ex->n;
10773   int m = ex->params[ORC_VAR_A1];
10774   orc_int8 *ORC_RESTRICT ptr0;
10775   orc_int8 *ORC_RESTRICT ptr1;
10776   orc_int8 *ORC_RESTRICT ptr2;
10777   const orc_union32 *ORC_RESTRICT ptr4;
10778   orc_union32 var34;
10779   orc_int8 var35;
10780   orc_int8 var36;
10781   orc_int8 var37;
10782   orc_union16 var38;
10783   orc_union16 var39;
10784
10785   for (j = 0; j < m; j++) {
10786     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
10787     ptr1 = ORC_PTR_OFFSET (ex->arrays[1], ex->params[1] * j);
10788     ptr2 = ORC_PTR_OFFSET (ex->arrays[2], ex->params[2] * j);
10789     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
10790
10791
10792     for (i = 0; i < n; i++) {
10793       /* 0: loadl */
10794       var34 = ptr4[i];
10795       /* 1: splitlw */
10796       {
10797         orc_union32 _src;
10798         _src.i = var34.i;
10799         var38.i = _src.x2[1];
10800         var39.i = _src.x2[0];
10801       }
10802       /* 2: splitwb */
10803       {
10804         orc_union16 _src;
10805         _src.i = var38.i;
10806         var35 = _src.x2[1];
10807         var36 = _src.x2[0];
10808       }
10809       /* 3: storeb */
10810       ptr2[i] = var35;
10811       /* 4: storeb */
10812       ptr1[i] = var36;
10813       /* 5: select1wb */
10814       {
10815         orc_union16 _src;
10816         _src.i = var39.i;
10817         var37 = _src.x2[1];
10818       }
10819       /* 6: storeb */
10820       ptr0[i] = var37;
10821     }
10822   }
10823
10824 }
10825
10826 void
10827 cogorc_convert_AYUV_Y444 (orc_uint8 * ORC_RESTRICT d1, int d1_stride,
10828     orc_uint8 * ORC_RESTRICT d2, int d2_stride, orc_uint8 * ORC_RESTRICT d3,
10829     int d3_stride, const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n,
10830     int m)
10831 {
10832   OrcExecutor _ex, *ex = &_ex;
10833   static volatile int p_inited = 0;
10834   static OrcProgram *p = 0;
10835   void (*func) (OrcExecutor *);
10836
10837   if (!p_inited) {
10838     orc_once_mutex_lock ();
10839     if (!p_inited) {
10840
10841       p = orc_program_new ();
10842       orc_program_set_2d (p);
10843       orc_program_set_name (p, "cogorc_convert_AYUV_Y444");
10844       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_Y444);
10845       orc_program_add_destination (p, 1, "d1");
10846       orc_program_add_destination (p, 1, "d2");
10847       orc_program_add_destination (p, 1, "d3");
10848       orc_program_add_source (p, 4, "s1");
10849       orc_program_add_temporary (p, 2, "t1");
10850       orc_program_add_temporary (p, 2, "t2");
10851
10852       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_S1,
10853           ORC_VAR_D1);
10854       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_D3, ORC_VAR_D2, ORC_VAR_T2,
10855           ORC_VAR_D1);
10856       orc_program_append_2 (p, "select1wb", 0, ORC_VAR_D1, ORC_VAR_T1,
10857           ORC_VAR_D1, ORC_VAR_D1);
10858
10859       orc_program_compile (p);
10860     }
10861     p_inited = TRUE;
10862     orc_once_mutex_unlock ();
10863   }
10864   ex->program = p;
10865
10866   ex->n = n;
10867   ORC_EXECUTOR_M (ex) = m;
10868   ex->arrays[ORC_VAR_D1] = d1;
10869   ex->params[ORC_VAR_D1] = d1_stride;
10870   ex->arrays[ORC_VAR_D2] = d2;
10871   ex->params[ORC_VAR_D2] = d2_stride;
10872   ex->arrays[ORC_VAR_D3] = d3;
10873   ex->params[ORC_VAR_D3] = d3_stride;
10874   ex->arrays[ORC_VAR_S1] = (void *) s1;
10875   ex->params[ORC_VAR_S1] = s1_stride;
10876
10877   func = p->code_exec;
10878   func (ex);
10879 }
10880 #endif
10881
10882
10883 /* cogorc_convert_Y42B_YUY2 */
10884 #ifdef DISABLE_ORC
10885 void
10886 cogorc_convert_Y42B_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
10887     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
10888     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
10889     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
10890 {
10891   int i;
10892   int j;
10893   orc_union32 *ORC_RESTRICT ptr0;
10894   const orc_union16 *ORC_RESTRICT ptr4;
10895   const orc_int8 *ORC_RESTRICT ptr5;
10896   const orc_int8 *ORC_RESTRICT ptr6;
10897   orc_int8 var33;
10898   orc_int8 var34;
10899   orc_union16 var35;
10900   orc_union32 var36;
10901   orc_union16 var37;
10902
10903   for (j = 0; j < m; j++) {
10904     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
10905     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
10906     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
10907     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
10908
10909
10910     for (i = 0; i < n; i++) {
10911       /* 0: loadb */
10912       var33 = ptr5[i];
10913       /* 1: loadb */
10914       var34 = ptr6[i];
10915       /* 2: mergebw */
10916       {
10917         orc_union16 _dest;
10918         _dest.x2[0] = var33;
10919         _dest.x2[1] = var34;
10920         var37.i = _dest.i;
10921       }
10922       /* 3: loadw */
10923       var35 = ptr4[i];
10924       /* 4: mergebw */
10925       {
10926         orc_union16 _dest;
10927         _dest.x2[0] = var35.x2[0];
10928         _dest.x2[1] = var37.x2[0];
10929         var36.x2[0] = _dest.i;
10930       }
10931       {
10932         orc_union16 _dest;
10933         _dest.x2[0] = var35.x2[1];
10934         _dest.x2[1] = var37.x2[1];
10935         var36.x2[1] = _dest.i;
10936       }
10937       /* 5: storel */
10938       ptr0[i] = var36;
10939     }
10940   }
10941
10942 }
10943
10944 #else
10945 static void
10946 _backup_cogorc_convert_Y42B_YUY2 (OrcExecutor * ORC_RESTRICT ex)
10947 {
10948   int i;
10949   int j;
10950   int n = ex->n;
10951   int m = ex->params[ORC_VAR_A1];
10952   orc_union32 *ORC_RESTRICT ptr0;
10953   const orc_union16 *ORC_RESTRICT ptr4;
10954   const orc_int8 *ORC_RESTRICT ptr5;
10955   const orc_int8 *ORC_RESTRICT ptr6;
10956   orc_int8 var33;
10957   orc_int8 var34;
10958   orc_union16 var35;
10959   orc_union32 var36;
10960   orc_union16 var37;
10961
10962   for (j = 0; j < m; j++) {
10963     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
10964     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
10965     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
10966     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
10967
10968
10969     for (i = 0; i < n; i++) {
10970       /* 0: loadb */
10971       var33 = ptr5[i];
10972       /* 1: loadb */
10973       var34 = ptr6[i];
10974       /* 2: mergebw */
10975       {
10976         orc_union16 _dest;
10977         _dest.x2[0] = var33;
10978         _dest.x2[1] = var34;
10979         var37.i = _dest.i;
10980       }
10981       /* 3: loadw */
10982       var35 = ptr4[i];
10983       /* 4: mergebw */
10984       {
10985         orc_union16 _dest;
10986         _dest.x2[0] = var35.x2[0];
10987         _dest.x2[1] = var37.x2[0];
10988         var36.x2[0] = _dest.i;
10989       }
10990       {
10991         orc_union16 _dest;
10992         _dest.x2[0] = var35.x2[1];
10993         _dest.x2[1] = var37.x2[1];
10994         var36.x2[1] = _dest.i;
10995       }
10996       /* 5: storel */
10997       ptr0[i] = var36;
10998     }
10999   }
11000
11001 }
11002
11003 void
11004 cogorc_convert_Y42B_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11005     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11006     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11007     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11008 {
11009   OrcExecutor _ex, *ex = &_ex;
11010   static volatile int p_inited = 0;
11011   static OrcProgram *p = 0;
11012   void (*func) (OrcExecutor *);
11013
11014   if (!p_inited) {
11015     orc_once_mutex_lock ();
11016     if (!p_inited) {
11017
11018       p = orc_program_new ();
11019       orc_program_set_2d (p);
11020       orc_program_set_name (p, "cogorc_convert_Y42B_YUY2");
11021       orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_YUY2);
11022       orc_program_add_destination (p, 4, "d1");
11023       orc_program_add_source (p, 2, "s1");
11024       orc_program_add_source (p, 1, "s2");
11025       orc_program_add_source (p, 1, "s3");
11026       orc_program_add_temporary (p, 2, "t1");
11027
11028       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
11029           ORC_VAR_D1);
11030       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
11031           ORC_VAR_D1);
11032
11033       orc_program_compile (p);
11034     }
11035     p_inited = TRUE;
11036     orc_once_mutex_unlock ();
11037   }
11038   ex->program = p;
11039
11040   ex->n = n;
11041   ORC_EXECUTOR_M (ex) = m;
11042   ex->arrays[ORC_VAR_D1] = d1;
11043   ex->params[ORC_VAR_D1] = d1_stride;
11044   ex->arrays[ORC_VAR_S1] = (void *) s1;
11045   ex->params[ORC_VAR_S1] = s1_stride;
11046   ex->arrays[ORC_VAR_S2] = (void *) s2;
11047   ex->params[ORC_VAR_S2] = s2_stride;
11048   ex->arrays[ORC_VAR_S3] = (void *) s3;
11049   ex->params[ORC_VAR_S3] = s3_stride;
11050
11051   func = p->code_exec;
11052   func (ex);
11053 }
11054 #endif
11055
11056
11057 /* cogorc_convert_Y42B_UYVY */
11058 #ifdef DISABLE_ORC
11059 void
11060 cogorc_convert_Y42B_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11061     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11062     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11063     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11064 {
11065   int i;
11066   int j;
11067   orc_union32 *ORC_RESTRICT ptr0;
11068   const orc_union16 *ORC_RESTRICT ptr4;
11069   const orc_int8 *ORC_RESTRICT ptr5;
11070   const orc_int8 *ORC_RESTRICT ptr6;
11071   orc_int8 var33;
11072   orc_int8 var34;
11073   orc_union16 var35;
11074   orc_union32 var36;
11075   orc_union16 var37;
11076
11077   for (j = 0; j < m; j++) {
11078     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
11079     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
11080     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
11081     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
11082
11083
11084     for (i = 0; i < n; i++) {
11085       /* 0: loadb */
11086       var33 = ptr5[i];
11087       /* 1: loadb */
11088       var34 = ptr6[i];
11089       /* 2: mergebw */
11090       {
11091         orc_union16 _dest;
11092         _dest.x2[0] = var33;
11093         _dest.x2[1] = var34;
11094         var37.i = _dest.i;
11095       }
11096       /* 3: loadw */
11097       var35 = ptr4[i];
11098       /* 4: mergebw */
11099       {
11100         orc_union16 _dest;
11101         _dest.x2[0] = var37.x2[0];
11102         _dest.x2[1] = var35.x2[0];
11103         var36.x2[0] = _dest.i;
11104       }
11105       {
11106         orc_union16 _dest;
11107         _dest.x2[0] = var37.x2[1];
11108         _dest.x2[1] = var35.x2[1];
11109         var36.x2[1] = _dest.i;
11110       }
11111       /* 5: storel */
11112       ptr0[i] = var36;
11113     }
11114   }
11115
11116 }
11117
11118 #else
11119 static void
11120 _backup_cogorc_convert_Y42B_UYVY (OrcExecutor * ORC_RESTRICT ex)
11121 {
11122   int i;
11123   int j;
11124   int n = ex->n;
11125   int m = ex->params[ORC_VAR_A1];
11126   orc_union32 *ORC_RESTRICT ptr0;
11127   const orc_union16 *ORC_RESTRICT ptr4;
11128   const orc_int8 *ORC_RESTRICT ptr5;
11129   const orc_int8 *ORC_RESTRICT ptr6;
11130   orc_int8 var33;
11131   orc_int8 var34;
11132   orc_union16 var35;
11133   orc_union32 var36;
11134   orc_union16 var37;
11135
11136   for (j = 0; j < m; j++) {
11137     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
11138     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
11139     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
11140     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
11141
11142
11143     for (i = 0; i < n; i++) {
11144       /* 0: loadb */
11145       var33 = ptr5[i];
11146       /* 1: loadb */
11147       var34 = ptr6[i];
11148       /* 2: mergebw */
11149       {
11150         orc_union16 _dest;
11151         _dest.x2[0] = var33;
11152         _dest.x2[1] = var34;
11153         var37.i = _dest.i;
11154       }
11155       /* 3: loadw */
11156       var35 = ptr4[i];
11157       /* 4: mergebw */
11158       {
11159         orc_union16 _dest;
11160         _dest.x2[0] = var37.x2[0];
11161         _dest.x2[1] = var35.x2[0];
11162         var36.x2[0] = _dest.i;
11163       }
11164       {
11165         orc_union16 _dest;
11166         _dest.x2[0] = var37.x2[1];
11167         _dest.x2[1] = var35.x2[1];
11168         var36.x2[1] = _dest.i;
11169       }
11170       /* 5: storel */
11171       ptr0[i] = var36;
11172     }
11173   }
11174
11175 }
11176
11177 void
11178 cogorc_convert_Y42B_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11179     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11180     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11181     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11182 {
11183   OrcExecutor _ex, *ex = &_ex;
11184   static volatile int p_inited = 0;
11185   static OrcProgram *p = 0;
11186   void (*func) (OrcExecutor *);
11187
11188   if (!p_inited) {
11189     orc_once_mutex_lock ();
11190     if (!p_inited) {
11191
11192       p = orc_program_new ();
11193       orc_program_set_2d (p);
11194       orc_program_set_name (p, "cogorc_convert_Y42B_UYVY");
11195       orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_UYVY);
11196       orc_program_add_destination (p, 4, "d1");
11197       orc_program_add_source (p, 2, "s1");
11198       orc_program_add_source (p, 1, "s2");
11199       orc_program_add_source (p, 1, "s3");
11200       orc_program_add_temporary (p, 2, "t1");
11201
11202       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
11203           ORC_VAR_D1);
11204       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
11205           ORC_VAR_D1);
11206
11207       orc_program_compile (p);
11208     }
11209     p_inited = TRUE;
11210     orc_once_mutex_unlock ();
11211   }
11212   ex->program = p;
11213
11214   ex->n = n;
11215   ORC_EXECUTOR_M (ex) = m;
11216   ex->arrays[ORC_VAR_D1] = d1;
11217   ex->params[ORC_VAR_D1] = d1_stride;
11218   ex->arrays[ORC_VAR_S1] = (void *) s1;
11219   ex->params[ORC_VAR_S1] = s1_stride;
11220   ex->arrays[ORC_VAR_S2] = (void *) s2;
11221   ex->params[ORC_VAR_S2] = s2_stride;
11222   ex->arrays[ORC_VAR_S3] = (void *) s3;
11223   ex->params[ORC_VAR_S3] = s3_stride;
11224
11225   func = p->code_exec;
11226   func (ex);
11227 }
11228 #endif
11229
11230
11231 /* cogorc_convert_Y42B_AYUV */
11232 #ifdef DISABLE_ORC
11233 void
11234 cogorc_convert_Y42B_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
11235     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11236     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11237     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11238 {
11239   int i;
11240   int j;
11241   orc_union64 *ORC_RESTRICT ptr0;
11242   const orc_union16 *ORC_RESTRICT ptr4;
11243   const orc_int8 *ORC_RESTRICT ptr5;
11244   const orc_int8 *ORC_RESTRICT ptr6;
11245   orc_int8 var36;
11246   orc_int8 var37;
11247   orc_union16 var38;
11248   orc_union16 var39;
11249   orc_union64 var40;
11250   orc_union16 var41;
11251   orc_union32 var42;
11252   orc_union32 var43;
11253
11254   for (j = 0; j < m; j++) {
11255     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
11256     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
11257     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
11258     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
11259
11260     /* 3: loadpb */
11261     var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
11262     var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
11263
11264     for (i = 0; i < n; i++) {
11265       /* 0: loadb */
11266       var36 = ptr5[i];
11267       /* 1: loadb */
11268       var37 = ptr6[i];
11269       /* 2: mergebw */
11270       {
11271         orc_union16 _dest;
11272         _dest.x2[0] = var36;
11273         _dest.x2[1] = var37;
11274         var41.i = _dest.i;
11275       }
11276       /* 4: loadw */
11277       var39 = ptr4[i];
11278       /* 5: mergebw */
11279       {
11280         orc_union16 _dest;
11281         _dest.x2[0] = var38.x2[0];
11282         _dest.x2[1] = var39.x2[0];
11283         var42.x2[0] = _dest.i;
11284       }
11285       {
11286         orc_union16 _dest;
11287         _dest.x2[0] = var38.x2[1];
11288         _dest.x2[1] = var39.x2[1];
11289         var42.x2[1] = _dest.i;
11290       }
11291       /* 6: mergewl */
11292       {
11293         orc_union32 _dest;
11294         _dest.x2[0] = var41.i;
11295         _dest.x2[1] = var41.i;
11296         var43.i = _dest.i;
11297       }
11298       /* 7: mergewl */
11299       {
11300         orc_union32 _dest;
11301         _dest.x2[0] = var42.x2[0];
11302         _dest.x2[1] = var43.x2[0];
11303         var40.x2[0] = _dest.i;
11304       }
11305       {
11306         orc_union32 _dest;
11307         _dest.x2[0] = var42.x2[1];
11308         _dest.x2[1] = var43.x2[1];
11309         var40.x2[1] = _dest.i;
11310       }
11311       /* 8: storeq */
11312       ptr0[i] = var40;
11313     }
11314   }
11315
11316 }
11317
11318 #else
11319 static void
11320 _backup_cogorc_convert_Y42B_AYUV (OrcExecutor * ORC_RESTRICT ex)
11321 {
11322   int i;
11323   int j;
11324   int n = ex->n;
11325   int m = ex->params[ORC_VAR_A1];
11326   orc_union64 *ORC_RESTRICT ptr0;
11327   const orc_union16 *ORC_RESTRICT ptr4;
11328   const orc_int8 *ORC_RESTRICT ptr5;
11329   const orc_int8 *ORC_RESTRICT ptr6;
11330   orc_int8 var36;
11331   orc_int8 var37;
11332   orc_union16 var38;
11333   orc_union16 var39;
11334   orc_union64 var40;
11335   orc_union16 var41;
11336   orc_union32 var42;
11337   orc_union32 var43;
11338
11339   for (j = 0; j < m; j++) {
11340     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
11341     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
11342     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
11343     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
11344
11345     /* 3: loadpb */
11346     var38.x2[0] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
11347     var38.x2[1] = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
11348
11349     for (i = 0; i < n; i++) {
11350       /* 0: loadb */
11351       var36 = ptr5[i];
11352       /* 1: loadb */
11353       var37 = ptr6[i];
11354       /* 2: mergebw */
11355       {
11356         orc_union16 _dest;
11357         _dest.x2[0] = var36;
11358         _dest.x2[1] = var37;
11359         var41.i = _dest.i;
11360       }
11361       /* 4: loadw */
11362       var39 = ptr4[i];
11363       /* 5: mergebw */
11364       {
11365         orc_union16 _dest;
11366         _dest.x2[0] = var38.x2[0];
11367         _dest.x2[1] = var39.x2[0];
11368         var42.x2[0] = _dest.i;
11369       }
11370       {
11371         orc_union16 _dest;
11372         _dest.x2[0] = var38.x2[1];
11373         _dest.x2[1] = var39.x2[1];
11374         var42.x2[1] = _dest.i;
11375       }
11376       /* 6: mergewl */
11377       {
11378         orc_union32 _dest;
11379         _dest.x2[0] = var41.i;
11380         _dest.x2[1] = var41.i;
11381         var43.i = _dest.i;
11382       }
11383       /* 7: mergewl */
11384       {
11385         orc_union32 _dest;
11386         _dest.x2[0] = var42.x2[0];
11387         _dest.x2[1] = var43.x2[0];
11388         var40.x2[0] = _dest.i;
11389       }
11390       {
11391         orc_union32 _dest;
11392         _dest.x2[0] = var42.x2[1];
11393         _dest.x2[1] = var43.x2[1];
11394         var40.x2[1] = _dest.i;
11395       }
11396       /* 8: storeq */
11397       ptr0[i] = var40;
11398     }
11399   }
11400
11401 }
11402
11403 void
11404 cogorc_convert_Y42B_AYUV (orc_uint64 * ORC_RESTRICT d1, int d1_stride,
11405     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11406     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11407     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11408 {
11409   OrcExecutor _ex, *ex = &_ex;
11410   static volatile int p_inited = 0;
11411   static OrcProgram *p = 0;
11412   void (*func) (OrcExecutor *);
11413
11414   if (!p_inited) {
11415     orc_once_mutex_lock ();
11416     if (!p_inited) {
11417
11418       p = orc_program_new ();
11419       orc_program_set_2d (p);
11420       orc_program_set_name (p, "cogorc_convert_Y42B_AYUV");
11421       orc_program_set_backup_function (p, _backup_cogorc_convert_Y42B_AYUV);
11422       orc_program_add_destination (p, 8, "d1");
11423       orc_program_add_source (p, 2, "s1");
11424       orc_program_add_source (p, 1, "s2");
11425       orc_program_add_source (p, 1, "s3");
11426       orc_program_add_constant (p, 1, 0x000000ff, "c1");
11427       orc_program_add_temporary (p, 2, "t1");
11428       orc_program_add_temporary (p, 2, "t2");
11429       orc_program_add_temporary (p, 4, "t3");
11430       orc_program_add_temporary (p, 4, "t4");
11431
11432       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
11433           ORC_VAR_D1);
11434       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T4, ORC_VAR_C1, ORC_VAR_S1,
11435           ORC_VAR_D1);
11436       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_T1,
11437           ORC_VAR_D1);
11438       orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T3,
11439           ORC_VAR_D1);
11440
11441       orc_program_compile (p);
11442     }
11443     p_inited = TRUE;
11444     orc_once_mutex_unlock ();
11445   }
11446   ex->program = p;
11447
11448   ex->n = n;
11449   ORC_EXECUTOR_M (ex) = m;
11450   ex->arrays[ORC_VAR_D1] = d1;
11451   ex->params[ORC_VAR_D1] = d1_stride;
11452   ex->arrays[ORC_VAR_S1] = (void *) s1;
11453   ex->params[ORC_VAR_S1] = s1_stride;
11454   ex->arrays[ORC_VAR_S2] = (void *) s2;
11455   ex->params[ORC_VAR_S2] = s2_stride;
11456   ex->arrays[ORC_VAR_S3] = (void *) s3;
11457   ex->params[ORC_VAR_S3] = s3_stride;
11458
11459   func = p->code_exec;
11460   func (ex);
11461 }
11462 #endif
11463
11464
11465 /* cogorc_convert_Y444_YUY2 */
11466 #ifdef DISABLE_ORC
11467 void
11468 cogorc_convert_Y444_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11469     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11470     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
11471     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11472 {
11473   int i;
11474   int j;
11475   orc_union32 *ORC_RESTRICT ptr0;
11476   const orc_union16 *ORC_RESTRICT ptr4;
11477   const orc_union16 *ORC_RESTRICT ptr5;
11478   const orc_union16 *ORC_RESTRICT ptr6;
11479   orc_union16 var36;
11480   orc_union16 var37;
11481   orc_union16 var38;
11482   orc_union32 var39;
11483   orc_union32 var40;
11484   orc_union16 var41;
11485   orc_union16 var42;
11486   orc_union16 var43;
11487
11488   for (j = 0; j < m; j++) {
11489     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
11490     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
11491     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
11492     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
11493
11494
11495     for (i = 0; i < n; i++) {
11496       /* 0: loadw */
11497       var36 = ptr5[i];
11498       /* 1: loadw */
11499       var37 = ptr6[i];
11500       /* 2: mergebw */
11501       {
11502         orc_union16 _dest;
11503         _dest.x2[0] = var36.x2[0];
11504         _dest.x2[1] = var37.x2[0];
11505         var40.x2[0] = _dest.i;
11506       }
11507       {
11508         orc_union16 _dest;
11509         _dest.x2[0] = var36.x2[1];
11510         _dest.x2[1] = var37.x2[1];
11511         var40.x2[1] = _dest.i;
11512       }
11513       /* 3: splitlw */
11514       {
11515         orc_union32 _src;
11516         _src.i = var40.i;
11517         var41.i = _src.x2[1];
11518         var42.i = _src.x2[0];
11519       }
11520       /* 4: avgub */
11521       var43.x2[0] =
11522           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
11523       var43.x2[1] =
11524           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
11525       /* 5: loadw */
11526       var38 = ptr4[i];
11527       /* 6: mergebw */
11528       {
11529         orc_union16 _dest;
11530         _dest.x2[0] = var38.x2[0];
11531         _dest.x2[1] = var43.x2[0];
11532         var39.x2[0] = _dest.i;
11533       }
11534       {
11535         orc_union16 _dest;
11536         _dest.x2[0] = var38.x2[1];
11537         _dest.x2[1] = var43.x2[1];
11538         var39.x2[1] = _dest.i;
11539       }
11540       /* 7: storel */
11541       ptr0[i] = var39;
11542     }
11543   }
11544
11545 }
11546
11547 #else
11548 static void
11549 _backup_cogorc_convert_Y444_YUY2 (OrcExecutor * ORC_RESTRICT ex)
11550 {
11551   int i;
11552   int j;
11553   int n = ex->n;
11554   int m = ex->params[ORC_VAR_A1];
11555   orc_union32 *ORC_RESTRICT ptr0;
11556   const orc_union16 *ORC_RESTRICT ptr4;
11557   const orc_union16 *ORC_RESTRICT ptr5;
11558   const orc_union16 *ORC_RESTRICT ptr6;
11559   orc_union16 var36;
11560   orc_union16 var37;
11561   orc_union16 var38;
11562   orc_union32 var39;
11563   orc_union32 var40;
11564   orc_union16 var41;
11565   orc_union16 var42;
11566   orc_union16 var43;
11567
11568   for (j = 0; j < m; j++) {
11569     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
11570     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
11571     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
11572     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
11573
11574
11575     for (i = 0; i < n; i++) {
11576       /* 0: loadw */
11577       var36 = ptr5[i];
11578       /* 1: loadw */
11579       var37 = ptr6[i];
11580       /* 2: mergebw */
11581       {
11582         orc_union16 _dest;
11583         _dest.x2[0] = var36.x2[0];
11584         _dest.x2[1] = var37.x2[0];
11585         var40.x2[0] = _dest.i;
11586       }
11587       {
11588         orc_union16 _dest;
11589         _dest.x2[0] = var36.x2[1];
11590         _dest.x2[1] = var37.x2[1];
11591         var40.x2[1] = _dest.i;
11592       }
11593       /* 3: splitlw */
11594       {
11595         orc_union32 _src;
11596         _src.i = var40.i;
11597         var41.i = _src.x2[1];
11598         var42.i = _src.x2[0];
11599       }
11600       /* 4: avgub */
11601       var43.x2[0] =
11602           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
11603       var43.x2[1] =
11604           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
11605       /* 5: loadw */
11606       var38 = ptr4[i];
11607       /* 6: mergebw */
11608       {
11609         orc_union16 _dest;
11610         _dest.x2[0] = var38.x2[0];
11611         _dest.x2[1] = var43.x2[0];
11612         var39.x2[0] = _dest.i;
11613       }
11614       {
11615         orc_union16 _dest;
11616         _dest.x2[0] = var38.x2[1];
11617         _dest.x2[1] = var43.x2[1];
11618         var39.x2[1] = _dest.i;
11619       }
11620       /* 7: storel */
11621       ptr0[i] = var39;
11622     }
11623   }
11624
11625 }
11626
11627 void
11628 cogorc_convert_Y444_YUY2 (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11629     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11630     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
11631     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11632 {
11633   OrcExecutor _ex, *ex = &_ex;
11634   static volatile int p_inited = 0;
11635   static OrcProgram *p = 0;
11636   void (*func) (OrcExecutor *);
11637
11638   if (!p_inited) {
11639     orc_once_mutex_lock ();
11640     if (!p_inited) {
11641
11642       p = orc_program_new ();
11643       orc_program_set_2d (p);
11644       orc_program_set_name (p, "cogorc_convert_Y444_YUY2");
11645       orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_YUY2);
11646       orc_program_add_destination (p, 4, "d1");
11647       orc_program_add_source (p, 2, "s1");
11648       orc_program_add_source (p, 2, "s2");
11649       orc_program_add_source (p, 2, "s3");
11650       orc_program_add_temporary (p, 2, "t1");
11651       orc_program_add_temporary (p, 4, "t2");
11652       orc_program_add_temporary (p, 2, "t3");
11653       orc_program_add_temporary (p, 2, "t4");
11654
11655       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
11656           ORC_VAR_D1);
11657       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
11658           ORC_VAR_D1);
11659       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
11660           ORC_VAR_D1);
11661       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_T1,
11662           ORC_VAR_D1);
11663
11664       orc_program_compile (p);
11665     }
11666     p_inited = TRUE;
11667     orc_once_mutex_unlock ();
11668   }
11669   ex->program = p;
11670
11671   ex->n = n;
11672   ORC_EXECUTOR_M (ex) = m;
11673   ex->arrays[ORC_VAR_D1] = d1;
11674   ex->params[ORC_VAR_D1] = d1_stride;
11675   ex->arrays[ORC_VAR_S1] = (void *) s1;
11676   ex->params[ORC_VAR_S1] = s1_stride;
11677   ex->arrays[ORC_VAR_S2] = (void *) s2;
11678   ex->params[ORC_VAR_S2] = s2_stride;
11679   ex->arrays[ORC_VAR_S3] = (void *) s3;
11680   ex->params[ORC_VAR_S3] = s3_stride;
11681
11682   func = p->code_exec;
11683   func (ex);
11684 }
11685 #endif
11686
11687
11688 /* cogorc_convert_Y444_UYVY */
11689 #ifdef DISABLE_ORC
11690 void
11691 cogorc_convert_Y444_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11692     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11693     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
11694     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11695 {
11696   int i;
11697   int j;
11698   orc_union32 *ORC_RESTRICT ptr0;
11699   const orc_union16 *ORC_RESTRICT ptr4;
11700   const orc_union16 *ORC_RESTRICT ptr5;
11701   const orc_union16 *ORC_RESTRICT ptr6;
11702   orc_union16 var36;
11703   orc_union16 var37;
11704   orc_union16 var38;
11705   orc_union32 var39;
11706   orc_union32 var40;
11707   orc_union16 var41;
11708   orc_union16 var42;
11709   orc_union16 var43;
11710
11711   for (j = 0; j < m; j++) {
11712     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
11713     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
11714     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
11715     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
11716
11717
11718     for (i = 0; i < n; i++) {
11719       /* 0: loadw */
11720       var36 = ptr5[i];
11721       /* 1: loadw */
11722       var37 = ptr6[i];
11723       /* 2: mergebw */
11724       {
11725         orc_union16 _dest;
11726         _dest.x2[0] = var36.x2[0];
11727         _dest.x2[1] = var37.x2[0];
11728         var40.x2[0] = _dest.i;
11729       }
11730       {
11731         orc_union16 _dest;
11732         _dest.x2[0] = var36.x2[1];
11733         _dest.x2[1] = var37.x2[1];
11734         var40.x2[1] = _dest.i;
11735       }
11736       /* 3: splitlw */
11737       {
11738         orc_union32 _src;
11739         _src.i = var40.i;
11740         var41.i = _src.x2[1];
11741         var42.i = _src.x2[0];
11742       }
11743       /* 4: avgub */
11744       var43.x2[0] =
11745           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
11746       var43.x2[1] =
11747           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
11748       /* 5: loadw */
11749       var38 = ptr4[i];
11750       /* 6: mergebw */
11751       {
11752         orc_union16 _dest;
11753         _dest.x2[0] = var43.x2[0];
11754         _dest.x2[1] = var38.x2[0];
11755         var39.x2[0] = _dest.i;
11756       }
11757       {
11758         orc_union16 _dest;
11759         _dest.x2[0] = var43.x2[1];
11760         _dest.x2[1] = var38.x2[1];
11761         var39.x2[1] = _dest.i;
11762       }
11763       /* 7: storel */
11764       ptr0[i] = var39;
11765     }
11766   }
11767
11768 }
11769
11770 #else
11771 static void
11772 _backup_cogorc_convert_Y444_UYVY (OrcExecutor * ORC_RESTRICT ex)
11773 {
11774   int i;
11775   int j;
11776   int n = ex->n;
11777   int m = ex->params[ORC_VAR_A1];
11778   orc_union32 *ORC_RESTRICT ptr0;
11779   const orc_union16 *ORC_RESTRICT ptr4;
11780   const orc_union16 *ORC_RESTRICT ptr5;
11781   const orc_union16 *ORC_RESTRICT ptr6;
11782   orc_union16 var36;
11783   orc_union16 var37;
11784   orc_union16 var38;
11785   orc_union32 var39;
11786   orc_union32 var40;
11787   orc_union16 var41;
11788   orc_union16 var42;
11789   orc_union16 var43;
11790
11791   for (j = 0; j < m; j++) {
11792     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
11793     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
11794     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
11795     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
11796
11797
11798     for (i = 0; i < n; i++) {
11799       /* 0: loadw */
11800       var36 = ptr5[i];
11801       /* 1: loadw */
11802       var37 = ptr6[i];
11803       /* 2: mergebw */
11804       {
11805         orc_union16 _dest;
11806         _dest.x2[0] = var36.x2[0];
11807         _dest.x2[1] = var37.x2[0];
11808         var40.x2[0] = _dest.i;
11809       }
11810       {
11811         orc_union16 _dest;
11812         _dest.x2[0] = var36.x2[1];
11813         _dest.x2[1] = var37.x2[1];
11814         var40.x2[1] = _dest.i;
11815       }
11816       /* 3: splitlw */
11817       {
11818         orc_union32 _src;
11819         _src.i = var40.i;
11820         var41.i = _src.x2[1];
11821         var42.i = _src.x2[0];
11822       }
11823       /* 4: avgub */
11824       var43.x2[0] =
11825           ((orc_uint8) var41.x2[0] + (orc_uint8) var42.x2[0] + 1) >> 1;
11826       var43.x2[1] =
11827           ((orc_uint8) var41.x2[1] + (orc_uint8) var42.x2[1] + 1) >> 1;
11828       /* 5: loadw */
11829       var38 = ptr4[i];
11830       /* 6: mergebw */
11831       {
11832         orc_union16 _dest;
11833         _dest.x2[0] = var43.x2[0];
11834         _dest.x2[1] = var38.x2[0];
11835         var39.x2[0] = _dest.i;
11836       }
11837       {
11838         orc_union16 _dest;
11839         _dest.x2[0] = var43.x2[1];
11840         _dest.x2[1] = var38.x2[1];
11841         var39.x2[1] = _dest.i;
11842       }
11843       /* 7: storel */
11844       ptr0[i] = var39;
11845     }
11846   }
11847
11848 }
11849
11850 void
11851 cogorc_convert_Y444_UYVY (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11852     const orc_uint16 * ORC_RESTRICT s1, int s1_stride,
11853     const orc_uint16 * ORC_RESTRICT s2, int s2_stride,
11854     const orc_uint16 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11855 {
11856   OrcExecutor _ex, *ex = &_ex;
11857   static volatile int p_inited = 0;
11858   static OrcProgram *p = 0;
11859   void (*func) (OrcExecutor *);
11860
11861   if (!p_inited) {
11862     orc_once_mutex_lock ();
11863     if (!p_inited) {
11864
11865       p = orc_program_new ();
11866       orc_program_set_2d (p);
11867       orc_program_set_name (p, "cogorc_convert_Y444_UYVY");
11868       orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_UYVY);
11869       orc_program_add_destination (p, 4, "d1");
11870       orc_program_add_source (p, 2, "s1");
11871       orc_program_add_source (p, 2, "s2");
11872       orc_program_add_source (p, 2, "s3");
11873       orc_program_add_temporary (p, 2, "t1");
11874       orc_program_add_temporary (p, 4, "t2");
11875       orc_program_add_temporary (p, 2, "t3");
11876       orc_program_add_temporary (p, 2, "t4");
11877
11878       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S3,
11879           ORC_VAR_D1);
11880       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T2,
11881           ORC_VAR_D1);
11882       orc_program_append_2 (p, "avgub", 1, ORC_VAR_T1, ORC_VAR_T3, ORC_VAR_T4,
11883           ORC_VAR_D1);
11884       orc_program_append_2 (p, "mergebw", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_S1,
11885           ORC_VAR_D1);
11886
11887       orc_program_compile (p);
11888     }
11889     p_inited = TRUE;
11890     orc_once_mutex_unlock ();
11891   }
11892   ex->program = p;
11893
11894   ex->n = n;
11895   ORC_EXECUTOR_M (ex) = m;
11896   ex->arrays[ORC_VAR_D1] = d1;
11897   ex->params[ORC_VAR_D1] = d1_stride;
11898   ex->arrays[ORC_VAR_S1] = (void *) s1;
11899   ex->params[ORC_VAR_S1] = s1_stride;
11900   ex->arrays[ORC_VAR_S2] = (void *) s2;
11901   ex->params[ORC_VAR_S2] = s2_stride;
11902   ex->arrays[ORC_VAR_S3] = (void *) s3;
11903   ex->params[ORC_VAR_S3] = s3_stride;
11904
11905   func = p->code_exec;
11906   func (ex);
11907 }
11908 #endif
11909
11910
11911 /* cogorc_convert_Y444_AYUV */
11912 #ifdef DISABLE_ORC
11913 void
11914 cogorc_convert_Y444_AYUV (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
11915     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
11916     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
11917     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
11918 {
11919   int i;
11920   int j;
11921   orc_union32 *ORC_RESTRICT ptr0;
11922   const orc_int8 *ORC_RESTRICT ptr4;
11923   const orc_int8 *ORC_RESTRICT ptr5;
11924   const orc_int8 *ORC_RESTRICT ptr6;
11925   orc_int8 var34;
11926   orc_int8 var35;
11927   orc_int8 var36;
11928   orc_int8 var37;
11929   orc_union32 var38;
11930   orc_union16 var39;
11931   orc_union16 var40;
11932
11933   for (j = 0; j < m; j++) {
11934     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
11935     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
11936     ptr5 = ORC_PTR_OFFSET (s2, s2_stride * j);
11937     ptr6 = ORC_PTR_OFFSET (s3, s3_stride * j);
11938
11939     /* 3: loadpb */
11940     var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
11941
11942     for (i = 0; i < n; i++) {
11943       /* 0: loadb */
11944       var34 = ptr5[i];
11945       /* 1: loadb */
11946       var35 = ptr6[i];
11947       /* 2: mergebw */
11948       {
11949         orc_union16 _dest;
11950         _dest.x2[0] = var34;
11951         _dest.x2[1] = var35;
11952         var39.i = _dest.i;
11953       }
11954       /* 4: loadb */
11955       var37 = ptr4[i];
11956       /* 5: mergebw */
11957       {
11958         orc_union16 _dest;
11959         _dest.x2[0] = var36;
11960         _dest.x2[1] = var37;
11961         var40.i = _dest.i;
11962       }
11963       /* 6: mergewl */
11964       {
11965         orc_union32 _dest;
11966         _dest.x2[0] = var40.i;
11967         _dest.x2[1] = var39.i;
11968         var38.i = _dest.i;
11969       }
11970       /* 7: storel */
11971       ptr0[i] = var38;
11972     }
11973   }
11974
11975 }
11976
11977 #else
11978 static void
11979 _backup_cogorc_convert_Y444_AYUV (OrcExecutor * ORC_RESTRICT ex)
11980 {
11981   int i;
11982   int j;
11983   int n = ex->n;
11984   int m = ex->params[ORC_VAR_A1];
11985   orc_union32 *ORC_RESTRICT ptr0;
11986   const orc_int8 *ORC_RESTRICT ptr4;
11987   const orc_int8 *ORC_RESTRICT ptr5;
11988   const orc_int8 *ORC_RESTRICT ptr6;
11989   orc_int8 var34;
11990   orc_int8 var35;
11991   orc_int8 var36;
11992   orc_int8 var37;
11993   orc_union32 var38;
11994   orc_union16 var39;
11995   orc_union16 var40;
11996
11997   for (j = 0; j < m; j++) {
11998     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
11999     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
12000     ptr5 = ORC_PTR_OFFSET (ex->arrays[5], ex->params[5] * j);
12001     ptr6 = ORC_PTR_OFFSET (ex->arrays[6], ex->params[6] * j);
12002
12003     /* 3: loadpb */
12004     var36 = (int) 0x000000ff;   /* 255 or 1.25987e-321f */
12005
12006     for (i = 0; i < n; i++) {
12007       /* 0: loadb */
12008       var34 = ptr5[i];
12009       /* 1: loadb */
12010       var35 = ptr6[i];
12011       /* 2: mergebw */
12012       {
12013         orc_union16 _dest;
12014         _dest.x2[0] = var34;
12015         _dest.x2[1] = var35;
12016         var39.i = _dest.i;
12017       }
12018       /* 4: loadb */
12019       var37 = ptr4[i];
12020       /* 5: mergebw */
12021       {
12022         orc_union16 _dest;
12023         _dest.x2[0] = var36;
12024         _dest.x2[1] = var37;
12025         var40.i = _dest.i;
12026       }
12027       /* 6: mergewl */
12028       {
12029         orc_union32 _dest;
12030         _dest.x2[0] = var40.i;
12031         _dest.x2[1] = var39.i;
12032         var38.i = _dest.i;
12033       }
12034       /* 7: storel */
12035       ptr0[i] = var38;
12036     }
12037   }
12038
12039 }
12040
12041 void
12042 cogorc_convert_Y444_AYUV (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
12043     const orc_uint8 * ORC_RESTRICT s1, int s1_stride,
12044     const orc_uint8 * ORC_RESTRICT s2, int s2_stride,
12045     const orc_uint8 * ORC_RESTRICT s3, int s3_stride, int n, int m)
12046 {
12047   OrcExecutor _ex, *ex = &_ex;
12048   static volatile int p_inited = 0;
12049   static OrcProgram *p = 0;
12050   void (*func) (OrcExecutor *);
12051
12052   if (!p_inited) {
12053     orc_once_mutex_lock ();
12054     if (!p_inited) {
12055
12056       p = orc_program_new ();
12057       orc_program_set_2d (p);
12058       orc_program_set_name (p, "cogorc_convert_Y444_AYUV");
12059       orc_program_set_backup_function (p, _backup_cogorc_convert_Y444_AYUV);
12060       orc_program_add_destination (p, 4, "d1");
12061       orc_program_add_source (p, 1, "s1");
12062       orc_program_add_source (p, 1, "s2");
12063       orc_program_add_source (p, 1, "s3");
12064       orc_program_add_constant (p, 1, 0x000000ff, "c1");
12065       orc_program_add_temporary (p, 2, "t1");
12066       orc_program_add_temporary (p, 2, "t2");
12067
12068       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
12069           ORC_VAR_D1);
12070       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_C1, ORC_VAR_S1,
12071           ORC_VAR_D1);
12072       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T2, ORC_VAR_T1,
12073           ORC_VAR_D1);
12074
12075       orc_program_compile (p);
12076     }
12077     p_inited = TRUE;
12078     orc_once_mutex_unlock ();
12079   }
12080   ex->program = p;
12081
12082   ex->n = n;
12083   ORC_EXECUTOR_M (ex) = m;
12084   ex->arrays[ORC_VAR_D1] = d1;
12085   ex->params[ORC_VAR_D1] = d1_stride;
12086   ex->arrays[ORC_VAR_S1] = (void *) s1;
12087   ex->params[ORC_VAR_S1] = s1_stride;
12088   ex->arrays[ORC_VAR_S2] = (void *) s2;
12089   ex->params[ORC_VAR_S2] = s2_stride;
12090   ex->arrays[ORC_VAR_S3] = (void *) s3;
12091   ex->params[ORC_VAR_S3] = s3_stride;
12092
12093   func = p->code_exec;
12094   func (ex);
12095 }
12096 #endif
12097
12098
12099 /* cogorc_convert_AYUV_ARGB */
12100 #ifdef DISABLE_ORC
12101 void
12102 cogorc_convert_AYUV_ARGB (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
12103     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
12104 {
12105   int i;
12106   int j;
12107   orc_union32 *ORC_RESTRICT ptr0;
12108   const orc_union32 *ORC_RESTRICT ptr4;
12109   orc_union32 var48;
12110   orc_union32 var49;
12111   orc_union16 var50;
12112   orc_union16 var51;
12113   orc_union16 var52;
12114   orc_union16 var53;
12115   orc_union16 var54;
12116   orc_union32 var55;
12117   orc_union32 var56;
12118   orc_union32 var57;
12119   orc_union16 var58;
12120   orc_union16 var59;
12121   orc_int8 var60;
12122   orc_int8 var61;
12123   orc_int8 var62;
12124   orc_int8 var63;
12125   orc_union16 var64;
12126   orc_union16 var65;
12127   orc_union16 var66;
12128   orc_union16 var67;
12129   orc_union16 var68;
12130   orc_union16 var69;
12131   orc_union16 var70;
12132   orc_union16 var71;
12133   orc_union16 var72;
12134   orc_union16 var73;
12135   orc_union16 var74;
12136   orc_union16 var75;
12137   orc_union16 var76;
12138   orc_union16 var77;
12139   orc_union16 var78;
12140   orc_union16 var79;
12141   orc_union16 var80;
12142   orc_union16 var81;
12143   orc_union16 var82;
12144   orc_union16 var83;
12145   orc_union16 var84;
12146   orc_union16 var85;
12147   orc_union16 var86;
12148   orc_int8 var87;
12149   orc_int8 var88;
12150   orc_int8 var89;
12151   orc_union16 var90;
12152   orc_union16 var91;
12153   orc_union32 var92;
12154
12155   for (j = 0; j < m; j++) {
12156     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
12157     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
12158
12159     /* 1: loadpb */
12160     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12161     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12162     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12163     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12164     /* 9: loadpw */
12165     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
12166     /* 14: loadpw */
12167     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
12168     /* 21: loadpw */
12169     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
12170     /* 25: loadpw */
12171     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
12172     /* 29: loadpw */
12173     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
12174     /* 40: loadpb */
12175     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12176     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12177     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12178     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12179
12180     for (i = 0; i < n; i++) {
12181       /* 0: loadl */
12182       var48 = ptr4[i];
12183       /* 2: subb */
12184       var57.x4[0] = var48.x4[0] - var49.x4[0];
12185       var57.x4[1] = var48.x4[1] - var49.x4[1];
12186       var57.x4[2] = var48.x4[2] - var49.x4[2];
12187       var57.x4[3] = var48.x4[3] - var49.x4[3];
12188       /* 3: splitlw */
12189       {
12190         orc_union32 _src;
12191         _src.i = var57.i;
12192         var58.i = _src.x2[1];
12193         var59.i = _src.x2[0];
12194       }
12195       /* 4: splitwb */
12196       {
12197         orc_union16 _src;
12198         _src.i = var59.i;
12199         var60 = _src.x2[1];
12200         var61 = _src.x2[0];
12201       }
12202       /* 5: splitwb */
12203       {
12204         orc_union16 _src;
12205         _src.i = var58.i;
12206         var62 = _src.x2[1];
12207         var63 = _src.x2[0];
12208       }
12209       /* 6: convsbw */
12210       var64.i = var60;
12211       /* 7: convsbw */
12212       var65.i = var63;
12213       /* 8: convsbw */
12214       var66.i = var62;
12215       /* 10: mullw */
12216       var67.i = (var64.i * var50.i) & 0xffff;
12217       /* 11: shrsw */
12218       var68.i = var67.i >> 8;
12219       /* 12: addssw */
12220       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
12221       /* 13: addssw */
12222       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
12223       /* 15: mullw */
12224       var71.i = (var66.i * var51.i) & 0xffff;
12225       /* 16: shrsw */
12226       var72.i = var71.i >> 8;
12227       /* 17: subssw */
12228       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
12229       /* 18: addssw */
12230       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
12231       /* 19: addssw */
12232       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
12233       /* 20: addssw */
12234       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
12235       /* 22: mullw */
12236       var77.i = (var65.i * var52.i) & 0xffff;
12237       /* 23: shrsw */
12238       var78.i = var77.i >> 8;
12239       /* 24: addssw */
12240       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
12241       /* 26: mullw */
12242       var80.i = (var65.i * var53.i) & 0xffff;
12243       /* 27: shrsw */
12244       var81.i = var80.i >> 8;
12245       /* 28: subssw */
12246       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
12247       /* 30: mullw */
12248       var83.i = (var66.i * var54.i) & 0xffff;
12249       /* 31: shrsw */
12250       var84.i = var83.i >> 8;
12251       /* 32: subssw */
12252       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
12253       /* 33: subssw */
12254       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
12255       /* 34: convssswb */
12256       var87 = ORC_CLAMP_SB (var74.i);
12257       /* 35: convssswb */
12258       var88 = ORC_CLAMP_SB (var86.i);
12259       /* 36: convssswb */
12260       var89 = ORC_CLAMP_SB (var79.i);
12261       /* 37: mergebw */
12262       {
12263         orc_union16 _dest;
12264         _dest.x2[0] = var61;
12265         _dest.x2[1] = var87;
12266         var90.i = _dest.i;
12267       }
12268       /* 38: mergebw */
12269       {
12270         orc_union16 _dest;
12271         _dest.x2[0] = var88;
12272         _dest.x2[1] = var89;
12273         var91.i = _dest.i;
12274       }
12275       /* 39: mergewl */
12276       {
12277         orc_union32 _dest;
12278         _dest.x2[0] = var90.i;
12279         _dest.x2[1] = var91.i;
12280         var92.i = _dest.i;
12281       }
12282       /* 41: addb */
12283       var56.x4[0] = var92.x4[0] + var55.x4[0];
12284       var56.x4[1] = var92.x4[1] + var55.x4[1];
12285       var56.x4[2] = var92.x4[2] + var55.x4[2];
12286       var56.x4[3] = var92.x4[3] + var55.x4[3];
12287       /* 42: storel */
12288       ptr0[i] = var56;
12289     }
12290   }
12291
12292 }
12293
12294 #else
12295 static void
12296 _backup_cogorc_convert_AYUV_ARGB (OrcExecutor * ORC_RESTRICT ex)
12297 {
12298   int i;
12299   int j;
12300   int n = ex->n;
12301   int m = ex->params[ORC_VAR_A1];
12302   orc_union32 *ORC_RESTRICT ptr0;
12303   const orc_union32 *ORC_RESTRICT ptr4;
12304   orc_union32 var48;
12305   orc_union32 var49;
12306   orc_union16 var50;
12307   orc_union16 var51;
12308   orc_union16 var52;
12309   orc_union16 var53;
12310   orc_union16 var54;
12311   orc_union32 var55;
12312   orc_union32 var56;
12313   orc_union32 var57;
12314   orc_union16 var58;
12315   orc_union16 var59;
12316   orc_int8 var60;
12317   orc_int8 var61;
12318   orc_int8 var62;
12319   orc_int8 var63;
12320   orc_union16 var64;
12321   orc_union16 var65;
12322   orc_union16 var66;
12323   orc_union16 var67;
12324   orc_union16 var68;
12325   orc_union16 var69;
12326   orc_union16 var70;
12327   orc_union16 var71;
12328   orc_union16 var72;
12329   orc_union16 var73;
12330   orc_union16 var74;
12331   orc_union16 var75;
12332   orc_union16 var76;
12333   orc_union16 var77;
12334   orc_union16 var78;
12335   orc_union16 var79;
12336   orc_union16 var80;
12337   orc_union16 var81;
12338   orc_union16 var82;
12339   orc_union16 var83;
12340   orc_union16 var84;
12341   orc_union16 var85;
12342   orc_union16 var86;
12343   orc_int8 var87;
12344   orc_int8 var88;
12345   orc_int8 var89;
12346   orc_union16 var90;
12347   orc_union16 var91;
12348   orc_union32 var92;
12349
12350   for (j = 0; j < m; j++) {
12351     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
12352     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
12353
12354     /* 1: loadpb */
12355     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12356     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12357     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12358     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12359     /* 9: loadpw */
12360     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
12361     /* 14: loadpw */
12362     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
12363     /* 21: loadpw */
12364     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
12365     /* 25: loadpw */
12366     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
12367     /* 29: loadpw */
12368     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
12369     /* 40: loadpb */
12370     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12371     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12372     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12373     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12374
12375     for (i = 0; i < n; i++) {
12376       /* 0: loadl */
12377       var48 = ptr4[i];
12378       /* 2: subb */
12379       var57.x4[0] = var48.x4[0] - var49.x4[0];
12380       var57.x4[1] = var48.x4[1] - var49.x4[1];
12381       var57.x4[2] = var48.x4[2] - var49.x4[2];
12382       var57.x4[3] = var48.x4[3] - var49.x4[3];
12383       /* 3: splitlw */
12384       {
12385         orc_union32 _src;
12386         _src.i = var57.i;
12387         var58.i = _src.x2[1];
12388         var59.i = _src.x2[0];
12389       }
12390       /* 4: splitwb */
12391       {
12392         orc_union16 _src;
12393         _src.i = var59.i;
12394         var60 = _src.x2[1];
12395         var61 = _src.x2[0];
12396       }
12397       /* 5: splitwb */
12398       {
12399         orc_union16 _src;
12400         _src.i = var58.i;
12401         var62 = _src.x2[1];
12402         var63 = _src.x2[0];
12403       }
12404       /* 6: convsbw */
12405       var64.i = var60;
12406       /* 7: convsbw */
12407       var65.i = var63;
12408       /* 8: convsbw */
12409       var66.i = var62;
12410       /* 10: mullw */
12411       var67.i = (var64.i * var50.i) & 0xffff;
12412       /* 11: shrsw */
12413       var68.i = var67.i >> 8;
12414       /* 12: addssw */
12415       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
12416       /* 13: addssw */
12417       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
12418       /* 15: mullw */
12419       var71.i = (var66.i * var51.i) & 0xffff;
12420       /* 16: shrsw */
12421       var72.i = var71.i >> 8;
12422       /* 17: subssw */
12423       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
12424       /* 18: addssw */
12425       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
12426       /* 19: addssw */
12427       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
12428       /* 20: addssw */
12429       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
12430       /* 22: mullw */
12431       var77.i = (var65.i * var52.i) & 0xffff;
12432       /* 23: shrsw */
12433       var78.i = var77.i >> 8;
12434       /* 24: addssw */
12435       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
12436       /* 26: mullw */
12437       var80.i = (var65.i * var53.i) & 0xffff;
12438       /* 27: shrsw */
12439       var81.i = var80.i >> 8;
12440       /* 28: subssw */
12441       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
12442       /* 30: mullw */
12443       var83.i = (var66.i * var54.i) & 0xffff;
12444       /* 31: shrsw */
12445       var84.i = var83.i >> 8;
12446       /* 32: subssw */
12447       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
12448       /* 33: subssw */
12449       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
12450       /* 34: convssswb */
12451       var87 = ORC_CLAMP_SB (var74.i);
12452       /* 35: convssswb */
12453       var88 = ORC_CLAMP_SB (var86.i);
12454       /* 36: convssswb */
12455       var89 = ORC_CLAMP_SB (var79.i);
12456       /* 37: mergebw */
12457       {
12458         orc_union16 _dest;
12459         _dest.x2[0] = var61;
12460         _dest.x2[1] = var87;
12461         var90.i = _dest.i;
12462       }
12463       /* 38: mergebw */
12464       {
12465         orc_union16 _dest;
12466         _dest.x2[0] = var88;
12467         _dest.x2[1] = var89;
12468         var91.i = _dest.i;
12469       }
12470       /* 39: mergewl */
12471       {
12472         orc_union32 _dest;
12473         _dest.x2[0] = var90.i;
12474         _dest.x2[1] = var91.i;
12475         var92.i = _dest.i;
12476       }
12477       /* 41: addb */
12478       var56.x4[0] = var92.x4[0] + var55.x4[0];
12479       var56.x4[1] = var92.x4[1] + var55.x4[1];
12480       var56.x4[2] = var92.x4[2] + var55.x4[2];
12481       var56.x4[3] = var92.x4[3] + var55.x4[3];
12482       /* 42: storel */
12483       ptr0[i] = var56;
12484     }
12485   }
12486
12487 }
12488
12489 void
12490 cogorc_convert_AYUV_ARGB (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
12491     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
12492 {
12493   OrcExecutor _ex, *ex = &_ex;
12494   static volatile int p_inited = 0;
12495   static OrcProgram *p = 0;
12496   void (*func) (OrcExecutor *);
12497
12498   if (!p_inited) {
12499     orc_once_mutex_lock ();
12500     if (!p_inited) {
12501
12502       p = orc_program_new ();
12503       orc_program_set_2d (p);
12504       orc_program_set_name (p, "cogorc_convert_AYUV_ARGB");
12505       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ARGB);
12506       orc_program_add_destination (p, 4, "d1");
12507       orc_program_add_source (p, 4, "s1");
12508       orc_program_add_constant (p, 1, 0x00000008, "c1");
12509       orc_program_add_constant (p, 4, 0x00000080, "c2");
12510       orc_program_add_constant (p, 4, 0x0000002a, "c3");
12511       orc_program_add_constant (p, 4, 0x00000067, "c4");
12512       orc_program_add_constant (p, 4, 0x00000004, "c5");
12513       orc_program_add_constant (p, 4, 0x00000064, "c6");
12514       orc_program_add_constant (p, 4, 0x00000068, "c7");
12515       orc_program_add_temporary (p, 2, "t1");
12516       orc_program_add_temporary (p, 2, "t2");
12517       orc_program_add_temporary (p, 1, "t3");
12518       orc_program_add_temporary (p, 1, "t4");
12519       orc_program_add_temporary (p, 1, "t5");
12520       orc_program_add_temporary (p, 1, "t6");
12521       orc_program_add_temporary (p, 2, "t7");
12522       orc_program_add_temporary (p, 2, "t8");
12523       orc_program_add_temporary (p, 2, "t9");
12524       orc_program_add_temporary (p, 2, "t10");
12525       orc_program_add_temporary (p, 2, "t11");
12526       orc_program_add_temporary (p, 2, "t12");
12527       orc_program_add_temporary (p, 1, "t13");
12528       orc_program_add_temporary (p, 1, "t14");
12529       orc_program_add_temporary (p, 1, "t15");
12530       orc_program_add_temporary (p, 4, "t16");
12531
12532       orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
12533           ORC_VAR_D1);
12534       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
12535           ORC_VAR_D1);
12536       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
12537           ORC_VAR_D1);
12538       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
12539           ORC_VAR_D1);
12540       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
12541           ORC_VAR_D1);
12542       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
12543           ORC_VAR_D1);
12544       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
12545           ORC_VAR_D1);
12546       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
12547           ORC_VAR_D1);
12548       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
12549           ORC_VAR_D1);
12550       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
12551           ORC_VAR_D1);
12552       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
12553           ORC_VAR_D1);
12554       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
12555           ORC_VAR_D1);
12556       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
12557           ORC_VAR_D1);
12558       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
12559           ORC_VAR_T1, ORC_VAR_D1);
12560       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
12561           ORC_VAR_T9, ORC_VAR_D1);
12562       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
12563           ORC_VAR_D1);
12564       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
12565           ORC_VAR_T8, ORC_VAR_D1);
12566       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
12567           ORC_VAR_D1);
12568       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
12569           ORC_VAR_D1);
12570       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
12571           ORC_VAR_T1, ORC_VAR_D1);
12572       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
12573           ORC_VAR_D1);
12574       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
12575           ORC_VAR_D1);
12576       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
12577           ORC_VAR_D1);
12578       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
12579           ORC_VAR_D1);
12580       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
12581           ORC_VAR_D1);
12582       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
12583           ORC_VAR_T1, ORC_VAR_D1);
12584       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
12585           ORC_VAR_T1, ORC_VAR_D1);
12586       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
12587           ORC_VAR_D1, ORC_VAR_D1);
12588       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
12589           ORC_VAR_D1, ORC_VAR_D1);
12590       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
12591           ORC_VAR_D1, ORC_VAR_D1);
12592       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
12593           ORC_VAR_T13, ORC_VAR_D1);
12594       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
12595           ORC_VAR_T15, ORC_VAR_D1);
12596       orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
12597           ORC_VAR_D1);
12598       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
12599           ORC_VAR_D1);
12600
12601       orc_program_compile (p);
12602     }
12603     p_inited = TRUE;
12604     orc_once_mutex_unlock ();
12605   }
12606   ex->program = p;
12607
12608   ex->n = n;
12609   ORC_EXECUTOR_M (ex) = m;
12610   ex->arrays[ORC_VAR_D1] = d1;
12611   ex->params[ORC_VAR_D1] = d1_stride;
12612   ex->arrays[ORC_VAR_S1] = (void *) s1;
12613   ex->params[ORC_VAR_S1] = s1_stride;
12614
12615   func = p->code_exec;
12616   func (ex);
12617 }
12618 #endif
12619
12620
12621 /* cogorc_convert_AYUV_BGRA */
12622 #ifdef DISABLE_ORC
12623 void
12624 cogorc_convert_AYUV_BGRA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
12625     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
12626 {
12627   int i;
12628   int j;
12629   orc_union32 *ORC_RESTRICT ptr0;
12630   const orc_union32 *ORC_RESTRICT ptr4;
12631   orc_union32 var48;
12632   orc_union32 var49;
12633   orc_union16 var50;
12634   orc_union16 var51;
12635   orc_union16 var52;
12636   orc_union16 var53;
12637   orc_union16 var54;
12638   orc_union32 var55;
12639   orc_union32 var56;
12640   orc_union32 var57;
12641   orc_union16 var58;
12642   orc_union16 var59;
12643   orc_int8 var60;
12644   orc_int8 var61;
12645   orc_int8 var62;
12646   orc_int8 var63;
12647   orc_union16 var64;
12648   orc_union16 var65;
12649   orc_union16 var66;
12650   orc_union16 var67;
12651   orc_union16 var68;
12652   orc_union16 var69;
12653   orc_union16 var70;
12654   orc_union16 var71;
12655   orc_union16 var72;
12656   orc_union16 var73;
12657   orc_union16 var74;
12658   orc_union16 var75;
12659   orc_union16 var76;
12660   orc_union16 var77;
12661   orc_union16 var78;
12662   orc_union16 var79;
12663   orc_union16 var80;
12664   orc_union16 var81;
12665   orc_union16 var82;
12666   orc_union16 var83;
12667   orc_union16 var84;
12668   orc_union16 var85;
12669   orc_union16 var86;
12670   orc_int8 var87;
12671   orc_int8 var88;
12672   orc_int8 var89;
12673   orc_union16 var90;
12674   orc_union16 var91;
12675   orc_union32 var92;
12676
12677   for (j = 0; j < m; j++) {
12678     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
12679     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
12680
12681     /* 1: loadpb */
12682     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12683     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12684     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12685     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12686     /* 9: loadpw */
12687     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
12688     /* 14: loadpw */
12689     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
12690     /* 21: loadpw */
12691     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
12692     /* 25: loadpw */
12693     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
12694     /* 29: loadpw */
12695     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
12696     /* 40: loadpb */
12697     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12698     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12699     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12700     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12701
12702     for (i = 0; i < n; i++) {
12703       /* 0: loadl */
12704       var48 = ptr4[i];
12705       /* 2: subb */
12706       var57.x4[0] = var48.x4[0] - var49.x4[0];
12707       var57.x4[1] = var48.x4[1] - var49.x4[1];
12708       var57.x4[2] = var48.x4[2] - var49.x4[2];
12709       var57.x4[3] = var48.x4[3] - var49.x4[3];
12710       /* 3: splitlw */
12711       {
12712         orc_union32 _src;
12713         _src.i = var57.i;
12714         var58.i = _src.x2[1];
12715         var59.i = _src.x2[0];
12716       }
12717       /* 4: splitwb */
12718       {
12719         orc_union16 _src;
12720         _src.i = var59.i;
12721         var60 = _src.x2[1];
12722         var61 = _src.x2[0];
12723       }
12724       /* 5: splitwb */
12725       {
12726         orc_union16 _src;
12727         _src.i = var58.i;
12728         var62 = _src.x2[1];
12729         var63 = _src.x2[0];
12730       }
12731       /* 6: convsbw */
12732       var64.i = var60;
12733       /* 7: convsbw */
12734       var65.i = var63;
12735       /* 8: convsbw */
12736       var66.i = var62;
12737       /* 10: mullw */
12738       var67.i = (var64.i * var50.i) & 0xffff;
12739       /* 11: shrsw */
12740       var68.i = var67.i >> 8;
12741       /* 12: addssw */
12742       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
12743       /* 13: addssw */
12744       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
12745       /* 15: mullw */
12746       var71.i = (var66.i * var51.i) & 0xffff;
12747       /* 16: shrsw */
12748       var72.i = var71.i >> 8;
12749       /* 17: subssw */
12750       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
12751       /* 18: addssw */
12752       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
12753       /* 19: addssw */
12754       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
12755       /* 20: addssw */
12756       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
12757       /* 22: mullw */
12758       var77.i = (var65.i * var52.i) & 0xffff;
12759       /* 23: shrsw */
12760       var78.i = var77.i >> 8;
12761       /* 24: addssw */
12762       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
12763       /* 26: mullw */
12764       var80.i = (var65.i * var53.i) & 0xffff;
12765       /* 27: shrsw */
12766       var81.i = var80.i >> 8;
12767       /* 28: subssw */
12768       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
12769       /* 30: mullw */
12770       var83.i = (var66.i * var54.i) & 0xffff;
12771       /* 31: shrsw */
12772       var84.i = var83.i >> 8;
12773       /* 32: subssw */
12774       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
12775       /* 33: subssw */
12776       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
12777       /* 34: convssswb */
12778       var87 = ORC_CLAMP_SB (var74.i);
12779       /* 35: convssswb */
12780       var88 = ORC_CLAMP_SB (var86.i);
12781       /* 36: convssswb */
12782       var89 = ORC_CLAMP_SB (var79.i);
12783       /* 37: mergebw */
12784       {
12785         orc_union16 _dest;
12786         _dest.x2[0] = var89;
12787         _dest.x2[1] = var88;
12788         var90.i = _dest.i;
12789       }
12790       /* 38: mergebw */
12791       {
12792         orc_union16 _dest;
12793         _dest.x2[0] = var87;
12794         _dest.x2[1] = var61;
12795         var91.i = _dest.i;
12796       }
12797       /* 39: mergewl */
12798       {
12799         orc_union32 _dest;
12800         _dest.x2[0] = var90.i;
12801         _dest.x2[1] = var91.i;
12802         var92.i = _dest.i;
12803       }
12804       /* 41: addb */
12805       var56.x4[0] = var92.x4[0] + var55.x4[0];
12806       var56.x4[1] = var92.x4[1] + var55.x4[1];
12807       var56.x4[2] = var92.x4[2] + var55.x4[2];
12808       var56.x4[3] = var92.x4[3] + var55.x4[3];
12809       /* 42: storel */
12810       ptr0[i] = var56;
12811     }
12812   }
12813
12814 }
12815
12816 #else
12817 static void
12818 _backup_cogorc_convert_AYUV_BGRA (OrcExecutor * ORC_RESTRICT ex)
12819 {
12820   int i;
12821   int j;
12822   int n = ex->n;
12823   int m = ex->params[ORC_VAR_A1];
12824   orc_union32 *ORC_RESTRICT ptr0;
12825   const orc_union32 *ORC_RESTRICT ptr4;
12826   orc_union32 var48;
12827   orc_union32 var49;
12828   orc_union16 var50;
12829   orc_union16 var51;
12830   orc_union16 var52;
12831   orc_union16 var53;
12832   orc_union16 var54;
12833   orc_union32 var55;
12834   orc_union32 var56;
12835   orc_union32 var57;
12836   orc_union16 var58;
12837   orc_union16 var59;
12838   orc_int8 var60;
12839   orc_int8 var61;
12840   orc_int8 var62;
12841   orc_int8 var63;
12842   orc_union16 var64;
12843   orc_union16 var65;
12844   orc_union16 var66;
12845   orc_union16 var67;
12846   orc_union16 var68;
12847   orc_union16 var69;
12848   orc_union16 var70;
12849   orc_union16 var71;
12850   orc_union16 var72;
12851   orc_union16 var73;
12852   orc_union16 var74;
12853   orc_union16 var75;
12854   orc_union16 var76;
12855   orc_union16 var77;
12856   orc_union16 var78;
12857   orc_union16 var79;
12858   orc_union16 var80;
12859   orc_union16 var81;
12860   orc_union16 var82;
12861   orc_union16 var83;
12862   orc_union16 var84;
12863   orc_union16 var85;
12864   orc_union16 var86;
12865   orc_int8 var87;
12866   orc_int8 var88;
12867   orc_int8 var89;
12868   orc_union16 var90;
12869   orc_union16 var91;
12870   orc_union32 var92;
12871
12872   for (j = 0; j < m; j++) {
12873     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
12874     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
12875
12876     /* 1: loadpb */
12877     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12878     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12879     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12880     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12881     /* 9: loadpw */
12882     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
12883     /* 14: loadpw */
12884     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
12885     /* 21: loadpw */
12886     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
12887     /* 25: loadpw */
12888     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
12889     /* 29: loadpw */
12890     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
12891     /* 40: loadpb */
12892     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12893     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12894     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12895     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
12896
12897     for (i = 0; i < n; i++) {
12898       /* 0: loadl */
12899       var48 = ptr4[i];
12900       /* 2: subb */
12901       var57.x4[0] = var48.x4[0] - var49.x4[0];
12902       var57.x4[1] = var48.x4[1] - var49.x4[1];
12903       var57.x4[2] = var48.x4[2] - var49.x4[2];
12904       var57.x4[3] = var48.x4[3] - var49.x4[3];
12905       /* 3: splitlw */
12906       {
12907         orc_union32 _src;
12908         _src.i = var57.i;
12909         var58.i = _src.x2[1];
12910         var59.i = _src.x2[0];
12911       }
12912       /* 4: splitwb */
12913       {
12914         orc_union16 _src;
12915         _src.i = var59.i;
12916         var60 = _src.x2[1];
12917         var61 = _src.x2[0];
12918       }
12919       /* 5: splitwb */
12920       {
12921         orc_union16 _src;
12922         _src.i = var58.i;
12923         var62 = _src.x2[1];
12924         var63 = _src.x2[0];
12925       }
12926       /* 6: convsbw */
12927       var64.i = var60;
12928       /* 7: convsbw */
12929       var65.i = var63;
12930       /* 8: convsbw */
12931       var66.i = var62;
12932       /* 10: mullw */
12933       var67.i = (var64.i * var50.i) & 0xffff;
12934       /* 11: shrsw */
12935       var68.i = var67.i >> 8;
12936       /* 12: addssw */
12937       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
12938       /* 13: addssw */
12939       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
12940       /* 15: mullw */
12941       var71.i = (var66.i * var51.i) & 0xffff;
12942       /* 16: shrsw */
12943       var72.i = var71.i >> 8;
12944       /* 17: subssw */
12945       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
12946       /* 18: addssw */
12947       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
12948       /* 19: addssw */
12949       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
12950       /* 20: addssw */
12951       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
12952       /* 22: mullw */
12953       var77.i = (var65.i * var52.i) & 0xffff;
12954       /* 23: shrsw */
12955       var78.i = var77.i >> 8;
12956       /* 24: addssw */
12957       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
12958       /* 26: mullw */
12959       var80.i = (var65.i * var53.i) & 0xffff;
12960       /* 27: shrsw */
12961       var81.i = var80.i >> 8;
12962       /* 28: subssw */
12963       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
12964       /* 30: mullw */
12965       var83.i = (var66.i * var54.i) & 0xffff;
12966       /* 31: shrsw */
12967       var84.i = var83.i >> 8;
12968       /* 32: subssw */
12969       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
12970       /* 33: subssw */
12971       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
12972       /* 34: convssswb */
12973       var87 = ORC_CLAMP_SB (var74.i);
12974       /* 35: convssswb */
12975       var88 = ORC_CLAMP_SB (var86.i);
12976       /* 36: convssswb */
12977       var89 = ORC_CLAMP_SB (var79.i);
12978       /* 37: mergebw */
12979       {
12980         orc_union16 _dest;
12981         _dest.x2[0] = var89;
12982         _dest.x2[1] = var88;
12983         var90.i = _dest.i;
12984       }
12985       /* 38: mergebw */
12986       {
12987         orc_union16 _dest;
12988         _dest.x2[0] = var87;
12989         _dest.x2[1] = var61;
12990         var91.i = _dest.i;
12991       }
12992       /* 39: mergewl */
12993       {
12994         orc_union32 _dest;
12995         _dest.x2[0] = var90.i;
12996         _dest.x2[1] = var91.i;
12997         var92.i = _dest.i;
12998       }
12999       /* 41: addb */
13000       var56.x4[0] = var92.x4[0] + var55.x4[0];
13001       var56.x4[1] = var92.x4[1] + var55.x4[1];
13002       var56.x4[2] = var92.x4[2] + var55.x4[2];
13003       var56.x4[3] = var92.x4[3] + var55.x4[3];
13004       /* 42: storel */
13005       ptr0[i] = var56;
13006     }
13007   }
13008
13009 }
13010
13011 void
13012 cogorc_convert_AYUV_BGRA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
13013     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
13014 {
13015   OrcExecutor _ex, *ex = &_ex;
13016   static volatile int p_inited = 0;
13017   static OrcProgram *p = 0;
13018   void (*func) (OrcExecutor *);
13019
13020   if (!p_inited) {
13021     orc_once_mutex_lock ();
13022     if (!p_inited) {
13023
13024       p = orc_program_new ();
13025       orc_program_set_2d (p);
13026       orc_program_set_name (p, "cogorc_convert_AYUV_BGRA");
13027       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_BGRA);
13028       orc_program_add_destination (p, 4, "d1");
13029       orc_program_add_source (p, 4, "s1");
13030       orc_program_add_constant (p, 1, 0x00000008, "c1");
13031       orc_program_add_constant (p, 4, 0x00000080, "c2");
13032       orc_program_add_constant (p, 4, 0x0000002a, "c3");
13033       orc_program_add_constant (p, 4, 0x00000067, "c4");
13034       orc_program_add_constant (p, 4, 0x00000004, "c5");
13035       orc_program_add_constant (p, 4, 0x00000064, "c6");
13036       orc_program_add_constant (p, 4, 0x00000068, "c7");
13037       orc_program_add_temporary (p, 2, "t1");
13038       orc_program_add_temporary (p, 2, "t2");
13039       orc_program_add_temporary (p, 1, "t3");
13040       orc_program_add_temporary (p, 1, "t4");
13041       orc_program_add_temporary (p, 1, "t5");
13042       orc_program_add_temporary (p, 1, "t6");
13043       orc_program_add_temporary (p, 2, "t7");
13044       orc_program_add_temporary (p, 2, "t8");
13045       orc_program_add_temporary (p, 2, "t9");
13046       orc_program_add_temporary (p, 2, "t10");
13047       orc_program_add_temporary (p, 2, "t11");
13048       orc_program_add_temporary (p, 2, "t12");
13049       orc_program_add_temporary (p, 1, "t13");
13050       orc_program_add_temporary (p, 1, "t14");
13051       orc_program_add_temporary (p, 1, "t15");
13052       orc_program_add_temporary (p, 4, "t16");
13053
13054       orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
13055           ORC_VAR_D1);
13056       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
13057           ORC_VAR_D1);
13058       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
13059           ORC_VAR_D1);
13060       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
13061           ORC_VAR_D1);
13062       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
13063           ORC_VAR_D1);
13064       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
13065           ORC_VAR_D1);
13066       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
13067           ORC_VAR_D1);
13068       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
13069           ORC_VAR_D1);
13070       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13071           ORC_VAR_D1);
13072       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
13073           ORC_VAR_D1);
13074       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
13075           ORC_VAR_D1);
13076       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
13077           ORC_VAR_D1);
13078       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13079           ORC_VAR_D1);
13080       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
13081           ORC_VAR_T1, ORC_VAR_D1);
13082       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
13083           ORC_VAR_T9, ORC_VAR_D1);
13084       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
13085           ORC_VAR_D1);
13086       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
13087           ORC_VAR_T8, ORC_VAR_D1);
13088       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
13089           ORC_VAR_D1);
13090       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13091           ORC_VAR_D1);
13092       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
13093           ORC_VAR_T1, ORC_VAR_D1);
13094       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
13095           ORC_VAR_D1);
13096       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13097           ORC_VAR_D1);
13098       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
13099           ORC_VAR_D1);
13100       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
13101           ORC_VAR_D1);
13102       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13103           ORC_VAR_D1);
13104       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
13105           ORC_VAR_T1, ORC_VAR_D1);
13106       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
13107           ORC_VAR_T1, ORC_VAR_D1);
13108       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
13109           ORC_VAR_D1, ORC_VAR_D1);
13110       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
13111           ORC_VAR_D1, ORC_VAR_D1);
13112       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
13113           ORC_VAR_D1, ORC_VAR_D1);
13114       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T15,
13115           ORC_VAR_T14, ORC_VAR_D1);
13116       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T13,
13117           ORC_VAR_T3, ORC_VAR_D1);
13118       orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
13119           ORC_VAR_D1);
13120       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
13121           ORC_VAR_D1);
13122
13123       orc_program_compile (p);
13124     }
13125     p_inited = TRUE;
13126     orc_once_mutex_unlock ();
13127   }
13128   ex->program = p;
13129
13130   ex->n = n;
13131   ORC_EXECUTOR_M (ex) = m;
13132   ex->arrays[ORC_VAR_D1] = d1;
13133   ex->params[ORC_VAR_D1] = d1_stride;
13134   ex->arrays[ORC_VAR_S1] = (void *) s1;
13135   ex->params[ORC_VAR_S1] = s1_stride;
13136
13137   func = p->code_exec;
13138   func (ex);
13139 }
13140 #endif
13141
13142
13143 /* cogorc_convert_AYUV_ABGR */
13144 #ifdef DISABLE_ORC
13145 void
13146 cogorc_convert_AYUV_ABGR (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
13147     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
13148 {
13149   int i;
13150   int j;
13151   orc_union32 *ORC_RESTRICT ptr0;
13152   const orc_union32 *ORC_RESTRICT ptr4;
13153   orc_union32 var48;
13154   orc_union32 var49;
13155   orc_union16 var50;
13156   orc_union16 var51;
13157   orc_union16 var52;
13158   orc_union16 var53;
13159   orc_union16 var54;
13160   orc_union32 var55;
13161   orc_union32 var56;
13162   orc_union32 var57;
13163   orc_union16 var58;
13164   orc_union16 var59;
13165   orc_int8 var60;
13166   orc_int8 var61;
13167   orc_int8 var62;
13168   orc_int8 var63;
13169   orc_union16 var64;
13170   orc_union16 var65;
13171   orc_union16 var66;
13172   orc_union16 var67;
13173   orc_union16 var68;
13174   orc_union16 var69;
13175   orc_union16 var70;
13176   orc_union16 var71;
13177   orc_union16 var72;
13178   orc_union16 var73;
13179   orc_union16 var74;
13180   orc_union16 var75;
13181   orc_union16 var76;
13182   orc_union16 var77;
13183   orc_union16 var78;
13184   orc_union16 var79;
13185   orc_union16 var80;
13186   orc_union16 var81;
13187   orc_union16 var82;
13188   orc_union16 var83;
13189   orc_union16 var84;
13190   orc_union16 var85;
13191   orc_union16 var86;
13192   orc_int8 var87;
13193   orc_int8 var88;
13194   orc_int8 var89;
13195   orc_union16 var90;
13196   orc_union16 var91;
13197   orc_union32 var92;
13198
13199   for (j = 0; j < m; j++) {
13200     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
13201     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
13202
13203     /* 1: loadpb */
13204     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13205     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13206     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13207     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13208     /* 9: loadpw */
13209     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
13210     /* 14: loadpw */
13211     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
13212     /* 21: loadpw */
13213     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
13214     /* 25: loadpw */
13215     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
13216     /* 29: loadpw */
13217     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
13218     /* 40: loadpb */
13219     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13220     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13221     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13222     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13223
13224     for (i = 0; i < n; i++) {
13225       /* 0: loadl */
13226       var48 = ptr4[i];
13227       /* 2: subb */
13228       var57.x4[0] = var48.x4[0] - var49.x4[0];
13229       var57.x4[1] = var48.x4[1] - var49.x4[1];
13230       var57.x4[2] = var48.x4[2] - var49.x4[2];
13231       var57.x4[3] = var48.x4[3] - var49.x4[3];
13232       /* 3: splitlw */
13233       {
13234         orc_union32 _src;
13235         _src.i = var57.i;
13236         var58.i = _src.x2[1];
13237         var59.i = _src.x2[0];
13238       }
13239       /* 4: splitwb */
13240       {
13241         orc_union16 _src;
13242         _src.i = var59.i;
13243         var60 = _src.x2[1];
13244         var61 = _src.x2[0];
13245       }
13246       /* 5: splitwb */
13247       {
13248         orc_union16 _src;
13249         _src.i = var58.i;
13250         var62 = _src.x2[1];
13251         var63 = _src.x2[0];
13252       }
13253       /* 6: convsbw */
13254       var64.i = var60;
13255       /* 7: convsbw */
13256       var65.i = var63;
13257       /* 8: convsbw */
13258       var66.i = var62;
13259       /* 10: mullw */
13260       var67.i = (var64.i * var50.i) & 0xffff;
13261       /* 11: shrsw */
13262       var68.i = var67.i >> 8;
13263       /* 12: addssw */
13264       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
13265       /* 13: addssw */
13266       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
13267       /* 15: mullw */
13268       var71.i = (var66.i * var51.i) & 0xffff;
13269       /* 16: shrsw */
13270       var72.i = var71.i >> 8;
13271       /* 17: subssw */
13272       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
13273       /* 18: addssw */
13274       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
13275       /* 19: addssw */
13276       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
13277       /* 20: addssw */
13278       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
13279       /* 22: mullw */
13280       var77.i = (var65.i * var52.i) & 0xffff;
13281       /* 23: shrsw */
13282       var78.i = var77.i >> 8;
13283       /* 24: addssw */
13284       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
13285       /* 26: mullw */
13286       var80.i = (var65.i * var53.i) & 0xffff;
13287       /* 27: shrsw */
13288       var81.i = var80.i >> 8;
13289       /* 28: subssw */
13290       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
13291       /* 30: mullw */
13292       var83.i = (var66.i * var54.i) & 0xffff;
13293       /* 31: shrsw */
13294       var84.i = var83.i >> 8;
13295       /* 32: subssw */
13296       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
13297       /* 33: subssw */
13298       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
13299       /* 34: convssswb */
13300       var87 = ORC_CLAMP_SB (var74.i);
13301       /* 35: convssswb */
13302       var88 = ORC_CLAMP_SB (var86.i);
13303       /* 36: convssswb */
13304       var89 = ORC_CLAMP_SB (var79.i);
13305       /* 37: mergebw */
13306       {
13307         orc_union16 _dest;
13308         _dest.x2[0] = var61;
13309         _dest.x2[1] = var89;
13310         var90.i = _dest.i;
13311       }
13312       /* 38: mergebw */
13313       {
13314         orc_union16 _dest;
13315         _dest.x2[0] = var88;
13316         _dest.x2[1] = var87;
13317         var91.i = _dest.i;
13318       }
13319       /* 39: mergewl */
13320       {
13321         orc_union32 _dest;
13322         _dest.x2[0] = var90.i;
13323         _dest.x2[1] = var91.i;
13324         var92.i = _dest.i;
13325       }
13326       /* 41: addb */
13327       var56.x4[0] = var92.x4[0] + var55.x4[0];
13328       var56.x4[1] = var92.x4[1] + var55.x4[1];
13329       var56.x4[2] = var92.x4[2] + var55.x4[2];
13330       var56.x4[3] = var92.x4[3] + var55.x4[3];
13331       /* 42: storel */
13332       ptr0[i] = var56;
13333     }
13334   }
13335
13336 }
13337
13338 #else
13339 static void
13340 _backup_cogorc_convert_AYUV_ABGR (OrcExecutor * ORC_RESTRICT ex)
13341 {
13342   int i;
13343   int j;
13344   int n = ex->n;
13345   int m = ex->params[ORC_VAR_A1];
13346   orc_union32 *ORC_RESTRICT ptr0;
13347   const orc_union32 *ORC_RESTRICT ptr4;
13348   orc_union32 var48;
13349   orc_union32 var49;
13350   orc_union16 var50;
13351   orc_union16 var51;
13352   orc_union16 var52;
13353   orc_union16 var53;
13354   orc_union16 var54;
13355   orc_union32 var55;
13356   orc_union32 var56;
13357   orc_union32 var57;
13358   orc_union16 var58;
13359   orc_union16 var59;
13360   orc_int8 var60;
13361   orc_int8 var61;
13362   orc_int8 var62;
13363   orc_int8 var63;
13364   orc_union16 var64;
13365   orc_union16 var65;
13366   orc_union16 var66;
13367   orc_union16 var67;
13368   orc_union16 var68;
13369   orc_union16 var69;
13370   orc_union16 var70;
13371   orc_union16 var71;
13372   orc_union16 var72;
13373   orc_union16 var73;
13374   orc_union16 var74;
13375   orc_union16 var75;
13376   orc_union16 var76;
13377   orc_union16 var77;
13378   orc_union16 var78;
13379   orc_union16 var79;
13380   orc_union16 var80;
13381   orc_union16 var81;
13382   orc_union16 var82;
13383   orc_union16 var83;
13384   orc_union16 var84;
13385   orc_union16 var85;
13386   orc_union16 var86;
13387   orc_int8 var87;
13388   orc_int8 var88;
13389   orc_int8 var89;
13390   orc_union16 var90;
13391   orc_union16 var91;
13392   orc_union32 var92;
13393
13394   for (j = 0; j < m; j++) {
13395     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
13396     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
13397
13398     /* 1: loadpb */
13399     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13400     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13401     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13402     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13403     /* 9: loadpw */
13404     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
13405     /* 14: loadpw */
13406     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
13407     /* 21: loadpw */
13408     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
13409     /* 25: loadpw */
13410     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
13411     /* 29: loadpw */
13412     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
13413     /* 40: loadpb */
13414     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13415     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13416     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13417     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13418
13419     for (i = 0; i < n; i++) {
13420       /* 0: loadl */
13421       var48 = ptr4[i];
13422       /* 2: subb */
13423       var57.x4[0] = var48.x4[0] - var49.x4[0];
13424       var57.x4[1] = var48.x4[1] - var49.x4[1];
13425       var57.x4[2] = var48.x4[2] - var49.x4[2];
13426       var57.x4[3] = var48.x4[3] - var49.x4[3];
13427       /* 3: splitlw */
13428       {
13429         orc_union32 _src;
13430         _src.i = var57.i;
13431         var58.i = _src.x2[1];
13432         var59.i = _src.x2[0];
13433       }
13434       /* 4: splitwb */
13435       {
13436         orc_union16 _src;
13437         _src.i = var59.i;
13438         var60 = _src.x2[1];
13439         var61 = _src.x2[0];
13440       }
13441       /* 5: splitwb */
13442       {
13443         orc_union16 _src;
13444         _src.i = var58.i;
13445         var62 = _src.x2[1];
13446         var63 = _src.x2[0];
13447       }
13448       /* 6: convsbw */
13449       var64.i = var60;
13450       /* 7: convsbw */
13451       var65.i = var63;
13452       /* 8: convsbw */
13453       var66.i = var62;
13454       /* 10: mullw */
13455       var67.i = (var64.i * var50.i) & 0xffff;
13456       /* 11: shrsw */
13457       var68.i = var67.i >> 8;
13458       /* 12: addssw */
13459       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
13460       /* 13: addssw */
13461       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
13462       /* 15: mullw */
13463       var71.i = (var66.i * var51.i) & 0xffff;
13464       /* 16: shrsw */
13465       var72.i = var71.i >> 8;
13466       /* 17: subssw */
13467       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
13468       /* 18: addssw */
13469       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
13470       /* 19: addssw */
13471       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
13472       /* 20: addssw */
13473       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
13474       /* 22: mullw */
13475       var77.i = (var65.i * var52.i) & 0xffff;
13476       /* 23: shrsw */
13477       var78.i = var77.i >> 8;
13478       /* 24: addssw */
13479       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
13480       /* 26: mullw */
13481       var80.i = (var65.i * var53.i) & 0xffff;
13482       /* 27: shrsw */
13483       var81.i = var80.i >> 8;
13484       /* 28: subssw */
13485       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
13486       /* 30: mullw */
13487       var83.i = (var66.i * var54.i) & 0xffff;
13488       /* 31: shrsw */
13489       var84.i = var83.i >> 8;
13490       /* 32: subssw */
13491       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
13492       /* 33: subssw */
13493       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
13494       /* 34: convssswb */
13495       var87 = ORC_CLAMP_SB (var74.i);
13496       /* 35: convssswb */
13497       var88 = ORC_CLAMP_SB (var86.i);
13498       /* 36: convssswb */
13499       var89 = ORC_CLAMP_SB (var79.i);
13500       /* 37: mergebw */
13501       {
13502         orc_union16 _dest;
13503         _dest.x2[0] = var61;
13504         _dest.x2[1] = var89;
13505         var90.i = _dest.i;
13506       }
13507       /* 38: mergebw */
13508       {
13509         orc_union16 _dest;
13510         _dest.x2[0] = var88;
13511         _dest.x2[1] = var87;
13512         var91.i = _dest.i;
13513       }
13514       /* 39: mergewl */
13515       {
13516         orc_union32 _dest;
13517         _dest.x2[0] = var90.i;
13518         _dest.x2[1] = var91.i;
13519         var92.i = _dest.i;
13520       }
13521       /* 41: addb */
13522       var56.x4[0] = var92.x4[0] + var55.x4[0];
13523       var56.x4[1] = var92.x4[1] + var55.x4[1];
13524       var56.x4[2] = var92.x4[2] + var55.x4[2];
13525       var56.x4[3] = var92.x4[3] + var55.x4[3];
13526       /* 42: storel */
13527       ptr0[i] = var56;
13528     }
13529   }
13530
13531 }
13532
13533 void
13534 cogorc_convert_AYUV_ABGR (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
13535     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
13536 {
13537   OrcExecutor _ex, *ex = &_ex;
13538   static volatile int p_inited = 0;
13539   static OrcProgram *p = 0;
13540   void (*func) (OrcExecutor *);
13541
13542   if (!p_inited) {
13543     orc_once_mutex_lock ();
13544     if (!p_inited) {
13545
13546       p = orc_program_new ();
13547       orc_program_set_2d (p);
13548       orc_program_set_name (p, "cogorc_convert_AYUV_ABGR");
13549       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_ABGR);
13550       orc_program_add_destination (p, 4, "d1");
13551       orc_program_add_source (p, 4, "s1");
13552       orc_program_add_constant (p, 1, 0x00000008, "c1");
13553       orc_program_add_constant (p, 4, 0x00000080, "c2");
13554       orc_program_add_constant (p, 4, 0x0000002a, "c3");
13555       orc_program_add_constant (p, 4, 0x00000067, "c4");
13556       orc_program_add_constant (p, 4, 0x00000004, "c5");
13557       orc_program_add_constant (p, 4, 0x00000064, "c6");
13558       orc_program_add_constant (p, 4, 0x00000068, "c7");
13559       orc_program_add_temporary (p, 2, "t1");
13560       orc_program_add_temporary (p, 2, "t2");
13561       orc_program_add_temporary (p, 1, "t3");
13562       orc_program_add_temporary (p, 1, "t4");
13563       orc_program_add_temporary (p, 1, "t5");
13564       orc_program_add_temporary (p, 1, "t6");
13565       orc_program_add_temporary (p, 2, "t7");
13566       orc_program_add_temporary (p, 2, "t8");
13567       orc_program_add_temporary (p, 2, "t9");
13568       orc_program_add_temporary (p, 2, "t10");
13569       orc_program_add_temporary (p, 2, "t11");
13570       orc_program_add_temporary (p, 2, "t12");
13571       orc_program_add_temporary (p, 1, "t13");
13572       orc_program_add_temporary (p, 1, "t14");
13573       orc_program_add_temporary (p, 1, "t15");
13574       orc_program_add_temporary (p, 4, "t16");
13575
13576       orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
13577           ORC_VAR_D1);
13578       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
13579           ORC_VAR_D1);
13580       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
13581           ORC_VAR_D1);
13582       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
13583           ORC_VAR_D1);
13584       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
13585           ORC_VAR_D1);
13586       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
13587           ORC_VAR_D1);
13588       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
13589           ORC_VAR_D1);
13590       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
13591           ORC_VAR_D1);
13592       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13593           ORC_VAR_D1);
13594       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
13595           ORC_VAR_D1);
13596       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
13597           ORC_VAR_D1);
13598       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
13599           ORC_VAR_D1);
13600       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13601           ORC_VAR_D1);
13602       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
13603           ORC_VAR_T1, ORC_VAR_D1);
13604       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
13605           ORC_VAR_T9, ORC_VAR_D1);
13606       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
13607           ORC_VAR_D1);
13608       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
13609           ORC_VAR_T8, ORC_VAR_D1);
13610       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
13611           ORC_VAR_D1);
13612       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13613           ORC_VAR_D1);
13614       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
13615           ORC_VAR_T1, ORC_VAR_D1);
13616       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
13617           ORC_VAR_D1);
13618       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13619           ORC_VAR_D1);
13620       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
13621           ORC_VAR_D1);
13622       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
13623           ORC_VAR_D1);
13624       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
13625           ORC_VAR_D1);
13626       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
13627           ORC_VAR_T1, ORC_VAR_D1);
13628       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
13629           ORC_VAR_T1, ORC_VAR_D1);
13630       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
13631           ORC_VAR_D1, ORC_VAR_D1);
13632       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
13633           ORC_VAR_D1, ORC_VAR_D1);
13634       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
13635           ORC_VAR_D1, ORC_VAR_D1);
13636       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T3,
13637           ORC_VAR_T15, ORC_VAR_D1);
13638       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T14,
13639           ORC_VAR_T13, ORC_VAR_D1);
13640       orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
13641           ORC_VAR_D1);
13642       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
13643           ORC_VAR_D1);
13644
13645       orc_program_compile (p);
13646     }
13647     p_inited = TRUE;
13648     orc_once_mutex_unlock ();
13649   }
13650   ex->program = p;
13651
13652   ex->n = n;
13653   ORC_EXECUTOR_M (ex) = m;
13654   ex->arrays[ORC_VAR_D1] = d1;
13655   ex->params[ORC_VAR_D1] = d1_stride;
13656   ex->arrays[ORC_VAR_S1] = (void *) s1;
13657   ex->params[ORC_VAR_S1] = s1_stride;
13658
13659   func = p->code_exec;
13660   func (ex);
13661 }
13662 #endif
13663
13664
13665 /* cogorc_convert_AYUV_RGBA */
13666 #ifdef DISABLE_ORC
13667 void
13668 cogorc_convert_AYUV_RGBA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
13669     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
13670 {
13671   int i;
13672   int j;
13673   orc_union32 *ORC_RESTRICT ptr0;
13674   const orc_union32 *ORC_RESTRICT ptr4;
13675   orc_union32 var48;
13676   orc_union32 var49;
13677   orc_union16 var50;
13678   orc_union16 var51;
13679   orc_union16 var52;
13680   orc_union16 var53;
13681   orc_union16 var54;
13682   orc_union32 var55;
13683   orc_union32 var56;
13684   orc_union32 var57;
13685   orc_union16 var58;
13686   orc_union16 var59;
13687   orc_int8 var60;
13688   orc_int8 var61;
13689   orc_int8 var62;
13690   orc_int8 var63;
13691   orc_union16 var64;
13692   orc_union16 var65;
13693   orc_union16 var66;
13694   orc_union16 var67;
13695   orc_union16 var68;
13696   orc_union16 var69;
13697   orc_union16 var70;
13698   orc_union16 var71;
13699   orc_union16 var72;
13700   orc_union16 var73;
13701   orc_union16 var74;
13702   orc_union16 var75;
13703   orc_union16 var76;
13704   orc_union16 var77;
13705   orc_union16 var78;
13706   orc_union16 var79;
13707   orc_union16 var80;
13708   orc_union16 var81;
13709   orc_union16 var82;
13710   orc_union16 var83;
13711   orc_union16 var84;
13712   orc_union16 var85;
13713   orc_union16 var86;
13714   orc_int8 var87;
13715   orc_int8 var88;
13716   orc_int8 var89;
13717   orc_union16 var90;
13718   orc_union16 var91;
13719   orc_union32 var92;
13720
13721   for (j = 0; j < m; j++) {
13722     ptr0 = ORC_PTR_OFFSET (d1, d1_stride * j);
13723     ptr4 = ORC_PTR_OFFSET (s1, s1_stride * j);
13724
13725     /* 1: loadpb */
13726     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13727     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13728     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13729     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13730     /* 9: loadpw */
13731     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
13732     /* 14: loadpw */
13733     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
13734     /* 21: loadpw */
13735     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
13736     /* 25: loadpw */
13737     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
13738     /* 29: loadpw */
13739     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
13740     /* 40: loadpb */
13741     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13742     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13743     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13744     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13745
13746     for (i = 0; i < n; i++) {
13747       /* 0: loadl */
13748       var48 = ptr4[i];
13749       /* 2: subb */
13750       var57.x4[0] = var48.x4[0] - var49.x4[0];
13751       var57.x4[1] = var48.x4[1] - var49.x4[1];
13752       var57.x4[2] = var48.x4[2] - var49.x4[2];
13753       var57.x4[3] = var48.x4[3] - var49.x4[3];
13754       /* 3: splitlw */
13755       {
13756         orc_union32 _src;
13757         _src.i = var57.i;
13758         var58.i = _src.x2[1];
13759         var59.i = _src.x2[0];
13760       }
13761       /* 4: splitwb */
13762       {
13763         orc_union16 _src;
13764         _src.i = var59.i;
13765         var60 = _src.x2[1];
13766         var61 = _src.x2[0];
13767       }
13768       /* 5: splitwb */
13769       {
13770         orc_union16 _src;
13771         _src.i = var58.i;
13772         var62 = _src.x2[1];
13773         var63 = _src.x2[0];
13774       }
13775       /* 6: convsbw */
13776       var64.i = var60;
13777       /* 7: convsbw */
13778       var65.i = var63;
13779       /* 8: convsbw */
13780       var66.i = var62;
13781       /* 10: mullw */
13782       var67.i = (var64.i * var50.i) & 0xffff;
13783       /* 11: shrsw */
13784       var68.i = var67.i >> 8;
13785       /* 12: addssw */
13786       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
13787       /* 13: addssw */
13788       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
13789       /* 15: mullw */
13790       var71.i = (var66.i * var51.i) & 0xffff;
13791       /* 16: shrsw */
13792       var72.i = var71.i >> 8;
13793       /* 17: subssw */
13794       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
13795       /* 18: addssw */
13796       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
13797       /* 19: addssw */
13798       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
13799       /* 20: addssw */
13800       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
13801       /* 22: mullw */
13802       var77.i = (var65.i * var52.i) & 0xffff;
13803       /* 23: shrsw */
13804       var78.i = var77.i >> 8;
13805       /* 24: addssw */
13806       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
13807       /* 26: mullw */
13808       var80.i = (var65.i * var53.i) & 0xffff;
13809       /* 27: shrsw */
13810       var81.i = var80.i >> 8;
13811       /* 28: subssw */
13812       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
13813       /* 30: mullw */
13814       var83.i = (var66.i * var54.i) & 0xffff;
13815       /* 31: shrsw */
13816       var84.i = var83.i >> 8;
13817       /* 32: subssw */
13818       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
13819       /* 33: subssw */
13820       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
13821       /* 34: convssswb */
13822       var87 = ORC_CLAMP_SB (var74.i);
13823       /* 35: convssswb */
13824       var88 = ORC_CLAMP_SB (var86.i);
13825       /* 36: convssswb */
13826       var89 = ORC_CLAMP_SB (var79.i);
13827       /* 37: mergebw */
13828       {
13829         orc_union16 _dest;
13830         _dest.x2[0] = var87;
13831         _dest.x2[1] = var88;
13832         var90.i = _dest.i;
13833       }
13834       /* 38: mergebw */
13835       {
13836         orc_union16 _dest;
13837         _dest.x2[0] = var89;
13838         _dest.x2[1] = var61;
13839         var91.i = _dest.i;
13840       }
13841       /* 39: mergewl */
13842       {
13843         orc_union32 _dest;
13844         _dest.x2[0] = var90.i;
13845         _dest.x2[1] = var91.i;
13846         var92.i = _dest.i;
13847       }
13848       /* 41: addb */
13849       var56.x4[0] = var92.x4[0] + var55.x4[0];
13850       var56.x4[1] = var92.x4[1] + var55.x4[1];
13851       var56.x4[2] = var92.x4[2] + var55.x4[2];
13852       var56.x4[3] = var92.x4[3] + var55.x4[3];
13853       /* 42: storel */
13854       ptr0[i] = var56;
13855     }
13856   }
13857
13858 }
13859
13860 #else
13861 static void
13862 _backup_cogorc_convert_AYUV_RGBA (OrcExecutor * ORC_RESTRICT ex)
13863 {
13864   int i;
13865   int j;
13866   int n = ex->n;
13867   int m = ex->params[ORC_VAR_A1];
13868   orc_union32 *ORC_RESTRICT ptr0;
13869   const orc_union32 *ORC_RESTRICT ptr4;
13870   orc_union32 var48;
13871   orc_union32 var49;
13872   orc_union16 var50;
13873   orc_union16 var51;
13874   orc_union16 var52;
13875   orc_union16 var53;
13876   orc_union16 var54;
13877   orc_union32 var55;
13878   orc_union32 var56;
13879   orc_union32 var57;
13880   orc_union16 var58;
13881   orc_union16 var59;
13882   orc_int8 var60;
13883   orc_int8 var61;
13884   orc_int8 var62;
13885   orc_int8 var63;
13886   orc_union16 var64;
13887   orc_union16 var65;
13888   orc_union16 var66;
13889   orc_union16 var67;
13890   orc_union16 var68;
13891   orc_union16 var69;
13892   orc_union16 var70;
13893   orc_union16 var71;
13894   orc_union16 var72;
13895   orc_union16 var73;
13896   orc_union16 var74;
13897   orc_union16 var75;
13898   orc_union16 var76;
13899   orc_union16 var77;
13900   orc_union16 var78;
13901   orc_union16 var79;
13902   orc_union16 var80;
13903   orc_union16 var81;
13904   orc_union16 var82;
13905   orc_union16 var83;
13906   orc_union16 var84;
13907   orc_union16 var85;
13908   orc_union16 var86;
13909   orc_int8 var87;
13910   orc_int8 var88;
13911   orc_int8 var89;
13912   orc_union16 var90;
13913   orc_union16 var91;
13914   orc_union32 var92;
13915
13916   for (j = 0; j < m; j++) {
13917     ptr0 = ORC_PTR_OFFSET (ex->arrays[0], ex->params[0] * j);
13918     ptr4 = ORC_PTR_OFFSET (ex->arrays[4], ex->params[4] * j);
13919
13920     /* 1: loadpb */
13921     var49.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13922     var49.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13923     var49.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13924     var49.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13925     /* 9: loadpw */
13926     var50.i = (int) 0x0000002a; /* 42 or 2.07508e-322f */
13927     /* 14: loadpw */
13928     var51.i = (int) 0x00000067; /* 103 or 5.08888e-322f */
13929     /* 21: loadpw */
13930     var52.i = (int) 0x00000004; /* 4 or 1.97626e-323f */
13931     /* 25: loadpw */
13932     var53.i = (int) 0x00000064; /* 100 or 4.94066e-322f */
13933     /* 29: loadpw */
13934     var54.i = (int) 0x00000068; /* 104 or 5.13828e-322f */
13935     /* 40: loadpb */
13936     var55.x4[0] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13937     var55.x4[1] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13938     var55.x4[2] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13939     var55.x4[3] = (int) 0x00000080;     /* 128 or 6.32404e-322f */
13940
13941     for (i = 0; i < n; i++) {
13942       /* 0: loadl */
13943       var48 = ptr4[i];
13944       /* 2: subb */
13945       var57.x4[0] = var48.x4[0] - var49.x4[0];
13946       var57.x4[1] = var48.x4[1] - var49.x4[1];
13947       var57.x4[2] = var48.x4[2] - var49.x4[2];
13948       var57.x4[3] = var48.x4[3] - var49.x4[3];
13949       /* 3: splitlw */
13950       {
13951         orc_union32 _src;
13952         _src.i = var57.i;
13953         var58.i = _src.x2[1];
13954         var59.i = _src.x2[0];
13955       }
13956       /* 4: splitwb */
13957       {
13958         orc_union16 _src;
13959         _src.i = var59.i;
13960         var60 = _src.x2[1];
13961         var61 = _src.x2[0];
13962       }
13963       /* 5: splitwb */
13964       {
13965         orc_union16 _src;
13966         _src.i = var58.i;
13967         var62 = _src.x2[1];
13968         var63 = _src.x2[0];
13969       }
13970       /* 6: convsbw */
13971       var64.i = var60;
13972       /* 7: convsbw */
13973       var65.i = var63;
13974       /* 8: convsbw */
13975       var66.i = var62;
13976       /* 10: mullw */
13977       var67.i = (var64.i * var50.i) & 0xffff;
13978       /* 11: shrsw */
13979       var68.i = var67.i >> 8;
13980       /* 12: addssw */
13981       var69.i = ORC_CLAMP_SW (var64.i + var68.i);
13982       /* 13: addssw */
13983       var70.i = ORC_CLAMP_SW (var69.i + var66.i);
13984       /* 15: mullw */
13985       var71.i = (var66.i * var51.i) & 0xffff;
13986       /* 16: shrsw */
13987       var72.i = var71.i >> 8;
13988       /* 17: subssw */
13989       var73.i = ORC_CLAMP_SW (var70.i - var72.i);
13990       /* 18: addssw */
13991       var74.i = ORC_CLAMP_SW (var73.i + var66.i);
13992       /* 19: addssw */
13993       var75.i = ORC_CLAMP_SW (var69.i + var65.i);
13994       /* 20: addssw */
13995       var76.i = ORC_CLAMP_SW (var75.i + var65.i);
13996       /* 22: mullw */
13997       var77.i = (var65.i * var52.i) & 0xffff;
13998       /* 23: shrsw */
13999       var78.i = var77.i >> 8;
14000       /* 24: addssw */
14001       var79.i = ORC_CLAMP_SW (var76.i + var78.i);
14002       /* 26: mullw */
14003       var80.i = (var65.i * var53.i) & 0xffff;
14004       /* 27: shrsw */
14005       var81.i = var80.i >> 8;
14006       /* 28: subssw */
14007       var82.i = ORC_CLAMP_SW (var69.i - var81.i);
14008       /* 30: mullw */
14009       var83.i = (var66.i * var54.i) & 0xffff;
14010       /* 31: shrsw */
14011       var84.i = var83.i >> 8;
14012       /* 32: subssw */
14013       var85.i = ORC_CLAMP_SW (var82.i - var84.i);
14014       /* 33: subssw */
14015       var86.i = ORC_CLAMP_SW (var85.i - var84.i);
14016       /* 34: convssswb */
14017       var87 = ORC_CLAMP_SB (var74.i);
14018       /* 35: convssswb */
14019       var88 = ORC_CLAMP_SB (var86.i);
14020       /* 36: convssswb */
14021       var89 = ORC_CLAMP_SB (var79.i);
14022       /* 37: mergebw */
14023       {
14024         orc_union16 _dest;
14025         _dest.x2[0] = var87;
14026         _dest.x2[1] = var88;
14027         var90.i = _dest.i;
14028       }
14029       /* 38: mergebw */
14030       {
14031         orc_union16 _dest;
14032         _dest.x2[0] = var89;
14033         _dest.x2[1] = var61;
14034         var91.i = _dest.i;
14035       }
14036       /* 39: mergewl */
14037       {
14038         orc_union32 _dest;
14039         _dest.x2[0] = var90.i;
14040         _dest.x2[1] = var91.i;
14041         var92.i = _dest.i;
14042       }
14043       /* 41: addb */
14044       var56.x4[0] = var92.x4[0] + var55.x4[0];
14045       var56.x4[1] = var92.x4[1] + var55.x4[1];
14046       var56.x4[2] = var92.x4[2] + var55.x4[2];
14047       var56.x4[3] = var92.x4[3] + var55.x4[3];
14048       /* 42: storel */
14049       ptr0[i] = var56;
14050     }
14051   }
14052
14053 }
14054
14055 void
14056 cogorc_convert_AYUV_RGBA (orc_uint32 * ORC_RESTRICT d1, int d1_stride,
14057     const orc_uint32 * ORC_RESTRICT s1, int s1_stride, int n, int m)
14058 {
14059   OrcExecutor _ex, *ex = &_ex;
14060   static volatile int p_inited = 0;
14061   static OrcProgram *p = 0;
14062   void (*func) (OrcExecutor *);
14063
14064   if (!p_inited) {
14065     orc_once_mutex_lock ();
14066     if (!p_inited) {
14067
14068       p = orc_program_new ();
14069       orc_program_set_2d (p);
14070       orc_program_set_name (p, "cogorc_convert_AYUV_RGBA");
14071       orc_program_set_backup_function (p, _backup_cogorc_convert_AYUV_RGBA);
14072       orc_program_add_destination (p, 4, "d1");
14073       orc_program_add_source (p, 4, "s1");
14074       orc_program_add_constant (p, 1, 0x00000008, "c1");
14075       orc_program_add_constant (p, 4, 0x00000080, "c2");
14076       orc_program_add_constant (p, 4, 0x0000002a, "c3");
14077       orc_program_add_constant (p, 4, 0x00000067, "c4");
14078       orc_program_add_constant (p, 4, 0x00000004, "c5");
14079       orc_program_add_constant (p, 4, 0x00000064, "c6");
14080       orc_program_add_constant (p, 4, 0x00000068, "c7");
14081       orc_program_add_temporary (p, 2, "t1");
14082       orc_program_add_temporary (p, 2, "t2");
14083       orc_program_add_temporary (p, 1, "t3");
14084       orc_program_add_temporary (p, 1, "t4");
14085       orc_program_add_temporary (p, 1, "t5");
14086       orc_program_add_temporary (p, 1, "t6");
14087       orc_program_add_temporary (p, 2, "t7");
14088       orc_program_add_temporary (p, 2, "t8");
14089       orc_program_add_temporary (p, 2, "t9");
14090       orc_program_add_temporary (p, 2, "t10");
14091       orc_program_add_temporary (p, 2, "t11");
14092       orc_program_add_temporary (p, 2, "t12");
14093       orc_program_add_temporary (p, 1, "t13");
14094       orc_program_add_temporary (p, 1, "t14");
14095       orc_program_add_temporary (p, 1, "t15");
14096       orc_program_add_temporary (p, 4, "t16");
14097
14098       orc_program_append_2 (p, "subb", 2, 47, ORC_VAR_S1, ORC_VAR_C2,
14099           ORC_VAR_D1);
14100       orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T1, ORC_VAR_T2, 47,
14101           ORC_VAR_D1);
14102       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_T2,
14103           ORC_VAR_D1);
14104       orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T6, ORC_VAR_T5, ORC_VAR_T1,
14105           ORC_VAR_D1);
14106       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_D1,
14107           ORC_VAR_D1);
14108       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_D1,
14109           ORC_VAR_D1);
14110       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T9, ORC_VAR_T6, ORC_VAR_D1,
14111           ORC_VAR_D1);
14112       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C3,
14113           ORC_VAR_D1);
14114       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14115           ORC_VAR_D1);
14116       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
14117           ORC_VAR_D1);
14118       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T7, ORC_VAR_T9,
14119           ORC_VAR_D1);
14120       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C4,
14121           ORC_VAR_D1);
14122       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14123           ORC_VAR_D1);
14124       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T10, ORC_VAR_T10,
14125           ORC_VAR_T1, ORC_VAR_D1);
14126       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
14127           ORC_VAR_T9, ORC_VAR_D1);
14128       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T7, ORC_VAR_T8,
14129           ORC_VAR_D1);
14130       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
14131           ORC_VAR_T8, ORC_VAR_D1);
14132       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C5,
14133           ORC_VAR_D1);
14134       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14135           ORC_VAR_D1);
14136       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T12, ORC_VAR_T12,
14137           ORC_VAR_T1, ORC_VAR_D1);
14138       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T8, ORC_VAR_C6,
14139           ORC_VAR_D1);
14140       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14141           ORC_VAR_D1);
14142       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T7, ORC_VAR_T1,
14143           ORC_VAR_D1);
14144       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T9, ORC_VAR_C7,
14145           ORC_VAR_D1);
14146       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14147           ORC_VAR_D1);
14148       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
14149           ORC_VAR_T1, ORC_VAR_D1);
14150       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T11, ORC_VAR_T11,
14151           ORC_VAR_T1, ORC_VAR_D1);
14152       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
14153           ORC_VAR_D1, ORC_VAR_D1);
14154       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T14, ORC_VAR_T11,
14155           ORC_VAR_D1, ORC_VAR_D1);
14156       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T15, ORC_VAR_T12,
14157           ORC_VAR_D1, ORC_VAR_D1);
14158       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
14159           ORC_VAR_T14, ORC_VAR_D1);
14160       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T15,
14161           ORC_VAR_T3, ORC_VAR_D1);
14162       orc_program_append_2 (p, "mergewl", 0, 47, ORC_VAR_T1, ORC_VAR_T2,
14163           ORC_VAR_D1);
14164       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, 47, ORC_VAR_C2,
14165           ORC_VAR_D1);
14166
14167       orc_program_compile (p);
14168     }
14169     p_inited = TRUE;
14170     orc_once_mutex_unlock ();
14171   }
14172   ex->program = p;
14173
14174   ex->n = n;
14175   ORC_EXECUTOR_M (ex) = m;
14176   ex->arrays[ORC_VAR_D1] = d1;
14177   ex->params[ORC_VAR_D1] = d1_stride;
14178   ex->arrays[ORC_VAR_S1] = (void *) s1;
14179   ex->params[ORC_VAR_S1] = s1_stride;
14180
14181   func = p->code_exec;
14182   func (ex);
14183 }
14184 #endif
14185
14186
14187 /* cogorc_convert_I420_BGRA */
14188 #ifdef DISABLE_ORC
14189 void
14190 cogorc_convert_I420_BGRA (orc_uint32 * ORC_RESTRICT d1,
14191     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
14192     const orc_uint8 * ORC_RESTRICT s3, int n)
14193 {
14194   int i;
14195   orc_union32 *ORC_RESTRICT ptr0;
14196   const orc_int8 *ORC_RESTRICT ptr4;
14197   const orc_int8 *ORC_RESTRICT ptr5;
14198   const orc_int8 *ORC_RESTRICT ptr6;
14199   orc_int8 var45;
14200   orc_int8 var46;
14201   orc_int8 var47;
14202   orc_int8 var48;
14203   orc_union16 var49;
14204   orc_union16 var50;
14205   orc_union16 var51;
14206   orc_union16 var52;
14207   orc_union16 var53;
14208   orc_int8 var54;
14209   orc_union32 var55;
14210   orc_union32 var56;
14211   orc_int8 var57;
14212   orc_union16 var58;
14213   orc_int8 var59;
14214   orc_int8 var60;
14215   orc_union16 var61;
14216   orc_int8 var62;
14217   orc_int8 var63;
14218   orc_union16 var64;
14219   orc_union16 var65;
14220   orc_union16 var66;
14221   orc_union16 var67;
14222   orc_union16 var68;
14223   orc_union16 var69;
14224   orc_union16 var70;
14225   orc_union16 var71;
14226   orc_union16 var72;
14227   orc_union16 var73;
14228   orc_union16 var74;
14229   orc_union16 var75;
14230   orc_union16 var76;
14231   orc_union16 var77;
14232   orc_union16 var78;
14233   orc_union16 var79;
14234   orc_union16 var80;
14235   orc_union16 var81;
14236   orc_union16 var82;
14237   orc_union16 var83;
14238   orc_union16 var84;
14239   orc_int8 var85;
14240   orc_int8 var86;
14241   orc_int8 var87;
14242   orc_union16 var88;
14243   orc_union16 var89;
14244   orc_union32 var90;
14245
14246   ptr0 = (orc_union32 *) d1;
14247   ptr4 = (orc_int8 *) s1;
14248   ptr5 = (orc_int8 *) s2;
14249   ptr6 = (orc_int8 *) s3;
14250
14251   /* 1: loadpb */
14252   var46 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14253   /* 5: loadpb */
14254   var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14255   /* 9: loadpb */
14256   var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14257   /* 12: loadpw */
14258   var49.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
14259   /* 17: loadpw */
14260   var50.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
14261   /* 24: loadpw */
14262   var51.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
14263   /* 28: loadpw */
14264   var52.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
14265   /* 32: loadpw */
14266   var53.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
14267   /* 41: loadpb */
14268   var54 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
14269   /* 44: loadpb */
14270   var55.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14271   var55.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14272   var55.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14273   var55.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14274
14275   for (i = 0; i < n; i++) {
14276     /* 0: loadb */
14277     var45 = ptr4[i];
14278     /* 2: subb */
14279     var57 = var45 - var46;
14280     /* 3: convsbw */
14281     var58.i = var57;
14282     /* 4: loadupib */
14283     var59 =
14284         (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
14285         1) >> 1 : ptr5[i >> 1];
14286     /* 6: subb */
14287     var60 = var59 - var47;
14288     /* 7: convsbw */
14289     var61.i = var60;
14290     /* 8: loadupib */
14291     var62 =
14292         (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
14293         1) >> 1 : ptr6[i >> 1];
14294     /* 10: subb */
14295     var63 = var62 - var48;
14296     /* 11: convsbw */
14297     var64.i = var63;
14298     /* 13: mullw */
14299     var65.i = (var58.i * var49.i) & 0xffff;
14300     /* 14: shrsw */
14301     var66.i = var65.i >> 8;
14302     /* 15: addssw */
14303     var67.i = ORC_CLAMP_SW (var58.i + var66.i);
14304     /* 16: addssw */
14305     var68.i = ORC_CLAMP_SW (var67.i + var64.i);
14306     /* 18: mullw */
14307     var69.i = (var64.i * var50.i) & 0xffff;
14308     /* 19: shrsw */
14309     var70.i = var69.i >> 8;
14310     /* 20: subssw */
14311     var71.i = ORC_CLAMP_SW (var68.i - var70.i);
14312     /* 21: addssw */
14313     var72.i = ORC_CLAMP_SW (var71.i + var64.i);
14314     /* 22: addssw */
14315     var73.i = ORC_CLAMP_SW (var67.i + var61.i);
14316     /* 23: addssw */
14317     var74.i = ORC_CLAMP_SW (var73.i + var61.i);
14318     /* 25: mullw */
14319     var75.i = (var61.i * var51.i) & 0xffff;
14320     /* 26: shrsw */
14321     var76.i = var75.i >> 8;
14322     /* 27: addssw */
14323     var77.i = ORC_CLAMP_SW (var74.i + var76.i);
14324     /* 29: mullw */
14325     var78.i = (var61.i * var52.i) & 0xffff;
14326     /* 30: shrsw */
14327     var79.i = var78.i >> 8;
14328     /* 31: subssw */
14329     var80.i = ORC_CLAMP_SW (var67.i - var79.i);
14330     /* 33: mullw */
14331     var81.i = (var64.i * var53.i) & 0xffff;
14332     /* 34: shrsw */
14333     var82.i = var81.i >> 8;
14334     /* 35: subssw */
14335     var83.i = ORC_CLAMP_SW (var80.i - var82.i);
14336     /* 36: subssw */
14337     var84.i = ORC_CLAMP_SW (var83.i - var82.i);
14338     /* 37: convssswb */
14339     var85 = ORC_CLAMP_SB (var72.i);
14340     /* 38: convssswb */
14341     var86 = ORC_CLAMP_SB (var84.i);
14342     /* 39: convssswb */
14343     var87 = ORC_CLAMP_SB (var77.i);
14344     /* 40: mergebw */
14345     {
14346       orc_union16 _dest;
14347       _dest.x2[0] = var87;
14348       _dest.x2[1] = var86;
14349       var88.i = _dest.i;
14350     }
14351     /* 42: mergebw */
14352     {
14353       orc_union16 _dest;
14354       _dest.x2[0] = var85;
14355       _dest.x2[1] = var54;
14356       var89.i = _dest.i;
14357     }
14358     /* 43: mergewl */
14359     {
14360       orc_union32 _dest;
14361       _dest.x2[0] = var88.i;
14362       _dest.x2[1] = var89.i;
14363       var90.i = _dest.i;
14364     }
14365     /* 45: addb */
14366     var56.x4[0] = var90.x4[0] + var55.x4[0];
14367     var56.x4[1] = var90.x4[1] + var55.x4[1];
14368     var56.x4[2] = var90.x4[2] + var55.x4[2];
14369     var56.x4[3] = var90.x4[3] + var55.x4[3];
14370     /* 46: storel */
14371     ptr0[i] = var56;
14372   }
14373
14374 }
14375
14376 #else
14377 static void
14378 _backup_cogorc_convert_I420_BGRA (OrcExecutor * ORC_RESTRICT ex)
14379 {
14380   int i;
14381   int n = ex->n;
14382   orc_union32 *ORC_RESTRICT ptr0;
14383   const orc_int8 *ORC_RESTRICT ptr4;
14384   const orc_int8 *ORC_RESTRICT ptr5;
14385   const orc_int8 *ORC_RESTRICT ptr6;
14386   orc_int8 var45;
14387   orc_int8 var46;
14388   orc_int8 var47;
14389   orc_int8 var48;
14390   orc_union16 var49;
14391   orc_union16 var50;
14392   orc_union16 var51;
14393   orc_union16 var52;
14394   orc_union16 var53;
14395   orc_int8 var54;
14396   orc_union32 var55;
14397   orc_union32 var56;
14398   orc_int8 var57;
14399   orc_union16 var58;
14400   orc_int8 var59;
14401   orc_int8 var60;
14402   orc_union16 var61;
14403   orc_int8 var62;
14404   orc_int8 var63;
14405   orc_union16 var64;
14406   orc_union16 var65;
14407   orc_union16 var66;
14408   orc_union16 var67;
14409   orc_union16 var68;
14410   orc_union16 var69;
14411   orc_union16 var70;
14412   orc_union16 var71;
14413   orc_union16 var72;
14414   orc_union16 var73;
14415   orc_union16 var74;
14416   orc_union16 var75;
14417   orc_union16 var76;
14418   orc_union16 var77;
14419   orc_union16 var78;
14420   orc_union16 var79;
14421   orc_union16 var80;
14422   orc_union16 var81;
14423   orc_union16 var82;
14424   orc_union16 var83;
14425   orc_union16 var84;
14426   orc_int8 var85;
14427   orc_int8 var86;
14428   orc_int8 var87;
14429   orc_union16 var88;
14430   orc_union16 var89;
14431   orc_union32 var90;
14432
14433   ptr0 = (orc_union32 *) ex->arrays[0];
14434   ptr4 = (orc_int8 *) ex->arrays[4];
14435   ptr5 = (orc_int8 *) ex->arrays[5];
14436   ptr6 = (orc_int8 *) ex->arrays[6];
14437
14438   /* 1: loadpb */
14439   var46 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14440   /* 5: loadpb */
14441   var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14442   /* 9: loadpb */
14443   var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14444   /* 12: loadpw */
14445   var49.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
14446   /* 17: loadpw */
14447   var50.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
14448   /* 24: loadpw */
14449   var51.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
14450   /* 28: loadpw */
14451   var52.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
14452   /* 32: loadpw */
14453   var53.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
14454   /* 41: loadpb */
14455   var54 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
14456   /* 44: loadpb */
14457   var55.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14458   var55.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14459   var55.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14460   var55.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14461
14462   for (i = 0; i < n; i++) {
14463     /* 0: loadb */
14464     var45 = ptr4[i];
14465     /* 2: subb */
14466     var57 = var45 - var46;
14467     /* 3: convsbw */
14468     var58.i = var57;
14469     /* 4: loadupib */
14470     var59 =
14471         (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
14472         1) >> 1 : ptr5[i >> 1];
14473     /* 6: subb */
14474     var60 = var59 - var47;
14475     /* 7: convsbw */
14476     var61.i = var60;
14477     /* 8: loadupib */
14478     var62 =
14479         (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
14480         1) >> 1 : ptr6[i >> 1];
14481     /* 10: subb */
14482     var63 = var62 - var48;
14483     /* 11: convsbw */
14484     var64.i = var63;
14485     /* 13: mullw */
14486     var65.i = (var58.i * var49.i) & 0xffff;
14487     /* 14: shrsw */
14488     var66.i = var65.i >> 8;
14489     /* 15: addssw */
14490     var67.i = ORC_CLAMP_SW (var58.i + var66.i);
14491     /* 16: addssw */
14492     var68.i = ORC_CLAMP_SW (var67.i + var64.i);
14493     /* 18: mullw */
14494     var69.i = (var64.i * var50.i) & 0xffff;
14495     /* 19: shrsw */
14496     var70.i = var69.i >> 8;
14497     /* 20: subssw */
14498     var71.i = ORC_CLAMP_SW (var68.i - var70.i);
14499     /* 21: addssw */
14500     var72.i = ORC_CLAMP_SW (var71.i + var64.i);
14501     /* 22: addssw */
14502     var73.i = ORC_CLAMP_SW (var67.i + var61.i);
14503     /* 23: addssw */
14504     var74.i = ORC_CLAMP_SW (var73.i + var61.i);
14505     /* 25: mullw */
14506     var75.i = (var61.i * var51.i) & 0xffff;
14507     /* 26: shrsw */
14508     var76.i = var75.i >> 8;
14509     /* 27: addssw */
14510     var77.i = ORC_CLAMP_SW (var74.i + var76.i);
14511     /* 29: mullw */
14512     var78.i = (var61.i * var52.i) & 0xffff;
14513     /* 30: shrsw */
14514     var79.i = var78.i >> 8;
14515     /* 31: subssw */
14516     var80.i = ORC_CLAMP_SW (var67.i - var79.i);
14517     /* 33: mullw */
14518     var81.i = (var64.i * var53.i) & 0xffff;
14519     /* 34: shrsw */
14520     var82.i = var81.i >> 8;
14521     /* 35: subssw */
14522     var83.i = ORC_CLAMP_SW (var80.i - var82.i);
14523     /* 36: subssw */
14524     var84.i = ORC_CLAMP_SW (var83.i - var82.i);
14525     /* 37: convssswb */
14526     var85 = ORC_CLAMP_SB (var72.i);
14527     /* 38: convssswb */
14528     var86 = ORC_CLAMP_SB (var84.i);
14529     /* 39: convssswb */
14530     var87 = ORC_CLAMP_SB (var77.i);
14531     /* 40: mergebw */
14532     {
14533       orc_union16 _dest;
14534       _dest.x2[0] = var87;
14535       _dest.x2[1] = var86;
14536       var88.i = _dest.i;
14537     }
14538     /* 42: mergebw */
14539     {
14540       orc_union16 _dest;
14541       _dest.x2[0] = var85;
14542       _dest.x2[1] = var54;
14543       var89.i = _dest.i;
14544     }
14545     /* 43: mergewl */
14546     {
14547       orc_union32 _dest;
14548       _dest.x2[0] = var88.i;
14549       _dest.x2[1] = var89.i;
14550       var90.i = _dest.i;
14551     }
14552     /* 45: addb */
14553     var56.x4[0] = var90.x4[0] + var55.x4[0];
14554     var56.x4[1] = var90.x4[1] + var55.x4[1];
14555     var56.x4[2] = var90.x4[2] + var55.x4[2];
14556     var56.x4[3] = var90.x4[3] + var55.x4[3];
14557     /* 46: storel */
14558     ptr0[i] = var56;
14559   }
14560
14561 }
14562
14563 void
14564 cogorc_convert_I420_BGRA (orc_uint32 * ORC_RESTRICT d1,
14565     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
14566     const orc_uint8 * ORC_RESTRICT s3, int n)
14567 {
14568   OrcExecutor _ex, *ex = &_ex;
14569   static volatile int p_inited = 0;
14570   static OrcProgram *p = 0;
14571   void (*func) (OrcExecutor *);
14572
14573   if (!p_inited) {
14574     orc_once_mutex_lock ();
14575     if (!p_inited) {
14576
14577       p = orc_program_new ();
14578       orc_program_set_name (p, "cogorc_convert_I420_BGRA");
14579       orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA);
14580       orc_program_add_destination (p, 4, "d1");
14581       orc_program_add_source (p, 1, "s1");
14582       orc_program_add_source (p, 1, "s2");
14583       orc_program_add_source (p, 1, "s3");
14584       orc_program_add_constant (p, 1, 0x00000008, "c1");
14585       orc_program_add_constant (p, 1, 0x00000080, "c2");
14586       orc_program_add_constant (p, 4, 0x0000002a, "c3");
14587       orc_program_add_constant (p, 4, 0x00000067, "c4");
14588       orc_program_add_constant (p, 4, 0x00000004, "c5");
14589       orc_program_add_constant (p, 4, 0x00000064, "c6");
14590       orc_program_add_constant (p, 4, 0x00000068, "c7");
14591       orc_program_add_constant (p, 4, 0x000000ff, "c8");
14592       orc_program_add_temporary (p, 2, "t1");
14593       orc_program_add_temporary (p, 2, "t2");
14594       orc_program_add_temporary (p, 1, "t3");
14595       orc_program_add_temporary (p, 2, "t4");
14596       orc_program_add_temporary (p, 2, "t5");
14597       orc_program_add_temporary (p, 2, "t6");
14598       orc_program_add_temporary (p, 2, "t7");
14599       orc_program_add_temporary (p, 2, "t8");
14600       orc_program_add_temporary (p, 2, "t9");
14601       orc_program_add_temporary (p, 1, "t10");
14602       orc_program_add_temporary (p, 1, "t11");
14603       orc_program_add_temporary (p, 1, "t12");
14604       orc_program_add_temporary (p, 4, "t13");
14605
14606       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
14607           ORC_VAR_D1);
14608       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_D1,
14609           ORC_VAR_D1);
14610       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
14611           ORC_VAR_D1, ORC_VAR_D1);
14612       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
14613           ORC_VAR_D1);
14614       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
14615           ORC_VAR_D1);
14616       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S3,
14617           ORC_VAR_D1, ORC_VAR_D1);
14618       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
14619           ORC_VAR_D1);
14620       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
14621           ORC_VAR_D1);
14622       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T4, ORC_VAR_C3,
14623           ORC_VAR_D1);
14624       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14625           ORC_VAR_D1);
14626       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_T1,
14627           ORC_VAR_D1);
14628       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T4, ORC_VAR_T6,
14629           ORC_VAR_D1);
14630       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C4,
14631           ORC_VAR_D1);
14632       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14633           ORC_VAR_D1);
14634       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T1,
14635           ORC_VAR_D1);
14636       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_T6,
14637           ORC_VAR_D1);
14638       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T4, ORC_VAR_T5,
14639           ORC_VAR_D1);
14640       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T5,
14641           ORC_VAR_D1);
14642       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C5,
14643           ORC_VAR_D1);
14644       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14645           ORC_VAR_D1);
14646       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
14647           ORC_VAR_D1);
14648       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C6,
14649           ORC_VAR_D1);
14650       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14651           ORC_VAR_D1);
14652       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T4, ORC_VAR_T1,
14653           ORC_VAR_D1);
14654       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C7,
14655           ORC_VAR_D1);
14656       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
14657           ORC_VAR_D1);
14658       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
14659           ORC_VAR_D1);
14660       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
14661           ORC_VAR_D1);
14662       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T10, ORC_VAR_T7,
14663           ORC_VAR_D1, ORC_VAR_D1);
14664       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
14665           ORC_VAR_D1, ORC_VAR_D1);
14666       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
14667           ORC_VAR_D1, ORC_VAR_D1);
14668       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T12,
14669           ORC_VAR_T11, ORC_VAR_D1);
14670       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T10,
14671           ORC_VAR_C8, ORC_VAR_D1);
14672       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T13, ORC_VAR_T1,
14673           ORC_VAR_T2, ORC_VAR_D1);
14674       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T13, ORC_VAR_C2,
14675           ORC_VAR_D1);
14676
14677       orc_program_compile (p);
14678     }
14679     p_inited = TRUE;
14680     orc_once_mutex_unlock ();
14681   }
14682   ex->program = p;
14683
14684   ex->n = n;
14685   ex->arrays[ORC_VAR_D1] = d1;
14686   ex->arrays[ORC_VAR_S1] = (void *) s1;
14687   ex->arrays[ORC_VAR_S2] = (void *) s2;
14688   ex->arrays[ORC_VAR_S3] = (void *) s3;
14689
14690   func = p->code_exec;
14691   func (ex);
14692 }
14693 #endif
14694
14695
14696 /* cogorc_convert_I420_BGRA_avg */
14697 #ifdef DISABLE_ORC
14698 void
14699 cogorc_convert_I420_BGRA_avg (orc_uint32 * ORC_RESTRICT d1,
14700     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
14701     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
14702     const orc_uint8 * ORC_RESTRICT s5, int n)
14703 {
14704   int i;
14705   orc_union32 *ORC_RESTRICT ptr0;
14706   const orc_int8 *ORC_RESTRICT ptr4;
14707   const orc_int8 *ORC_RESTRICT ptr5;
14708   const orc_int8 *ORC_RESTRICT ptr6;
14709   const orc_int8 *ORC_RESTRICT ptr7;
14710   const orc_int8 *ORC_RESTRICT ptr8;
14711   orc_int8 var46;
14712   orc_int8 var47;
14713   orc_int8 var48;
14714   orc_int8 var49;
14715   orc_union16 var50;
14716   orc_union16 var51;
14717   orc_union16 var52;
14718   orc_union16 var53;
14719   orc_union16 var54;
14720   orc_int8 var55;
14721   orc_union32 var56;
14722   orc_union32 var57;
14723   orc_int8 var58;
14724   orc_union16 var59;
14725   orc_int8 var60;
14726   orc_int8 var61;
14727   orc_int8 var62;
14728   orc_int8 var63;
14729   orc_union16 var64;
14730   orc_int8 var65;
14731   orc_int8 var66;
14732   orc_int8 var67;
14733   orc_int8 var68;
14734   orc_union16 var69;
14735   orc_union16 var70;
14736   orc_union16 var71;
14737   orc_union16 var72;
14738   orc_union16 var73;
14739   orc_union16 var74;
14740   orc_union16 var75;
14741   orc_union16 var76;
14742   orc_union16 var77;
14743   orc_union16 var78;
14744   orc_union16 var79;
14745   orc_union16 var80;
14746   orc_union16 var81;
14747   orc_union16 var82;
14748   orc_union16 var83;
14749   orc_union16 var84;
14750   orc_union16 var85;
14751   orc_union16 var86;
14752   orc_union16 var87;
14753   orc_union16 var88;
14754   orc_union16 var89;
14755   orc_int8 var90;
14756   orc_int8 var91;
14757   orc_int8 var92;
14758   orc_union16 var93;
14759   orc_union16 var94;
14760   orc_union32 var95;
14761
14762   ptr0 = (orc_union32 *) d1;
14763   ptr4 = (orc_int8 *) s1;
14764   ptr5 = (orc_int8 *) s2;
14765   ptr6 = (orc_int8 *) s3;
14766   ptr7 = (orc_int8 *) s4;
14767   ptr8 = (orc_int8 *) s5;
14768
14769   /* 1: loadpb */
14770   var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14771   /* 7: loadpb */
14772   var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14773   /* 13: loadpb */
14774   var49 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14775   /* 16: loadpw */
14776   var50.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
14777   /* 21: loadpw */
14778   var51.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
14779   /* 28: loadpw */
14780   var52.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
14781   /* 32: loadpw */
14782   var53.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
14783   /* 36: loadpw */
14784   var54.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
14785   /* 45: loadpb */
14786   var55 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
14787   /* 48: loadpb */
14788   var56.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14789   var56.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14790   var56.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14791   var56.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14792
14793   for (i = 0; i < n; i++) {
14794     /* 0: loadb */
14795     var46 = ptr4[i];
14796     /* 2: subb */
14797     var58 = var46 - var47;
14798     /* 3: convsbw */
14799     var59.i = var58;
14800     /* 4: loadupib */
14801     var60 =
14802         (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
14803         1) >> 1 : ptr5[i >> 1];
14804     /* 5: loadupib */
14805     var61 =
14806         (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
14807         1) >> 1 : ptr6[i >> 1];
14808     /* 6: avgub */
14809     var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
14810     /* 8: subb */
14811     var63 = var62 - var48;
14812     /* 9: convsbw */
14813     var64.i = var63;
14814     /* 10: loadupib */
14815     var65 =
14816         (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
14817         1) >> 1 : ptr7[i >> 1];
14818     /* 11: loadupib */
14819     var66 =
14820         (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
14821         1) >> 1 : ptr8[i >> 1];
14822     /* 12: avgub */
14823     var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
14824     /* 14: subb */
14825     var68 = var67 - var49;
14826     /* 15: convsbw */
14827     var69.i = var68;
14828     /* 17: mullw */
14829     var70.i = (var59.i * var50.i) & 0xffff;
14830     /* 18: shrsw */
14831     var71.i = var70.i >> 8;
14832     /* 19: addssw */
14833     var72.i = ORC_CLAMP_SW (var59.i + var71.i);
14834     /* 20: addssw */
14835     var73.i = ORC_CLAMP_SW (var72.i + var69.i);
14836     /* 22: mullw */
14837     var74.i = (var69.i * var51.i) & 0xffff;
14838     /* 23: shrsw */
14839     var75.i = var74.i >> 8;
14840     /* 24: subssw */
14841     var76.i = ORC_CLAMP_SW (var73.i - var75.i);
14842     /* 25: addssw */
14843     var77.i = ORC_CLAMP_SW (var76.i + var69.i);
14844     /* 26: addssw */
14845     var78.i = ORC_CLAMP_SW (var72.i + var64.i);
14846     /* 27: addssw */
14847     var79.i = ORC_CLAMP_SW (var78.i + var64.i);
14848     /* 29: mullw */
14849     var80.i = (var64.i * var52.i) & 0xffff;
14850     /* 30: shrsw */
14851     var81.i = var80.i >> 8;
14852     /* 31: addssw */
14853     var82.i = ORC_CLAMP_SW (var79.i + var81.i);
14854     /* 33: mullw */
14855     var83.i = (var64.i * var53.i) & 0xffff;
14856     /* 34: shrsw */
14857     var84.i = var83.i >> 8;
14858     /* 35: subssw */
14859     var85.i = ORC_CLAMP_SW (var72.i - var84.i);
14860     /* 37: mullw */
14861     var86.i = (var69.i * var54.i) & 0xffff;
14862     /* 38: shrsw */
14863     var87.i = var86.i >> 8;
14864     /* 39: subssw */
14865     var88.i = ORC_CLAMP_SW (var85.i - var87.i);
14866     /* 40: subssw */
14867     var89.i = ORC_CLAMP_SW (var88.i - var87.i);
14868     /* 41: convssswb */
14869     var90 = ORC_CLAMP_SB (var77.i);
14870     /* 42: convssswb */
14871     var91 = ORC_CLAMP_SB (var89.i);
14872     /* 43: convssswb */
14873     var92 = ORC_CLAMP_SB (var82.i);
14874     /* 44: mergebw */
14875     {
14876       orc_union16 _dest;
14877       _dest.x2[0] = var92;
14878       _dest.x2[1] = var91;
14879       var93.i = _dest.i;
14880     }
14881     /* 46: mergebw */
14882     {
14883       orc_union16 _dest;
14884       _dest.x2[0] = var90;
14885       _dest.x2[1] = var55;
14886       var94.i = _dest.i;
14887     }
14888     /* 47: mergewl */
14889     {
14890       orc_union32 _dest;
14891       _dest.x2[0] = var93.i;
14892       _dest.x2[1] = var94.i;
14893       var95.i = _dest.i;
14894     }
14895     /* 49: addb */
14896     var57.x4[0] = var95.x4[0] + var56.x4[0];
14897     var57.x4[1] = var95.x4[1] + var56.x4[1];
14898     var57.x4[2] = var95.x4[2] + var56.x4[2];
14899     var57.x4[3] = var95.x4[3] + var56.x4[3];
14900     /* 50: storel */
14901     ptr0[i] = var57;
14902   }
14903
14904 }
14905
14906 #else
14907 static void
14908 _backup_cogorc_convert_I420_BGRA_avg (OrcExecutor * ORC_RESTRICT ex)
14909 {
14910   int i;
14911   int n = ex->n;
14912   orc_union32 *ORC_RESTRICT ptr0;
14913   const orc_int8 *ORC_RESTRICT ptr4;
14914   const orc_int8 *ORC_RESTRICT ptr5;
14915   const orc_int8 *ORC_RESTRICT ptr6;
14916   const orc_int8 *ORC_RESTRICT ptr7;
14917   const orc_int8 *ORC_RESTRICT ptr8;
14918   orc_int8 var46;
14919   orc_int8 var47;
14920   orc_int8 var48;
14921   orc_int8 var49;
14922   orc_union16 var50;
14923   orc_union16 var51;
14924   orc_union16 var52;
14925   orc_union16 var53;
14926   orc_union16 var54;
14927   orc_int8 var55;
14928   orc_union32 var56;
14929   orc_union32 var57;
14930   orc_int8 var58;
14931   orc_union16 var59;
14932   orc_int8 var60;
14933   orc_int8 var61;
14934   orc_int8 var62;
14935   orc_int8 var63;
14936   orc_union16 var64;
14937   orc_int8 var65;
14938   orc_int8 var66;
14939   orc_int8 var67;
14940   orc_int8 var68;
14941   orc_union16 var69;
14942   orc_union16 var70;
14943   orc_union16 var71;
14944   orc_union16 var72;
14945   orc_union16 var73;
14946   orc_union16 var74;
14947   orc_union16 var75;
14948   orc_union16 var76;
14949   orc_union16 var77;
14950   orc_union16 var78;
14951   orc_union16 var79;
14952   orc_union16 var80;
14953   orc_union16 var81;
14954   orc_union16 var82;
14955   orc_union16 var83;
14956   orc_union16 var84;
14957   orc_union16 var85;
14958   orc_union16 var86;
14959   orc_union16 var87;
14960   orc_union16 var88;
14961   orc_union16 var89;
14962   orc_int8 var90;
14963   orc_int8 var91;
14964   orc_int8 var92;
14965   orc_union16 var93;
14966   orc_union16 var94;
14967   orc_union32 var95;
14968
14969   ptr0 = (orc_union32 *) ex->arrays[0];
14970   ptr4 = (orc_int8 *) ex->arrays[4];
14971   ptr5 = (orc_int8 *) ex->arrays[5];
14972   ptr6 = (orc_int8 *) ex->arrays[6];
14973   ptr7 = (orc_int8 *) ex->arrays[7];
14974   ptr8 = (orc_int8 *) ex->arrays[8];
14975
14976   /* 1: loadpb */
14977   var47 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14978   /* 7: loadpb */
14979   var48 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14980   /* 13: loadpb */
14981   var49 = (int) 0x00000080;     /* 128 or 6.32404e-322f */
14982   /* 16: loadpw */
14983   var50.i = (int) 0x0000002a;   /* 42 or 2.07508e-322f */
14984   /* 21: loadpw */
14985   var51.i = (int) 0x00000067;   /* 103 or 5.08888e-322f */
14986   /* 28: loadpw */
14987   var52.i = (int) 0x00000004;   /* 4 or 1.97626e-323f */
14988   /* 32: loadpw */
14989   var53.i = (int) 0x00000064;   /* 100 or 4.94066e-322f */
14990   /* 36: loadpw */
14991   var54.i = (int) 0x00000068;   /* 104 or 5.13828e-322f */
14992   /* 45: loadpb */
14993   var55 = (int) 0x000000ff;     /* 255 or 1.25987e-321f */
14994   /* 48: loadpb */
14995   var56.x4[0] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14996   var56.x4[1] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14997   var56.x4[2] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14998   var56.x4[3] = (int) 0x00000080;       /* 128 or 6.32404e-322f */
14999
15000   for (i = 0; i < n; i++) {
15001     /* 0: loadb */
15002     var46 = ptr4[i];
15003     /* 2: subb */
15004     var58 = var46 - var47;
15005     /* 3: convsbw */
15006     var59.i = var58;
15007     /* 4: loadupib */
15008     var60 =
15009         (i & 1) ? ((orc_uint8) ptr5[i >> 1] + (orc_uint8) ptr5[(i >> 1) + 1] +
15010         1) >> 1 : ptr5[i >> 1];
15011     /* 5: loadupib */
15012     var61 =
15013         (i & 1) ? ((orc_uint8) ptr6[i >> 1] + (orc_uint8) ptr6[(i >> 1) + 1] +
15014         1) >> 1 : ptr6[i >> 1];
15015     /* 6: avgub */
15016     var62 = ((orc_uint8) var60 + (orc_uint8) var61 + 1) >> 1;
15017     /* 8: subb */
15018     var63 = var62 - var48;
15019     /* 9: convsbw */
15020     var64.i = var63;
15021     /* 10: loadupib */
15022     var65 =
15023         (i & 1) ? ((orc_uint8) ptr7[i >> 1] + (orc_uint8) ptr7[(i >> 1) + 1] +
15024         1) >> 1 : ptr7[i >> 1];
15025     /* 11: loadupib */
15026     var66 =
15027         (i & 1) ? ((orc_uint8) ptr8[i >> 1] + (orc_uint8) ptr8[(i >> 1) + 1] +
15028         1) >> 1 : ptr8[i >> 1];
15029     /* 12: avgub */
15030     var67 = ((orc_uint8) var65 + (orc_uint8) var66 + 1) >> 1;
15031     /* 14: subb */
15032     var68 = var67 - var49;
15033     /* 15: convsbw */
15034     var69.i = var68;
15035     /* 17: mullw */
15036     var70.i = (var59.i * var50.i) & 0xffff;
15037     /* 18: shrsw */
15038     var71.i = var70.i >> 8;
15039     /* 19: addssw */
15040     var72.i = ORC_CLAMP_SW (var59.i + var71.i);
15041     /* 20: addssw */
15042     var73.i = ORC_CLAMP_SW (var72.i + var69.i);
15043     /* 22: mullw */
15044     var74.i = (var69.i * var51.i) & 0xffff;
15045     /* 23: shrsw */
15046     var75.i = var74.i >> 8;
15047     /* 24: subssw */
15048     var76.i = ORC_CLAMP_SW (var73.i - var75.i);
15049     /* 25: addssw */
15050     var77.i = ORC_CLAMP_SW (var76.i + var69.i);
15051     /* 26: addssw */
15052     var78.i = ORC_CLAMP_SW (var72.i + var64.i);
15053     /* 27: addssw */
15054     var79.i = ORC_CLAMP_SW (var78.i + var64.i);
15055     /* 29: mullw */
15056     var80.i = (var64.i * var52.i) & 0xffff;
15057     /* 30: shrsw */
15058     var81.i = var80.i >> 8;
15059     /* 31: addssw */
15060     var82.i = ORC_CLAMP_SW (var79.i + var81.i);
15061     /* 33: mullw */
15062     var83.i = (var64.i * var53.i) & 0xffff;
15063     /* 34: shrsw */
15064     var84.i = var83.i >> 8;
15065     /* 35: subssw */
15066     var85.i = ORC_CLAMP_SW (var72.i - var84.i);
15067     /* 37: mullw */
15068     var86.i = (var69.i * var54.i) & 0xffff;
15069     /* 38: shrsw */
15070     var87.i = var86.i >> 8;
15071     /* 39: subssw */
15072     var88.i = ORC_CLAMP_SW (var85.i - var87.i);
15073     /* 40: subssw */
15074     var89.i = ORC_CLAMP_SW (var88.i - var87.i);
15075     /* 41: convssswb */
15076     var90 = ORC_CLAMP_SB (var77.i);
15077     /* 42: convssswb */
15078     var91 = ORC_CLAMP_SB (var89.i);
15079     /* 43: convssswb */
15080     var92 = ORC_CLAMP_SB (var82.i);
15081     /* 44: mergebw */
15082     {
15083       orc_union16 _dest;
15084       _dest.x2[0] = var92;
15085       _dest.x2[1] = var91;
15086       var93.i = _dest.i;
15087     }
15088     /* 46: mergebw */
15089     {
15090       orc_union16 _dest;
15091       _dest.x2[0] = var90;
15092       _dest.x2[1] = var55;
15093       var94.i = _dest.i;
15094     }
15095     /* 47: mergewl */
15096     {
15097       orc_union32 _dest;
15098       _dest.x2[0] = var93.i;
15099       _dest.x2[1] = var94.i;
15100       var95.i = _dest.i;
15101     }
15102     /* 49: addb */
15103     var57.x4[0] = var95.x4[0] + var56.x4[0];
15104     var57.x4[1] = var95.x4[1] + var56.x4[1];
15105     var57.x4[2] = var95.x4[2] + var56.x4[2];
15106     var57.x4[3] = var95.x4[3] + var56.x4[3];
15107     /* 50: storel */
15108     ptr0[i] = var57;
15109   }
15110
15111 }
15112
15113 void
15114 cogorc_convert_I420_BGRA_avg (orc_uint32 * ORC_RESTRICT d1,
15115     const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2,
15116     const orc_uint8 * ORC_RESTRICT s3, const orc_uint8 * ORC_RESTRICT s4,
15117     const orc_uint8 * ORC_RESTRICT s5, int n)
15118 {
15119   OrcExecutor _ex, *ex = &_ex;
15120   static volatile int p_inited = 0;
15121   static OrcProgram *p = 0;
15122   void (*func) (OrcExecutor *);
15123
15124   if (!p_inited) {
15125     orc_once_mutex_lock ();
15126     if (!p_inited) {
15127
15128       p = orc_program_new ();
15129       orc_program_set_name (p, "cogorc_convert_I420_BGRA_avg");
15130       orc_program_set_backup_function (p, _backup_cogorc_convert_I420_BGRA_avg);
15131       orc_program_add_destination (p, 4, "d1");
15132       orc_program_add_source (p, 1, "s1");
15133       orc_program_add_source (p, 1, "s2");
15134       orc_program_add_source (p, 1, "s3");
15135       orc_program_add_source (p, 1, "s4");
15136       orc_program_add_source (p, 1, "s5");
15137       orc_program_add_constant (p, 1, 0x00000008, "c1");
15138       orc_program_add_constant (p, 1, 0x00000080, "c2");
15139       orc_program_add_constant (p, 4, 0x0000002a, "c3");
15140       orc_program_add_constant (p, 4, 0x00000067, "c4");
15141       orc_program_add_constant (p, 4, 0x00000004, "c5");
15142       orc_program_add_constant (p, 4, 0x00000064, "c6");
15143       orc_program_add_constant (p, 4, 0x00000068, "c7");
15144       orc_program_add_constant (p, 4, 0x000000ff, "c8");
15145       orc_program_add_temporary (p, 2, "t1");
15146       orc_program_add_temporary (p, 2, "t2");
15147       orc_program_add_temporary (p, 1, "t3");
15148       orc_program_add_temporary (p, 1, "t4");
15149       orc_program_add_temporary (p, 2, "t5");
15150       orc_program_add_temporary (p, 2, "t6");
15151       orc_program_add_temporary (p, 2, "t7");
15152       orc_program_add_temporary (p, 2, "t8");
15153       orc_program_add_temporary (p, 2, "t9");
15154       orc_program_add_temporary (p, 2, "t10");
15155       orc_program_add_temporary (p, 1, "t11");
15156       orc_program_add_temporary (p, 1, "t12");
15157       orc_program_add_temporary (p, 1, "t13");
15158       orc_program_add_temporary (p, 4, "t14");
15159
15160       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C2,
15161           ORC_VAR_D1);
15162       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_D1,
15163           ORC_VAR_D1);
15164       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S2,
15165           ORC_VAR_D1, ORC_VAR_D1);
15166       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S3,
15167           ORC_VAR_D1, ORC_VAR_D1);
15168       orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
15169           ORC_VAR_D1);
15170       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
15171           ORC_VAR_D1);
15172       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_D1,
15173           ORC_VAR_D1);
15174       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T3, ORC_VAR_S4,
15175           ORC_VAR_D1, ORC_VAR_D1);
15176       orc_program_append_2 (p, "loadupib", 0, ORC_VAR_T4, ORC_VAR_S5,
15177           ORC_VAR_D1, ORC_VAR_D1);
15178       orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T4,
15179           ORC_VAR_D1);
15180       orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2,
15181           ORC_VAR_D1);
15182       orc_program_append_2 (p, "convsbw", 0, ORC_VAR_T7, ORC_VAR_T3, ORC_VAR_D1,
15183           ORC_VAR_D1);
15184       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T5, ORC_VAR_C3,
15185           ORC_VAR_D1);
15186       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
15187           ORC_VAR_D1);
15188       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T1,
15189           ORC_VAR_D1);
15190       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T5, ORC_VAR_T7,
15191           ORC_VAR_D1);
15192       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C4,
15193           ORC_VAR_D1);
15194       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
15195           ORC_VAR_D1);
15196       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T1,
15197           ORC_VAR_D1);
15198       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_T7,
15199           ORC_VAR_D1);
15200       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T5, ORC_VAR_T6,
15201           ORC_VAR_D1);
15202       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
15203           ORC_VAR_T6, ORC_VAR_D1);
15204       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C5,
15205           ORC_VAR_D1);
15206       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
15207           ORC_VAR_D1);
15208       orc_program_append_2 (p, "addssw", 0, ORC_VAR_T10, ORC_VAR_T10,
15209           ORC_VAR_T1, ORC_VAR_D1);
15210       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T6, ORC_VAR_C6,
15211           ORC_VAR_D1);
15212       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
15213           ORC_VAR_D1);
15214       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T5, ORC_VAR_T1,
15215           ORC_VAR_D1);
15216       orc_program_append_2 (p, "mullw", 0, ORC_VAR_T1, ORC_VAR_T7, ORC_VAR_C7,
15217           ORC_VAR_D1);
15218       orc_program_append_2 (p, "shrsw", 0, ORC_VAR_T1, ORC_VAR_T1, ORC_VAR_C1,
15219           ORC_VAR_D1);
15220       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
15221           ORC_VAR_D1);
15222       orc_program_append_2 (p, "subssw", 0, ORC_VAR_T9, ORC_VAR_T9, ORC_VAR_T1,
15223           ORC_VAR_D1);
15224       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T11, ORC_VAR_T8,
15225           ORC_VAR_D1, ORC_VAR_D1);
15226       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T12, ORC_VAR_T9,
15227           ORC_VAR_D1, ORC_VAR_D1);
15228       orc_program_append_2 (p, "convssswb", 0, ORC_VAR_T13, ORC_VAR_T10,
15229           ORC_VAR_D1, ORC_VAR_D1);
15230       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T1, ORC_VAR_T13,
15231           ORC_VAR_T12, ORC_VAR_D1);
15232       orc_program_append_2 (p, "mergebw", 0, ORC_VAR_T2, ORC_VAR_T11,
15233           ORC_VAR_C8, ORC_VAR_D1);
15234       orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T14, ORC_VAR_T1,
15235           ORC_VAR_T2, ORC_VAR_D1);
15236       orc_program_append_2 (p, "addb", 2, ORC_VAR_D1, ORC_VAR_T14, ORC_VAR_C2,
15237           ORC_VAR_D1);
15238
15239       orc_program_compile (p);
15240     }
15241     p_inited = TRUE;
15242     orc_once_mutex_unlock ();
15243   }
15244   ex->program = p;
15245
15246   ex->n = n;
15247   ex->arrays[ORC_VAR_D1] = d1;
15248   ex->arrays[ORC_VAR_S1] = (void *) s1;
15249   ex->arrays[ORC_VAR_S2] = (void *) s2;
15250   ex->arrays[ORC_VAR_S3] = (void *) s3;
15251   ex->arrays[ORC_VAR_S4] = (void *) s4;
15252   ex->arrays[ORC_VAR_S5] = (void *) s5;
15253
15254   func = p->code_exec;
15255   func (ex);
15256 }
15257 #endif