diff --git a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json index 9398f21a64..aeeb7f4f31 100644 --- a/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json +++ b/subprojects/gst-plugins-bad/docs/plugins/gst_plugins_cache.json @@ -4012,12 +4012,12 @@ "long-name": "Bayer to RGB decoder for cameras", "pad-templates": { "sink": { - "caps": "video/x-bayer:\n format: { bggr, grbg, gbrg, rggb }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-bayer:\n format: { bggr, rggb, grbg, gbrg, bggr10le, rggb10le, grbg10le, gbrg10le, bggr10be, rggb10be, grbg10be, gbrg10be, bggr12le, rggb12le, grbg12le, gbrg12le, bggr12be, rggb12be, grbg12be, gbrg12be, bggr14le, rggb14le, grbg14le, gbrg14le, bggr14be, rggb14be, grbg14be, gbrg14be, bggr16le, rggb16le, grbg16le, gbrg16le, bggr16be, rggb16be, grbg16be, gbrg16be }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "sink", "presence": "always" }, "src": { - "caps": "video/x-raw:\n format: { RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", + "caps": "video/x-raw:\n format: { RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR, RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE }\n width: [ 1, 2147483647 ]\n height: [ 1, 2147483647 ]\n framerate: [ 0/1, 2147483647/1 ]\n", "direction": "src", "presence": "always" } diff --git a/subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c b/subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c index 3dfae46ddd..ec86ea348a 100644 --- a/subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c +++ b/subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c @@ -89,6 +89,8 @@ #include "gstbayerelements.h" #include "gstbayerorc.h" +#define DIV_ROUND_UP(s,v) (((s) + ((v)-1)) / (v)) + #define GST_CAT_DEFAULT gst_bayer2rgb_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); @@ -124,6 +126,8 @@ struct _GstBayer2RGB int g_off; /* offset for green */ int b_off; /* offset for blue */ int format; + int bpp; /* bits per pixel, 8/10/12/14/16 */ + int bigendian; }; struct _GstBayer2RGBClass @@ -131,10 +135,32 @@ struct _GstBayer2RGBClass GstBaseTransformClass parent; }; -#define SRC_CAPS \ - GST_VIDEO_CAPS_MAKE ("{ RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR }") +#define BAYER_CAPS_GEN(mask, bits, endian) \ + " "#mask#bits#endian -#define SINK_CAPS "video/x-bayer,format=(string){bggr,grbg,gbrg,rggb}," \ +#define BAYER_CAPS_ORD(bits, endian) \ + BAYER_CAPS_GEN(bggr, bits, endian)"," \ + BAYER_CAPS_GEN(rggb, bits, endian)"," \ + BAYER_CAPS_GEN(grbg, bits, endian)"," \ + BAYER_CAPS_GEN(gbrg, bits, endian) + +#define BAYER_CAPS_BITS(bits) \ + BAYER_CAPS_ORD(bits, le)"," \ + BAYER_CAPS_ORD(bits, be) + +#define BAYER_CAPS_ALL \ + BAYER_CAPS_ORD(,)"," \ + BAYER_CAPS_BITS(10)"," \ + BAYER_CAPS_BITS(12)"," \ + BAYER_CAPS_BITS(14)"," \ + BAYER_CAPS_BITS(16) + +#define SRC_CAPS \ + GST_VIDEO_CAPS_MAKE ("{ RGBx, xRGB, BGRx, xBGR, RGBA, ARGB, BGRA, ABGR, " \ + "RGBA64_LE, ARGB64_LE, BGRA64_LE, ABGR64_LE, " \ + "RGBA64_BE, ARGB64_BE, BGRA64_BE, ABGR64_BE }") + +#define SINK_CAPS "video/x-bayer,format=(string){" BAYER_CAPS_ALL " }, "\ "width=(int)[1,MAX],height=(int)[1,MAX],framerate=(fraction)[0/1,MAX]" enum @@ -252,23 +278,47 @@ gst_bayer2rgb_set_caps (GstBaseTransform * base, GstCaps * incaps, gst_structure_get_int (structure, "height", &bayer2rgb->height); format = gst_structure_get_string (structure, "format"); - if (g_str_equal (format, "bggr")) { + if (g_str_has_prefix (format, "bggr")) { bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_BGGR; - } else if (g_str_equal (format, "gbrg")) { + } else if (g_str_has_prefix (format, "gbrg")) { bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_GBRG; - } else if (g_str_equal (format, "grbg")) { + } else if (g_str_has_prefix (format, "grbg")) { bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_GRBG; - } else if (g_str_equal (format, "rggb")) { + } else if (g_str_has_prefix (format, "rggb")) { bayer2rgb->format = GST_BAYER_2_RGB_FORMAT_RGGB; } else { return FALSE; } + if (strlen (format) == 4) { /* 8bit bayer */ + bayer2rgb->bpp = 8; + } else if (strlen (format) == 8) { /* 10/12/14/16 le/be bayer */ + bayer2rgb->bpp = (gint) g_ascii_strtoull (format + 4, NULL, 10); + if (bayer2rgb->bpp & 1) /* odd bayer2rgb->bpp bayer formats not supported */ + return FALSE; + if (bayer2rgb->bpp < 10 || bayer2rgb->bpp > 16) /* bayer 10,12,14,16 only */ + return FALSE; + + if (g_str_has_suffix (format, "le")) + bayer2rgb->bigendian = 0; + else if (g_str_has_suffix (format, "be")) + bayer2rgb->bigendian = 1; + else + return FALSE; + } else + return FALSE; + /* To cater for different RGB formats, we need to set params for later */ gst_video_info_from_caps (&info, outcaps); - bayer2rgb->r_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 0); - bayer2rgb->g_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 1); - bayer2rgb->b_off = GST_VIDEO_INFO_COMP_OFFSET (&info, 2); + bayer2rgb->r_off = + GST_VIDEO_INFO_COMP_OFFSET (&info, + 0) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 0), 8); + bayer2rgb->g_off = + GST_VIDEO_INFO_COMP_OFFSET (&info, + 1) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 1), 8); + bayer2rgb->b_off = + GST_VIDEO_INFO_COMP_OFFSET (&info, + 2) / DIV_ROUND_UP (GST_VIDEO_INFO_COMP_DEPTH (&info, 2), 8); bayer2rgb->info = info; @@ -283,6 +333,8 @@ gst_bayer2rgb_reset (GstBayer2RGB * filter) filter->r_off = 0; filter->g_off = 0; filter->b_off = 0; + filter->bpp = 8; + filter->bigendian = 0; gst_video_info_init (&filter->info); } @@ -326,22 +378,25 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps, gsize * size) { GstStructure *structure; + GstBayer2RGB *bayer2rgb; int width; int height; const char *name; structure = gst_caps_get_structure (caps, 0); + bayer2rgb = GST_BAYER2RGB (base); if (gst_structure_get_int (structure, "width", &width) && gst_structure_get_int (structure, "height", &height)) { name = gst_structure_get_name (structure); /* Our name must be either video/x-bayer video/x-raw */ if (strcmp (name, "video/x-raw")) { - *size = GST_ROUND_UP_4 (width) * height; + *size = + GST_ROUND_UP_4 (width) * height * DIV_ROUND_UP (bayer2rgb->bpp, 8); return TRUE; } else { - /* For output, calculate according to format (always 32 bits) */ - *size = width * height * 4; + /* For output, calculate according to format */ + *size = width * height * DIV_ROUND_UP (bayer2rgb->bpp, 8); return TRUE; } @@ -352,7 +407,7 @@ gst_bayer2rgb_get_unit_size (GstBaseTransform * base, GstCaps * caps, } static void -gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1, +gst_bayer2rgb8_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1, const guint8 * src, GstBayer2RGB * bayer2rgb) { int n = bayer2rgb->width; @@ -433,20 +488,99 @@ gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1, } } +static guint16 +gswab16 (guint16 val, guint8 swap) +{ + if (swap) { + return GUINT16_FROM_BE (val); + } else { + return val; + } +} + +static void +gst_bayer2rgb16_split_and_upsample_horiz (guint16 * dest0, guint16 * dest1, + const guint16 * src, GstBayer2RGB * bayer2rgb) +{ + int swap = bayer2rgb->bigendian; + int n = bayer2rgb->width; + int i; + + dest0[0] = gswab16 (src[0], swap); + dest1[0] = gswab16 (src[1], swap); + dest0[1] = (gswab16 (src[0], swap) + gswab16 (src[2], swap) + 1) >> 1; + dest1[1] = gswab16 (src[1], swap); + + if (swap) { + bayer16_orc_horiz_upsample_be (dest0 + 2, dest1 + 2, src + 1, (n - 4) >> 1); + } else { + bayer16_orc_horiz_upsample_le (dest0 + 2, dest1 + 2, src + 1, (n - 4) >> 1); + } + + for (i = n - 2; i < n; i++) { + if ((i & 1) == 0) { + dest0[i] = gswab16 (src[i], swap); + dest1[i] = gswab16 (src[i - 1], swap); + } else { + dest0[i] = gswab16 (src[i - 1], swap); + dest1[i] = gswab16 (src[i], swap); + } + } +} + +static void +gst_bayer2rgb_split_and_upsample_horiz (guint8 * dest0, guint8 * dest1, + const guint8 * src, GstBayer2RGB * bayer2rgb) +{ + if (bayer2rgb->bpp == 8) { + gst_bayer2rgb8_split_and_upsample_horiz (dest0, dest1, src, bayer2rgb); + } else { + gst_bayer2rgb16_split_and_upsample_horiz ((guint16 *) dest0, + (guint16 *) dest1, (const guint16 *) src, bayer2rgb); + } +} + typedef void (*process_func) (guint8 * d0, const guint8 * s0, const guint8 * s1, const guint8 * s2, const guint8 * s3, const guint8 * s4, const guint8 * s5, int n); +typedef void (*process_func16) (guint16 * d0, guint16 * d1, const guint8 * s0, + const guint8 * s1, const guint8 * s2, const guint8 * s3, const guint8 * s4, + const guint8 * s5, int n); + +#define LINE(t, x, b) ((t) + (((x) & 7) * ((b)->width * DIV_ROUND_UP((b)->bpp, 8)))) + static void gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest, int dest_stride, uint8_t * src) { - const int src_stride = GST_ROUND_UP_4 (bayer2rgb->width); + const int src_stride = + GST_ROUND_UP_4 (bayer2rgb->width) * DIV_ROUND_UP (bayer2rgb->bpp, 8); + const int bayersrc16 = bayer2rgb->bpp > 8; int j; guint8 *tmp; + guint32 *dtmp; process_func merge[2] = { NULL, NULL }; + process_func16 merge16[2] = { NULL, NULL }; int r_off, g_off, b_off; + /* + * Handle emission of either RGBA64 or RGBA (32bpp) . The default is + * emission of RGBA64 in case the input bayer data are >8 bit, since + * there is no loss of precision that way. + * + * The emission of RGBA (32bpp) as done here is done by shifting the + * debayered data by the bpp-8 bits right, to fit into the 8 bits per + * channel output buffer. This retains precision during calculation, + * and the calculation is a bit more expensive in terms of CPU cycles + * and memory. An alternative approach would be to downgrade the input + * bayer data in gst_bayer2rgb16_split_and_upsample_horiz() already, + * and then perform this second part of debayering as if those input + * data were 8bpp bayer data. This would increase speed, but decrease + * precision. + */ + const int bayerdst16 = (dest_stride / bayer2rgb->width / 4) == 2; + /* We exploit some symmetry in the functions here. The base functions * are all named for the BGGR arrangement. For RGGB, we swap the * red offset and blue offset in the output. For GRBG, we swap the @@ -463,25 +597,38 @@ gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest, if (r_off == 2 && g_off == 1 && b_off == 0) { merge[0] = bayer_orc_merge_bg_bgra; merge[1] = bayer_orc_merge_gr_bgra; + merge16[0] = bayer16_orc_merge_bg_bgra; + merge16[1] = bayer16_orc_merge_gr_bgra; } else if (r_off == 3 && g_off == 2 && b_off == 1) { merge[0] = bayer_orc_merge_bg_abgr; merge[1] = bayer_orc_merge_gr_abgr; + merge16[0] = bayer16_orc_merge_bg_abgr; + merge16[1] = bayer16_orc_merge_gr_abgr; } else if (r_off == 1 && g_off == 2 && b_off == 3) { merge[0] = bayer_orc_merge_bg_argb; merge[1] = bayer_orc_merge_gr_argb; + merge16[0] = bayer16_orc_merge_bg_argb; + merge16[1] = bayer16_orc_merge_gr_argb; } else if (r_off == 0 && g_off == 1 && b_off == 2) { merge[0] = bayer_orc_merge_bg_rgba; merge[1] = bayer_orc_merge_gr_rgba; + merge16[0] = bayer16_orc_merge_bg_rgba; + merge16[1] = bayer16_orc_merge_gr_rgba; } if (bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_GRBG || bayer2rgb->format == GST_BAYER_2_RGB_FORMAT_GBRG) { process_func tmp = merge[0]; merge[0] = merge[1]; merge[1] = tmp; + process_func16 tmp16 = merge16[0]; + merge16[0] = merge16[1]; + merge16[1] = tmp16; } - tmp = g_malloc (2 * 4 * bayer2rgb->width); -#define LINE(t, x, b) ((t) + (((x) & 7) * ((b)->width))) + tmp = g_malloc (DIV_ROUND_UP (bayer2rgb->bpp, 8) * 2 * 4 * bayer2rgb->width); + + if (bayersrc16 || bayerdst16) + dtmp = g_malloc (sizeof (*dtmp) * 2 * bayer2rgb->width); /* Pre-process source line 1 into bottom two lines 6 and 7 as PREVIOUS line */ gst_bayer2rgb_split_and_upsample_horiz ( /* src line 1 */ @@ -571,16 +718,40 @@ gst_bayer2rgb_process (GstBayer2RGB * bayer2rgb, uint8_t * dest, * inputs from lines 0,1,2,3,4,5 i.e. b0,g0,g1,r1,b2,g2 and the merge * function would be bayer_orc_merge_gr_* . */ - merge[j & 1] (dest + j * dest_stride, /* output line j */ - LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */ - LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */ - LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */ - LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */ - LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */ - LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */ - bayer2rgb->width >> 1); + if (bayersrc16) { + merge16[j & 1] ((guint16 *) dtmp, /* temporary buffer BG */ + (guint16 *) (dtmp + bayer2rgb->width), /* temporary buffer GR */ + LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */ + LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */ + LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */ + LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */ + LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */ + LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */ + bayer2rgb->width >> 1); + + if (bayerdst16) + bayer16to16_orc_reorder (dest + j * dest_stride, + dtmp, dtmp + bayer2rgb->width, bayer2rgb->bpp, bayer2rgb->width); + else + bayer16to8_orc_reorder (dest + j * dest_stride, + dtmp, dtmp + bayer2rgb->width, bayer2rgb->bpp - 8, + bayer2rgb->width); + } else { + merge[j & 1] (bayerdst16 ? (guint8 *) dtmp : (dest + j * dest_stride), /* output line j */ + LINE (tmp, j * 2 - 2, bayer2rgb), /* PREVIOUS: even: BG g0 , odd: GR b0 */ + LINE (tmp, j * 2 - 1, bayer2rgb), /* PREVIOUS: even: BG r0 , odd: GR g0 */ + LINE (tmp, j * 2 + 0, bayer2rgb), /* CURRENT: even: BG b1 , odd: GR g1 */ + LINE (tmp, j * 2 + 1, bayer2rgb), /* CURRENT: even: BG g1 , odd: GR r1 */ + LINE (tmp, j * 2 + 2, bayer2rgb), /* NEXT: even: BG g2 , odd: GR b2 */ + LINE (tmp, j * 2 + 3, bayer2rgb), /* NEXT: even: BG r2 , odd: GR g2 */ + bayer2rgb->width >> 1); + if (bayerdst16) + bayer8to16_orc_reorder (dest + j * dest_stride, dtmp, bayer2rgb->width); + } } + if (bayersrc16) + g_free (dtmp); g_free (tmp); } diff --git a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.c b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.c index 0e309cdbae..093cfeb2c7 100644 --- a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.c +++ b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.c @@ -131,6 +131,58 @@ void bayer_orc_merge_gr_argb (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n); +void bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n); +void bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); +void bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n); +void bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n); +void bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); /* begin Orc C target preamble */ @@ -3609,3 +3661,3884 @@ bayer_orc_merge_gr_argb (guint8 * ORC_RESTRICT d1, func (ex); } #endif + + +/* bayer16_orc_horiz_upsample_le */ +#ifdef DISABLE_ORC +void +bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union16 var40; + orc_union16 var41; + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var40.i = _src.x2[1]; + var41.i = _src.x2[0]; + } + /* 2: loadoffl */ + var42 = ptr4[i + 1]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var42.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 4: avguw */ + var45.i = ((orc_uint16) var40.i + (orc_uint16) var43.i + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var45.i; + var38.i = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + /* 7: avguw */ + var46.i = ((orc_uint16) var41.i + (orc_uint16) var44.i + 1) >> 1; + /* 8: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var44.i; + var39.i = _dest.i; + } + /* 9: storel */ + ptr1[i] = var39; + } + +} + +#else +static void +_backup_bayer16_orc_horiz_upsample_le (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union16 var40; + orc_union16 var41; + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var40.i = _src.x2[1]; + var41.i = _src.x2[0]; + } + /* 2: loadoffl */ + var42 = ptr4[i + 1]; + /* 3: splitlw */ + { + orc_union32 _src; + _src.i = var42.i; + var43.i = _src.x2[1]; + var44.i = _src.x2[0]; + } + /* 4: avguw */ + var45.i = ((orc_uint16) var40.i + (orc_uint16) var43.i + 1) >> 1; + /* 5: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var40.i; + _dest.x2[1] = var45.i; + var38.i = _dest.i; + } + /* 6: storel */ + ptr0[i] = var38; + /* 7: avguw */ + var46.i = ((orc_uint16) var41.i + (orc_uint16) var44.i + 1) >> 1; + /* 8: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.i; + _dest.x2[1] = var44.i; + var39.i = _dest.i; + } + /* 9: storel */ + ptr1[i] = var39; + } + +} + +void +bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 29, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 104, + 111, 114, 105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 95, 108, + 101, + 11, 4, 4, 11, 4, 4, 12, 4, 4, 14, 4, 1, 0, 0, 0, 20, + 4, 20, 2, 20, 2, 20, 2, 20, 2, 198, 34, 33, 4, 114, 32, 4, + 16, 198, 36, 35, 32, 76, 36, 34, 36, 195, 0, 34, 36, 76, 33, 33, + 35, 195, 1, 33, 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_bayer16_orc_horiz_upsample_le); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_horiz_upsample_le"); + orc_program_set_backup_function (p, + _backup_bayer16_orc_horiz_upsample_le); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00000001, "c1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadoffl", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_C1, ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_horiz_upsample_be */ +#ifdef DISABLE_ORC +void +bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + + ptr0 = (orc_union32 *) d1; + ptr1 = (orc_union32 *) d2; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var40.i = _src.x2[1]; + var41.i = _src.x2[0]; + } + /* 2: swapw */ + var42.i = ORC_SWAP_W (var41.i); + /* 3: swapw */ + var43.i = ORC_SWAP_W (var40.i); + /* 4: loadoffl */ + var44 = ptr4[i + 1]; + /* 5: splitlw */ + { + orc_union32 _src; + _src.i = var44.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 6: swapw */ + var47.i = ORC_SWAP_W (var46.i); + /* 7: swapw */ + var48.i = ORC_SWAP_W (var45.i); + /* 8: avguw */ + var49.i = ((orc_uint16) var43.i + (orc_uint16) var48.i + 1) >> 1; + /* 9: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var49.i; + var38.i = _dest.i; + } + /* 10: storel */ + ptr0[i] = var38; + /* 11: avguw */ + var50.i = ((orc_uint16) var42.i + (orc_uint16) var47.i + 1) >> 1; + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var47.i; + var39.i = _dest.i; + } + /* 13: storel */ + ptr1[i] = var39; + } + +} + +#else +static void +_backup_bayer16_orc_horiz_upsample_be (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + orc_union32 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; + orc_union16 var40; + orc_union16 var41; + orc_union16 var42; + orc_union16 var43; + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr1 = (orc_union32 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var37 = ptr4[i]; + /* 1: splitlw */ + { + orc_union32 _src; + _src.i = var37.i; + var40.i = _src.x2[1]; + var41.i = _src.x2[0]; + } + /* 2: swapw */ + var42.i = ORC_SWAP_W (var41.i); + /* 3: swapw */ + var43.i = ORC_SWAP_W (var40.i); + /* 4: loadoffl */ + var44 = ptr4[i + 1]; + /* 5: splitlw */ + { + orc_union32 _src; + _src.i = var44.i; + var45.i = _src.x2[1]; + var46.i = _src.x2[0]; + } + /* 6: swapw */ + var47.i = ORC_SWAP_W (var46.i); + /* 7: swapw */ + var48.i = ORC_SWAP_W (var45.i); + /* 8: avguw */ + var49.i = ((orc_uint16) var43.i + (orc_uint16) var48.i + 1) >> 1; + /* 9: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var49.i; + var38.i = _dest.i; + } + /* 10: storel */ + ptr0[i] = var38; + /* 11: avguw */ + var50.i = ((orc_uint16) var42.i + (orc_uint16) var47.i + 1) >> 1; + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var47.i; + var39.i = _dest.i; + } + /* 13: storel */ + ptr1[i] = var39; + } + +} + +void +bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 29, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 104, + 111, 114, 105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 95, 98, + 101, + 11, 4, 4, 11, 4, 4, 12, 4, 4, 14, 4, 1, 0, 0, 0, 20, + 4, 20, 2, 20, 2, 20, 2, 20, 2, 198, 34, 33, 4, 183, 33, 33, + 183, 34, 34, 114, 32, 4, 16, 198, 36, 35, 32, 183, 35, 35, 183, 36, + 36, 76, 36, 34, 36, 195, 0, 34, 36, 76, 33, 33, 35, 195, 1, 33, + 35, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, + _backup_bayer16_orc_horiz_upsample_be); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_horiz_upsample_be"); + orc_program_set_backup_function (p, + _backup_bayer16_orc_horiz_upsample_be); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_destination (p, 4, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x00000001, "c1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 2, "t3"); + orc_program_add_temporary (p, 2, "t4"); + orc_program_add_temporary (p, 2, "t5"); + + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_S1, + ORC_VAR_D1); + orc_program_append_2 (p, "swapw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "swapw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "loadoffl", 0, ORC_VAR_T1, ORC_VAR_S1, + ORC_VAR_C1, ORC_VAR_D1); + orc_program_append_2 (p, "splitlw", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "swapw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "swapw", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_bg_bgra */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union64 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: loadl */ + var42 = ptr6[i]; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var52.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var52.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_bg_bgra (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union64 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: loadl */ + var42 = ptr6[i]; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var52.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var52.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 98, 103, 95, 98, 103, 114, 97, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 6, 33, 21, 1, 195, 1, 32, 18, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_bgra); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_bg_bgra"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_bgra); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0x0000ffff, "c1"); + orc_program_add_constant (p, 4, 0xffff0000, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_S3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_gr_bgra */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union64 var42; + orc_union32 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var52.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var52.x2[1]; + var42.x2[1] = _dest.i; + } + /* 15: storeq */ + ptr0[i] = var42; + /* 16: loadl */ + var43 = ptr7[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_gr_bgra (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union64 var42; + orc_union32 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var52.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var52.x2[1]; + var42.x2[1] = _dest.i; + } + /* 15: storeq */ + ptr0[i] = var42; + /* 16: loadl */ + var43 = ptr7[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 103, 114, 95, 98, 103, 114, 97, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 32, 33, 21, 1, 195, 1, 7, 18, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_bgra); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_gr_bgra"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_bgra); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0xffff0000, "c1"); + orc_program_add_constant (p, 4, 0x0000ffff, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_S4, ORC_VAR_C3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_bg_abgr */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union64 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: loadl */ + var43 = ptr6[i]; + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var44.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var44.x2[1] = _dest.i; + } + /* 17: storeq */ + ptr0[i] = var44; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var46.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var46.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_bg_abgr (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union64 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: loadl */ + var43 = ptr6[i]; + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var44.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var44.x2[1] = _dest.i; + } + /* 17: storeq */ + ptr0[i] = var44; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var46.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var46.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 98, 103, 95, 97, 98, 103, 114, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 18, 6, 21, 1, 195, 1, 33, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_abgr); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_bg_abgr"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_abgr); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0x0000ffff, "c1"); + orc_program_add_constant (p, 4, 0xffff0000, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_S3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_gr_abgr */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union64 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var46.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var46.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 17: loadl */ + var44 = ptr7[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_gr_abgr (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union64 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var46.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var46.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 17: loadl */ + var44 = ptr7[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 103, 114, 95, 97, 98, 103, 114, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 18, 32, 21, 1, 195, 1, 33, 7, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_abgr); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_gr_abgr"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_abgr); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0xffff0000, "c1"); + orc_program_add_constant (p, 4, 0x0000ffff, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_S4, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_bg_rgba */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union64 var42; + orc_union32 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var52.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var52.x2[1]; + var42.x2[1] = _dest.i; + } + /* 15: storeq */ + ptr0[i] = var42; + /* 16: loadl */ + var43 = ptr6[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_bg_rgba (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union64 var42; + orc_union32 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var52.x2[0]; + var42.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var52.x2[1]; + var42.x2[1] = _dest.i; + } + /* 15: storeq */ + ptr0[i] = var42; + /* 16: loadl */ + var43 = ptr6[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var43.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 98, 103, 95, 114, 103, 98, 97, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 32, 33, 21, 1, 195, 1, 6, 18, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_rgba); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_bg_rgba"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_rgba); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0x0000ffff, "c1"); + orc_program_add_constant (p, 4, 0xffff0000, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_S3, ORC_VAR_C3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_gr_rgba */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union64 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: loadl */ + var42 = ptr7[i]; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var52.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var52.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_gr_rgba (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif + orc_union32 var42; + orc_union64 var43; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var44; +#else + orc_union32 var44; +#endif + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 17: loadpw */ + var44.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var44.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 14: loadl */ + var42 = ptr7[i]; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var52.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var52.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var46.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 103, 114, 95, 114, 103, 98, 97, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 7, 33, 21, 1, 195, 1, 32, 18, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_rgba); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_gr_rgba"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_rgba); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0xffff0000, "c1"); + orc_program_add_constant (p, 4, 0x0000ffff, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_S4, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_bg_argb */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union64 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var46.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var46.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 17: loadl */ + var44 = ptr6[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_bg_argb (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union64 var43; + orc_union32 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 11: loadpl */ + var41.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr5[i]; + /* 1: loadl */ + var36 = ptr9[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr4[i]; + /* 4: loadl */ + var38 = ptr8[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr7[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var46.x2[0]; + var43.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var46.x2[1]; + var43.x2[1] = _dest.i; + } + /* 16: storeq */ + ptr0[i] = var43; + /* 17: loadl */ + var44 = ptr6[i]; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var44.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var44.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 98, 103, 95, 97, 114, 103, 98, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 255, 255, 0, 0, 14, 4, 0, 0, 255, 255, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 5, 9, 21, 1, 76, 33, 4, 8, 112, 34, 7, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 18, 32, 21, 1, 195, 1, 33, 6, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_argb); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_bg_argb"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_bg_argb); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0x0000ffff, "c1"); + orc_program_add_constant (p, 4, 0xffff0000, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S4, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_T1, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_S3, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16_orc_merge_gr_argb */ +#ifdef DISABLE_ORC +void +bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union64 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) d1; + ptr1 = (orc_union64 *) d2; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + ptr6 = (orc_union32 *) s3; + ptr7 = (orc_union32 *) s4; + ptr8 = (orc_union32 *) s5; + ptr9 = (orc_union32 *) s6; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: loadl */ + var43 = ptr7[i]; + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var44.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var44.x2[1] = _dest.i; + } + /* 17: storeq */ + ptr0[i] = var44; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var46.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var46.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +#else +static void +_backup_bayer16_orc_merge_gr_argb (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + orc_union64 *ORC_RESTRICT ptr1; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + const orc_union32 *ORC_RESTRICT ptr6; + const orc_union32 *ORC_RESTRICT ptr7; + const orc_union32 *ORC_RESTRICT ptr8; + const orc_union32 *ORC_RESTRICT ptr9; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union32 var39; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var40; +#else + orc_union32 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var41; +#else + orc_union32 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var42; +#else + orc_union32 var42; +#endif + orc_union32 var43; + orc_union64 var44; + orc_union64 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr1 = (orc_union64 *) ex->arrays[1]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + ptr6 = (orc_union32 *) ex->arrays[6]; + ptr7 = (orc_union32 *) ex->arrays[7]; + ptr8 = (orc_union32 *) ex->arrays[8]; + ptr9 = (orc_union32 *) ex->arrays[9]; + + /* 9: loadpl */ + var40.i = 0xffff0000; /* -65536 or 2.12196e-314f */ + /* 11: loadpl */ + var41.i = 0x0000ffff; /* 65535 or 3.23786e-319f */ + /* 14: loadpw */ + var42.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var42.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: loadl */ + var36 = ptr8[i]; + /* 2: avguw */ + var46.x2[0] = + ((orc_uint16) var35.x2[0] + (orc_uint16) var36.x2[0] + 1) >> 1; + var46.x2[1] = + ((orc_uint16) var35.x2[1] + (orc_uint16) var36.x2[1] + 1) >> 1; + /* 3: loadl */ + var37 = ptr5[i]; + /* 4: loadl */ + var38 = ptr9[i]; + /* 5: avguw */ + var47.x2[0] = + ((orc_uint16) var37.x2[0] + (orc_uint16) var38.x2[0] + 1) >> 1; + var47.x2[1] = + ((orc_uint16) var37.x2[1] + (orc_uint16) var38.x2[1] + 1) >> 1; + /* 6: loadl */ + var39 = ptr6[i]; + /* 7: copyl */ + var48.i = var39.i; + /* 8: avguw */ + var49.x2[0] = + ((orc_uint16) var47.x2[0] + (orc_uint16) var48.x2[0] + 1) >> 1; + var49.x2[1] = + ((orc_uint16) var47.x2[1] + (orc_uint16) var48.x2[1] + 1) >> 1; + /* 10: andl */ + var50.i = var49.i & var40.i; + /* 12: andl */ + var51.i = var48.i & var41.i; + /* 13: orl */ + var52.i = var51.i | var50.i; + /* 15: loadl */ + var43 = ptr7[i]; + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[0]; + _dest.x2[1] = var43.x2[0]; + var44.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var42.x2[1]; + _dest.x2[1] = var43.x2[1]; + var44.x2[1] = _dest.i; + } + /* 17: storeq */ + ptr0[i] = var44; + /* 18: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[0]; + _dest.x2[1] = var46.x2[0]; + var45.x2[0] = _dest.i; + } + { + orc_union32 _dest; + _dest.x2[0] = var52.x2[1]; + _dest.x2[1] = var46.x2[1]; + var45.x2[1] = _dest.i; + } + /* 19: storeq */ + ptr1[i] = var45; + } + +} + +void +bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, guint16 * ORC_RESTRICT d2, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 25, 98, 97, 121, 101, 114, 49, 54, 95, 111, 114, 99, 95, 109, + 101, 114, 103, 101, 95, 103, 114, 95, 97, 114, 103, 98, 11, 8, 8, 11, + 8, 8, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, 4, 12, 4, + 4, 12, 4, 4, 14, 4, 0, 0, 255, 255, 14, 4, 255, 255, 0, 0, + 14, 2, 255, 255, 0, 0, 20, 4, 20, 4, 20, 4, 21, 1, 76, 32, + 4, 8, 21, 1, 76, 33, 5, 9, 112, 34, 6, 21, 1, 76, 33, 33, + 34, 106, 33, 33, 16, 106, 34, 34, 17, 123, 33, 34, 33, 21, 1, 195, + 0, 18, 7, 21, 1, 195, 1, 33, 32, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_argb); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16_orc_merge_gr_argb"); + orc_program_set_backup_function (p, _backup_bayer16_orc_merge_gr_argb); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_destination (p, 8, "d2"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_source (p, 4, "s3"); + orc_program_add_source (p, 4, "s4"); + orc_program_add_source (p, 4, "s5"); + orc_program_add_source (p, 4, "s6"); + orc_program_add_constant (p, 4, 0xffff0000, "c1"); + orc_program_add_constant (p, 4, 0x0000ffff, "c2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c3"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_S5, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_S2, ORC_VAR_S6, + ORC_VAR_D1); + orc_program_append_2 (p, "copyl", 0, ORC_VAR_T3, ORC_VAR_S3, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "avguw", 1, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T2, ORC_VAR_T3, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D1, ORC_VAR_C3, ORC_VAR_S4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 1, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_D2] = d2; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->arrays[ORC_VAR_S3] = (void *) s3; + ex->arrays[ORC_VAR_S4] = (void *) s4; + ex->arrays[ORC_VAR_S5] = (void *) s5; + ex->arrays[ORC_VAR_S6] = (void *) s6; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16to16_orc_reorder */ +#ifdef DISABLE_ORC +void +bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var36; +#else + orc_union32 var36; +#endif + orc_union32 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + orc_union32 var41; + orc_union64 var42; + orc_union64 var43; + orc_union32 var44; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + /* 1: loadpw */ + var36.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var36.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 2: muluwl */ + var39.x2[0] = + ((orc_uint32) ((orc_uint16) var35.x2[0])) * + ((orc_uint32) ((orc_uint16) var36.x2[0])); + var39.x2[1] = + ((orc_uint32) ((orc_uint16) var35.x2[1])) * + ((orc_uint32) ((orc_uint16) var36.x2[1])); + /* 3: shrul */ + var40.x2[0] = ((orc_uint32) var39.x2[0]) >> p1; + var40.x2[1] = ((orc_uint32) var39.x2[1]) >> p1; + /* 4: convuuslw */ + var41.x2[0] = ORC_CLAMP_UW ((orc_uint32) var40.x2[0]); + var41.x2[1] = ORC_CLAMP_UW ((orc_uint32) var40.x2[1]); + /* 5: loadl */ + var37 = ptr5[i]; + /* 6: muluwl */ + var42.x2[0] = + ((orc_uint32) ((orc_uint16) var37.x2[0])) * + ((orc_uint32) ((orc_uint16) var36.x2[0])); + var42.x2[1] = + ((orc_uint32) ((orc_uint16) var37.x2[1])) * + ((orc_uint32) ((orc_uint16) var36.x2[1])); + /* 7: shrul */ + var43.x2[0] = ((orc_uint32) var42.x2[0]) >> p1; + var43.x2[1] = ((orc_uint32) var42.x2[1]) >> p1; + /* 8: convuuslw */ + var44.x2[0] = ORC_CLAMP_UW ((orc_uint32) var43.x2[0]); + var44.x2[1] = ORC_CLAMP_UW ((orc_uint32) var43.x2[1]); + /* 9: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var44.i; + var38.i = _dest.i; + } + /* 10: storeq */ + ptr0[i] = var38; + } + +} + +#else +static void +_backup_bayer16to16_orc_reorder (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var36; +#else + orc_union32 var36; +#endif + orc_union32 var37; + orc_union64 var38; + orc_union64 var39; + orc_union64 var40; + orc_union32 var41; + orc_union64 var42; + orc_union64 var43; + orc_union32 var44; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + /* 1: loadpw */ + var36.x2[0] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + var36.x2[1] = 0x0000ffff; /* 65535 or 3.23786e-319f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 2: muluwl */ + var39.x2[0] = + ((orc_uint32) ((orc_uint16) var35.x2[0])) * + ((orc_uint32) ((orc_uint16) var36.x2[0])); + var39.x2[1] = + ((orc_uint32) ((orc_uint16) var35.x2[1])) * + ((orc_uint32) ((orc_uint16) var36.x2[1])); + /* 3: shrul */ + var40.x2[0] = ((orc_uint32) var39.x2[0]) >> ex->params[24]; + var40.x2[1] = ((orc_uint32) var39.x2[1]) >> ex->params[24]; + /* 4: convuuslw */ + var41.x2[0] = ORC_CLAMP_UW ((orc_uint32) var40.x2[0]); + var41.x2[1] = ORC_CLAMP_UW ((orc_uint32) var40.x2[1]); + /* 5: loadl */ + var37 = ptr5[i]; + /* 6: muluwl */ + var42.x2[0] = + ((orc_uint32) ((orc_uint16) var37.x2[0])) * + ((orc_uint32) ((orc_uint16) var36.x2[0])); + var42.x2[1] = + ((orc_uint32) ((orc_uint16) var37.x2[1])) * + ((orc_uint32) ((orc_uint16) var36.x2[1])); + /* 7: shrul */ + var43.x2[0] = ((orc_uint32) var42.x2[0]) >> ex->params[24]; + var43.x2[1] = ((orc_uint32) var42.x2[1]) >> ex->params[24]; + /* 8: convuuslw */ + var44.x2[0] = ORC_CLAMP_UW ((orc_uint32) var43.x2[0]); + var44.x2[1] = ORC_CLAMP_UW ((orc_uint32) var43.x2[1]); + /* 9: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var44.i; + var38.i = _dest.i; + } + /* 10: storeq */ + ptr0[i] = var38; + } + +} + +void +bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 23, 98, 97, 121, 101, 114, 49, 54, 116, 111, 49, 54, 95, 111, + 114, 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 8, 8, 12, 4, 4, + 12, 4, 4, 14, 2, 255, 255, 0, 0, 16, 4, 20, 4, 20, 4, 20, + 8, 21, 1, 177, 34, 4, 16, 21, 1, 126, 34, 34, 24, 21, 1, 168, + 32, 34, 21, 1, 177, 34, 5, 16, 21, 1, 126, 34, 34, 24, 21, 1, + 168, 33, 34, 194, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16to16_orc_reorder); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16to16_orc_reorder"); + orc_program_set_backup_function (p, _backup_bayer16to16_orc_reorder); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_constant (p, 2, 0x0000ffff, "c1"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 8, "t3"); + + orc_program_append_2 (p, "muluwl", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuuslw", 1, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "muluwl", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 1, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuuslw", 1, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer16to8_orc_reorder */ +#ifdef DISABLE_ORC +void +bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union16 var39; + orc_union32 var40; + orc_union16 var41; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union32 *) s1; + ptr5 = (orc_union32 *) s2; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: shruw */ + var38.x2[0] = ((orc_uint16) var35.x2[0]) >> p1; + var38.x2[1] = ((orc_uint16) var35.x2[1]) >> p1; + /* 2: convuuswb */ + var39.x2[0] = ORC_MIN ((orc_uint16) var38.x2[0], ORC_UB_MAX); + var39.x2[1] = ORC_MIN ((orc_uint16) var38.x2[1], ORC_UB_MAX); + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: shruw */ + var40.x2[0] = ((orc_uint16) var36.x2[0]) >> p1; + var40.x2[1] = ((orc_uint16) var36.x2[1]) >> p1; + /* 5: convuuswb */ + var41.x2[0] = ORC_MIN ((orc_uint16) var40.x2[0], ORC_UB_MAX); + var41.x2[1] = ORC_MIN ((orc_uint16) var40.x2[1], ORC_UB_MAX); + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var37; + } + +} + +#else +static void +_backup_bayer16to8_orc_reorder (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + const orc_union32 *ORC_RESTRICT ptr5; + orc_union32 var35; + orc_union32 var36; + orc_union32 var37; + orc_union32 var38; + orc_union16 var39; + orc_union32 var40; + orc_union16 var41; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + ptr5 = (orc_union32 *) ex->arrays[5]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var35 = ptr4[i]; + /* 1: shruw */ + var38.x2[0] = ((orc_uint16) var35.x2[0]) >> ex->params[24]; + var38.x2[1] = ((orc_uint16) var35.x2[1]) >> ex->params[24]; + /* 2: convuuswb */ + var39.x2[0] = ORC_MIN ((orc_uint16) var38.x2[0], ORC_UB_MAX); + var39.x2[1] = ORC_MIN ((orc_uint16) var38.x2[1], ORC_UB_MAX); + /* 3: loadl */ + var36 = ptr5[i]; + /* 4: shruw */ + var40.x2[0] = ((orc_uint16) var36.x2[0]) >> ex->params[24]; + var40.x2[1] = ((orc_uint16) var36.x2[1]) >> ex->params[24]; + /* 5: convuuswb */ + var41.x2[0] = ORC_MIN ((orc_uint16) var40.x2[0], ORC_UB_MAX); + var41.x2[1] = ORC_MIN ((orc_uint16) var40.x2[1], ORC_UB_MAX); + /* 6: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var39.i; + _dest.x2[1] = var41.i; + var37.i = _dest.i; + } + /* 7: storel */ + ptr0[i] = var37; + } + +} + +void +bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 22, 98, 97, 121, 101, 114, 49, 54, 116, 111, 56, 95, 111, 114, + 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 4, 4, 12, 4, 4, 12, + 4, 4, 16, 4, 20, 2, 20, 2, 20, 4, 21, 1, 95, 34, 4, 24, + 21, 1, 162, 32, 34, 21, 1, 95, 34, 5, 24, 21, 1, 162, 33, 34, + 195, 0, 32, 33, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer16to8_orc_reorder); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer16to8_orc_reorder"); + orc_program_set_backup_function (p, _backup_bayer16to8_orc_reorder); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_source (p, 4, "s2"); + orc_program_add_parameter (p, 4, "p1"); + orc_program_add_temporary (p, 2, "t1"); + orc_program_add_temporary (p, 2, "t2"); + orc_program_add_temporary (p, 4, "t3"); + + orc_program_append_2 (p, "shruw", 1, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuuswb", 1, ORC_VAR_T1, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 1, ORC_VAR_T3, ORC_VAR_S2, ORC_VAR_P1, + ORC_VAR_D1); + orc_program_append_2 (p, "convuuswb", 1, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1, ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_D1, ORC_VAR_T1, ORC_VAR_T2, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + ex->arrays[ORC_VAR_S2] = (void *) s2; + ex->params[ORC_VAR_P1] = p1; + + func = c->exec; + func (ex); +} +#endif + + +/* bayer8to16_orc_reorder */ +#ifdef DISABLE_ORC +void +bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + orc_union64 var33; + + ptr0 = (orc_union64 *) d1; + ptr4 = (orc_union32 *) s1; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var32 = ptr4[i]; + /* 1: splatbw */ + var33.x4[0] = ((var32.x4[0] & 0xff) << 8) | (var32.x4[0] & 0xff); + var33.x4[1] = ((var32.x4[1] & 0xff) << 8) | (var32.x4[1] & 0xff); + var33.x4[2] = ((var32.x4[2] & 0xff) << 8) | (var32.x4[2] & 0xff); + var33.x4[3] = ((var32.x4[3] & 0xff) << 8) | (var32.x4[3] & 0xff); + /* 2: storeq */ + ptr0[i] = var33; + } + +} + +#else +static void +_backup_bayer8to16_orc_reorder (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union64 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; + orc_union32 var32; + orc_union64 var33; + + ptr0 = (orc_union64 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var32 = ptr4[i]; + /* 1: splatbw */ + var33.x4[0] = ((var32.x4[0] & 0xff) << 8) | (var32.x4[0] & 0xff); + var33.x4[1] = ((var32.x4[1] & 0xff) << 8) | (var32.x4[1] & 0xff); + var33.x4[2] = ((var32.x4[2] & 0xff) << 8) | (var32.x4[2] & 0xff); + var33.x4[3] = ((var32.x4[3] & 0xff) << 8) | (var32.x4[3] & 0xff); + /* 2: storeq */ + ptr0[i] = var33; + } + +} + +void +bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + OrcExecutor _ex, *ex = &_ex; + static volatile int p_inited = 0; + static OrcCode *c = 0; + void (*func) (OrcExecutor *); + + if (!p_inited) { + orc_once_mutex_lock (); + if (!p_inited) { + OrcProgram *p; + +#if 1 + static const orc_uint8 bc[] = { + 1, 9, 22, 98, 97, 121, 101, 114, 56, 116, 111, 49, 54, 95, 111, 114, + 99, 95, 114, 101, 111, 114, 100, 101, 114, 11, 8, 8, 12, 4, 4, 21, + 2, 151, 0, 4, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_bayer8to16_orc_reorder); +#else + p = orc_program_new (); + orc_program_set_name (p, "bayer8to16_orc_reorder"); + orc_program_set_backup_function (p, _backup_bayer8to16_orc_reorder); + orc_program_add_destination (p, 8, "d1"); + orc_program_add_source (p, 4, "s1"); + + orc_program_append_2 (p, "splatbw", 2, ORC_VAR_D1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); +#endif + + orc_program_compile (p); + c = orc_program_take_code (p); + orc_program_free (p); + } + p_inited = TRUE; + orc_once_mutex_unlock (); + } + ex->arrays[ORC_VAR_A2] = c; + ex->program = 0; + + ex->n = n; + ex->arrays[ORC_VAR_D1] = d1; + ex->arrays[ORC_VAR_S1] = (void *) s1; + + func = c->exec; + func (ex); +} +#endif diff --git a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.h b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.h index 235773292c..bd752aa018 100644 --- a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.h +++ b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc-dist.h @@ -1,13 +1,13 @@ /* autogenerated from gstbayerorc.orc */ -#ifndef _GSTBAYERORC_H_ -#define _GSTBAYERORC_H_ +#pragma once #include #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif @@ -16,47 +16,64 @@ extern "C" { #define _ORC_INTEGER_TYPEDEFS_ #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #include -typedef int8_t orc_int8; -typedef int16_t orc_int16; -typedef int32_t orc_int32; -typedef int64_t orc_int64; -typedef uint8_t orc_uint8; -typedef uint16_t orc_uint16; -typedef uint32_t orc_uint32; -typedef uint64_t orc_uint64; + typedef int8_t orc_int8; + typedef int16_t orc_int16; + typedef int32_t orc_int32; + typedef int64_t orc_int64; + typedef uint8_t orc_uint8; + typedef uint16_t orc_uint16; + typedef uint32_t orc_uint32; + typedef uint64_t orc_uint64; #define ORC_UINT64_C(x) UINT64_C(x) #elif defined(_MSC_VER) -typedef signed __int8 orc_int8; -typedef signed __int16 orc_int16; -typedef signed __int32 orc_int32; -typedef signed __int64 orc_int64; -typedef unsigned __int8 orc_uint8; -typedef unsigned __int16 orc_uint16; -typedef unsigned __int32 orc_uint32; -typedef unsigned __int64 orc_uint64; + typedef signed __int8 orc_int8; + typedef signed __int16 orc_int16; + typedef signed __int32 orc_int32; + typedef signed __int64 orc_int64; + typedef unsigned __int8 orc_uint8; + typedef unsigned __int16 orc_uint16; + typedef unsigned __int32 orc_uint32; + typedef unsigned __int64 orc_uint64; #define ORC_UINT64_C(x) (x##Ui64) #define inline __inline #else #include -typedef signed char orc_int8; -typedef short orc_int16; -typedef int orc_int32; -typedef unsigned char orc_uint8; -typedef unsigned short orc_uint16; -typedef unsigned int orc_uint32; + typedef signed char orc_int8; + typedef short orc_int16; + typedef int orc_int32; + typedef unsigned char orc_uint8; + typedef unsigned short orc_uint16; + typedef unsigned int orc_uint32; #if INT_MAX == LONG_MAX -typedef long long orc_int64; -typedef unsigned long long orc_uint64; + typedef long long orc_int64; + typedef unsigned long long orc_uint64; #define ORC_UINT64_C(x) (x##ULL) #else -typedef long orc_int64; -typedef unsigned long orc_uint64; + typedef long orc_int64; + typedef unsigned long orc_uint64; #define ORC_UINT64_C(x) (x##UL) #endif #endif -typedef union { orc_int16 i; orc_int8 x2[2]; } orc_union16; -typedef union { orc_int32 i; float f; orc_int16 x2[2]; orc_int8 x4[4]; } orc_union32; -typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 x4[4]; } orc_union64; + typedef union + { + orc_int16 i; + orc_int8 x2[2]; + } orc_union16; + typedef union + { + orc_int32 i; + float f; + orc_int16 x2[2]; + orc_int8 x4[4]; + } orc_union32; + typedef union + { + orc_int64 i; + double f; + orc_int32 x2[2]; + float x2f[2]; + orc_int16 x4[4]; + } orc_union64; #endif #ifndef ORC_RESTRICT #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L @@ -80,20 +97,95 @@ typedef union { orc_int64 i; double f; orc_int32 x2[2]; float x2f[2]; orc_int16 #endif #endif -void bayer_orc_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); -void bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); -void bayer_orc_merge_bg_bgra (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_gr_bgra (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_bg_abgr (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_gr_abgr (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_bg_rgba (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_gr_rgba (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_bg_argb (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); -void bayer_orc_merge_gr_argb (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_horiz_upsample_unaligned (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); + void bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, + guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); + void bayer_orc_merge_bg_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_gr_bgra (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_bg_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_gr_abgr (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_bg_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_gr_rgba (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_bg_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer_orc_merge_gr_argb (guint8 * ORC_RESTRICT d1, + const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, + const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, + const guint8 * ORC_RESTRICT s5, const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_horiz_upsample_le (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n); + void bayer16_orc_horiz_upsample_be (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint16 * ORC_RESTRICT s1, int n); + void bayer16_orc_merge_bg_bgra (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_gr_bgra (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_bg_abgr (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_gr_abgr (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_bg_rgba (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_gr_rgba (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_bg_argb (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16_orc_merge_gr_argb (guint16 * ORC_RESTRICT d1, + guint16 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, + const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, + const guint8 * ORC_RESTRICT s4, const guint8 * ORC_RESTRICT s5, + const guint8 * ORC_RESTRICT s6, int n); + void bayer16to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n); + void bayer16to8_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, const guint32 * ORC_RESTRICT s2, int p1, + int n); + void bayer8to16_orc_reorder (guint8 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); #ifdef __cplusplus } #endif - -#endif - diff --git a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc.orc b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc.orc index d86a819ef6..cfaa1bb2e3 100644 --- a/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc.orc +++ b/subprojects/gst-plugins-bad/gst/bayer/gstbayerorc.orc @@ -248,3 +248,283 @@ x2 mergebw gb, g, b x2 mergewl d, ar, gb +# 10..16 bit bayer handling +.function bayer16_orc_horiz_upsample_le +.dest 4 d0 guint16 +.dest 4 d1 guint16 +.source 4 s guint16 +.temp 4 t + +.temp 2 b +.temp 2 c +.temp 2 d +.temp 2 e + +splitlw c, b, s +loadoffl t, s, 1 +splitlw e, d, t +avguw e, c, e +mergewl d0, c, e +avguw b, b, d +mergewl d1, b, d + +.function bayer16_orc_horiz_upsample_be +.dest 4 d0 guint16 +.dest 4 d1 guint16 +.source 4 s guint16 +.temp 4 t + +.temp 2 b +.temp 2 c +.temp 2 d +.temp 2 e + +splitlw c, b, s +swapw b, b +swapw c, c +loadoffl t, s, 1 +splitlw e, d, t +swapw d, d +swapw e, e +avguw e, c, e +mergewl d0, c, e +avguw b, b, d +mergewl d1, b, d + +.function bayer16_orc_merge_bg_bgra +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 g0 guint8 +.source 4 r0 guint8 +.source 4 b1 guint8 +.source 4 g1 guint8 +.source 4 g2 guint8 +.source 4 r2 guint8 +.temp 4 r +.temp 4 g +.temp 4 t + + +x2 avguw r, r0, r2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 65535 +andl t, t, 4294901760 +orl g, t, g +x2 mergewl d1, b1, g +x2 mergewl d2, r, 65535 + + +.function bayer16_orc_merge_gr_bgra +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 b0 guint8 +.source 4 g0 guint8 +.source 4 g1 guint8 +.source 4 r1 guint8 +.source 4 b2 guint8 +.source 4 g2 guint8 +.temp 4 b +.temp 4 g +.temp 4 t + + +x2 avguw b, b0, b2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 4294901760 +andl t, t, 65535 +orl g, t, g +x2 mergewl d1, b, g +x2 mergewl d2, r1, 65535 + + +.function bayer16_orc_merge_bg_abgr +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 g0 guint8 +.source 4 r0 guint8 +.source 4 b1 guint8 +.source 4 g1 guint8 +.source 4 g2 guint8 +.source 4 r2 guint8 +.temp 4 r +.temp 4 g +.temp 4 t + + +x2 avguw r, r0, r2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 65535 +andl t, t, 4294901760 +orl g, t, g +x2 mergewl d1, 65535, b1 +x2 mergewl d2, g, r + + +.function bayer16_orc_merge_gr_abgr +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 b0 guint8 +.source 4 g0 guint8 +.source 4 g1 guint8 +.source 4 r1 guint8 +.source 4 b2 guint8 +.source 4 g2 guint8 +.temp 4 b +.temp 4 g +.temp 4 t + + +x2 avguw b, b0, b2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 4294901760 +andl t, t, 65535 +orl g, t, g +x2 mergewl d1, 65535, b +x2 mergewl d2, g, r1 + + +.function bayer16_orc_merge_bg_rgba +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 g0 guint8 +.source 4 r0 guint8 +.source 4 b1 guint8 +.source 4 g1 guint8 +.source 4 g2 guint8 +.source 4 r2 guint8 +.temp 4 r +.temp 4 g +.temp 4 t + + +x2 avguw r, r0, r2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 65535 +andl t, t, 4294901760 +orl g, t, g +x2 mergewl d1, r, g +x2 mergewl d2, b1, 65535 + + +.function bayer16_orc_merge_gr_rgba +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 b0 guint8 +.source 4 g0 guint8 +.source 4 g1 guint8 +.source 4 r1 guint8 +.source 4 b2 guint8 +.source 4 g2 guint8 +.temp 4 b +.temp 4 g +.temp 4 t + + +x2 avguw b, b0, b2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 4294901760 +andl t, t, 65535 +orl g, t, g +x2 mergewl d1, r1, g +x2 mergewl d2, b, 65535 + + +.function bayer16_orc_merge_bg_argb +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 g0 guint8 +.source 4 r0 guint8 +.source 4 b1 guint8 +.source 4 g1 guint8 +.source 4 g2 guint8 +.source 4 r2 guint8 +.temp 4 r +.temp 4 g +.temp 4 t + + +x2 avguw r, r0, r2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 65535 +andl t, t, 4294901760 +orl g, t, g +x2 mergewl d1, 65535, r +x2 mergewl d2, g, b1 + + +.function bayer16_orc_merge_gr_argb +.dest 8 d1 guint16 +.dest 8 d2 guint16 +.source 4 b0 guint8 +.source 4 g0 guint8 +.source 4 g1 guint8 +.source 4 r1 guint8 +.source 4 b2 guint8 +.source 4 g2 guint8 +.temp 4 b +.temp 4 g +.temp 4 t + + +x2 avguw b, b0, b2 +x2 avguw g, g0, g2 +copyl t, g1 +x2 avguw g, g, t +andl g, g, 4294901760 +andl t, t, 65535 +orl g, t, g +x2 mergewl d1, 65535, r1 +x2 mergewl d2, g, b + + +.function bayer16to16_orc_reorder +.dest 8 d guint8 +.source 4 s1 guint32 +.source 4 s2 guint32 +.param 4 shift +.temp 4 u +.temp 4 v +.temp 8 q + +x2 muluwl q, s1, 0xffff +x2 shrul q, q, shift +x2 convuuslw u, q +x2 muluwl q, s2, 0xffff +x2 shrul q, q, shift +x2 convuuslw v, q +mergelq d, u, v + +.function bayer16to8_orc_reorder +.dest 4 d guint8 +.source 4 s1 guint32 +.source 4 s2 guint32 +.param 4 shift +.temp 2 u +.temp 2 v +.temp 4 l + +x2 shruw l, s1, shift +x2 convuuswb u, l +x2 shruw l, s2, shift +x2 convuuswb v, l +mergewl d, u, v + +.function bayer8to16_orc_reorder +.dest 8 d guint8 +.source 4 s guint32 + +x4 splatbw d, s