diff options
-rw-r--r-- | gst-libs/gst/video/video-orc-dist.c | 3400 | ||||
-rw-r--r-- | gst-libs/gst/video/video-orc-dist.h | 12 |
2 files changed, 3412 insertions, 0 deletions
diff --git a/gst-libs/gst/video/video-orc-dist.c b/gst-libs/gst/video/video-orc-dist.c index 8b6a30398..fa090b546 100644 --- a/gst-libs/gst/video/video-orc-dist.c +++ b/gst-libs/gst/video/video-orc-dist.c @@ -167,6 +167,30 @@ void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n); void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, @@ -6889,6 +6913,3382 @@ video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, #endif +/* video_orc_unpack_RGB15 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB15 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB15 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var50.i; + _dest.x2[1] = var52.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +void +video_orc_unpack_RGB15 (guint32 * ORC_RESTRICT d1, + 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, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, 4, 73, 33, + 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 93, 35, 35, 19, 90, 33, + 33, 20, 90, 34, 34, 21, 90, 35, 35, 21, 195, 36, 22, 34, 195, 37, + 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB15"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + 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 + + +/* video_orc_unpack_RGB15_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB15_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB15_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var47.i; + _dest.x2[1] = var49.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_RGB15_trunc (guint32 * ORC_RESTRICT d1, + 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, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 53, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, 14, 2, 2, + 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, 0, 0, 14, + 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, + 4, 82, 32, 4, 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, + 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, 35, 21, 195, 36, 22, 34, + 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB15_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB15_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + 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 + + +/* video_orc_pack_RGB15 */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB15 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 1; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 27; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB15 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 1; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 27; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB15 (guint16 * 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, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 53, 11, 2, 2, 12, 4, 4, 14, 4, 0, + 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0, 0, 248, 14, + 4, 1, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4, 27, 0, 0, + 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, + 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, 19, 126, 34, + 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, 35, 190, 0, + 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB15"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB15); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00f80000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x00000001, "c4"); + orc_program_add_constant (p, 4, 0x0000000e, "c5"); + orc_program_add_constant (p, 4, 0x0000001b, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + 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 + + +/* video_orc_unpack_BGR15 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif + orc_union32 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union32 var53; + orc_union32 var54; + orc_union32 var55; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 8: loadpw */ + var41.i = (int) 0x00000210; /* 528 or 2.60867e-321f */ + /* 10: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 13: loadpw */ + var43.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var45 = ptr4[i]; + /* 2: andw */ + var46.i = var45.i & var38.i; + /* 4: andw */ + var47.i = var45.i & var39.i; + /* 6: andw */ + var48.i = var45.i & var40.i; + /* 7: shlw */ + var49.i = ((orc_uint16) var48.i) << 5; + /* 9: mulhsw */ + var50.i = (var46.i * var41.i) >> 16; + /* 11: mulhsw */ + var51.i = (var47.i * var42.i) >> 16; + /* 12: mulhsw */ + var52.i = (var49.i * var42.i) >> 16; + /* 14: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var43.i; + _dest.x2[1] = var51.i; + var53.i = _dest.i; + } + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var52.i; + _dest.x2[1] = var50.i; + var54.i = _dest.i; + } + /* 16: shll */ + var55.i = ((orc_uint32) var54.i) << 8; + /* 17: orl */ + var44.i = var53.i | var55.i; + /* 18: storel */ + ptr0[i] = var44; + } + +} + +void +video_orc_unpack_BGR15 (guint32 * ORC_RESTRICT d1, + 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, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 5, 0, 0, 0, 14, 2, 16, 2, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 255, 0, 0, 0, 14, 4, 8, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 82, 32, 4, 73, 35, + 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 93, 33, 33, 19, 90, 35, + 35, 20, 90, 34, 34, 21, 90, 33, 33, 21, 195, 36, 22, 34, 195, 37, + 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000005, "c4"); + orc_program_add_constant (p, 2, 0x00000210, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + 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 + + +/* video_orc_unpack_BGR15_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR15_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR15_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var38; +#else + orc_union16 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif + orc_union32 var42; + orc_union16 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union32 var50; + orc_union32 var51; + orc_union32 var52; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var38.i = (int) 0x00007c00; /* 31744 or 1.56836e-319f */ + /* 3: loadpw */ + var39.i = (int) 0x000003e0; /* 992 or 4.90113e-321f */ + /* 5: loadpw */ + var40.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var41.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var43 = ptr4[i]; + /* 2: andw */ + var44.i = var43.i & var38.i; + /* 4: andw */ + var45.i = var43.i & var39.i; + /* 6: andw */ + var46.i = var43.i & var40.i; + /* 7: shruw */ + var47.i = ((orc_uint16) var44.i) >> 7; + /* 8: shruw */ + var48.i = ((orc_uint16) var45.i) >> 2; + /* 9: shlw */ + var49.i = ((orc_uint16) var46.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var41.i; + _dest.x2[1] = var48.i; + var50.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var47.i; + var51.i = _dest.i; + } + /* 13: shll */ + var52.i = ((orc_uint32) var51.i) << 8; + /* 14: orl */ + var42.i = var50.i | var52.i; + /* 15: storel */ + ptr0[i] = var42; + } + +} + +void +video_orc_unpack_BGR15_trunc (guint32 * ORC_RESTRICT d1, + 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, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 53, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 124, 0, 0, 14, 2, 224, 3, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 7, 0, 0, 0, 14, 2, 2, + 0, 0, 0, 14, 2, 3, 0, 0, 0, 14, 2, 255, 0, 0, 0, 14, + 4, 8, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, + 4, 82, 32, 4, 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, + 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, 33, 21, 195, 36, 22, 34, + 195, 37, 33, 35, 124, 37, 37, 23, 123, 0, 36, 37, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR15_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR15_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x00007c00, "c1"); + orc_program_add_constant (p, 2, 0x000003e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000007, "c4"); + orc_program_add_constant (p, 2, 0x00000002, "c5"); + orc_program_add_constant (p, 2, 0x00000003, "c6"); + orc_program_add_constant (p, 2, 0x000000ff, "c7"); + orc_program_add_constant (p, 4, 0x00000008, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C7, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T2, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "shll", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_C8, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_D1, ORC_VAR_T5, ORC_VAR_T6, + 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 + + +/* video_orc_pack_BGR15 */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR15 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var44.i) >> 17; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 11; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR15 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00f80000; /* 16252928 or 8.03001e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var44.i) >> 17; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 14; + /* 9: shrul */ + var47.i = ((orc_uint32) var42.i) >> 11; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var45.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR15 (guint16 * 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, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 53, 11, 2, 2, 12, 4, 4, 14, 4, 0, + 248, 0, 0, 14, 4, 0, 0, 248, 0, 14, 4, 0, 0, 0, 248, 14, + 4, 17, 0, 0, 0, 14, 4, 14, 0, 0, 0, 14, 4, 11, 0, 0, + 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, + 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 35, 35, 19, 126, 34, + 34, 20, 126, 33, 33, 21, 123, 36, 33, 34, 123, 36, 36, 35, 190, 0, + 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR15"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR15); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00f80000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x00000011, "c4"); + orc_program_add_constant (p, 4, 0x0000000e, "c5"); + orc_program_add_constant (p, 4, 0x0000000b, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + 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 + + +/* video_orc_unpack_RGB16 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var52.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var54.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var52.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var54.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +void +video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, + 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, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 54, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, + 73, 33, 32, 16, 73, 34, 32, 17, 73, 35, 32, 18, 95, 33, 33, 19, + 93, 35, 35, 20, 90, 33, 33, 21, 90, 34, 34, 22, 90, 35, 35, 21, + 195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0, + 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB16"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000006, "c4"); + orc_program_add_constant (p, 2, 0x00000005, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x00002080, "c7"); + orc_program_add_constant (p, 2, 0x000000ff, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + 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 + + +/* video_orc_unpack_RGB16_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var48.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var50.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_unpack_RGB16_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var48.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var50.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +void +video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, + 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, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 82, 71, 66, 49, 54, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3, + 0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, + 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 33, 32, 16, 73, 34, + 32, 17, 73, 35, 32, 18, 95, 33, 33, 19, 95, 34, 34, 20, 93, 35, + 35, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, + 160, 0, 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_RGB16_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_RGB16_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000008, "c4"); + orc_program_add_constant (p, 2, 0x00000003, "c5"); + orc_program_add_constant (p, 2, 0x000000ff, "c6"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + 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 + + +/* video_orc_pack_RGB16 */ +#ifdef DISABLE_ORC +void +video_orc_pack_RGB16 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var43.i) >> 13; + /* 8: shrul */ + var46.i = ((orc_uint32) var44.i) >> 27; + /* 9: orl */ + var47.i = var42.i | var45.i; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: select0lw */ + { + orc_union32 _src; + _src.i = var48.i; + var40.i = _src.x2[0]; + } + /* 12: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_RGB16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var43.i) >> 13; + /* 8: shrul */ + var46.i = ((orc_uint32) var44.i) >> 27; + /* 9: orl */ + var47.i = var42.i | var45.i; + /* 10: orl */ + var48.i = var47.i | var46.i; + /* 11: select0lw */ + { + orc_union32 _src; + _src.i = var48.i; + var40.i = _src.x2[0]; + } + /* 12: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_RGB16 (guint16 * 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, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 82, 71, 66, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 0, + 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0, 0, 248, 14, + 4, 13, 0, 0, 0, 14, 4, 27, 0, 0, 0, 20, 4, 20, 4, 20, + 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, 32, 16, 106, 34, 32, 17, + 106, 35, 32, 18, 126, 34, 34, 19, 126, 35, 35, 20, 123, 36, 33, 34, + 123, 36, 36, 35, 190, 0, 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_RGB16"); + orc_program_set_backup_function (p, _backup_video_orc_pack_RGB16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00fc0000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x0000000d, "c4"); + orc_program_add_constant (p, 4, 0x0000001b, "c5"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + 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 + + +/* video_orc_unpack_BGR16 */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var54.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var52.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var43; +#else + orc_union16 var43; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var44; +#else + orc_union16 var44; +#endif + orc_union32 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union16 var51; + orc_union16 var52; + orc_union16 var53; + orc_union16 var54; + orc_union32 var55; + orc_union32 var56; + orc_union64 var57; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 9: loadpw */ + var42.i = (int) 0x00004200; /* 16896 or 8.34773e-320f */ + /* 11: loadpw */ + var43.i = (int) 0x00002080; /* 8320 or 4.11063e-320f */ + /* 14: loadpw */ + var44.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var46 = ptr4[i]; + /* 2: andw */ + var47.i = var46.i & var39.i; + /* 4: andw */ + var48.i = var46.i & var40.i; + /* 6: andw */ + var49.i = var46.i & var41.i; + /* 7: shruw */ + var50.i = ((orc_uint16) var47.i) >> 6; + /* 8: shlw */ + var51.i = ((orc_uint16) var49.i) << 5; + /* 10: mulhsw */ + var52.i = (var50.i * var42.i) >> 16; + /* 12: mulhsw */ + var53.i = (var48.i * var43.i) >> 16; + /* 13: mulhsw */ + var54.i = (var51.i * var42.i) >> 16; + /* 15: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var44.i; + _dest.x2[1] = var54.i; + var55.i = _dest.i; + } + /* 16: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var53.i; + _dest.x2[1] = var52.i; + var56.i = _dest.i; + } + /* 17: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var55.i; + _dest.x2[1] = var56.i; + var57.i = _dest.i; + } + /* 18: convsuswb */ + var45.x4[0] = ORC_CLAMP_UB (var57.x4[0]); + var45.x4[1] = ORC_CLAMP_UB (var57.x4[1]); + var45.x4[2] = ORC_CLAMP_UB (var57.x4[2]); + var45.x4[3] = ORC_CLAMP_UB (var57.x4[3]); + /* 19: storel */ + ptr0[i] = var45; + } + +} + +void +video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, + 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, 22, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 54, 11, 4, 4, 12, 2, 2, 14, + 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, 0, 14, 2, 31, 0, 0, + 0, 14, 2, 6, 0, 0, 0, 14, 2, 5, 0, 0, 0, 14, 2, 0, + 66, 0, 0, 14, 2, 128, 32, 0, 0, 14, 2, 255, 0, 0, 0, 20, + 2, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, + 73, 35, 32, 16, 73, 34, 32, 17, 73, 33, 32, 18, 95, 35, 35, 19, + 93, 33, 33, 20, 90, 35, 35, 21, 90, 34, 34, 22, 90, 33, 33, 21, + 195, 36, 23, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, 160, 0, + 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR16"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000006, "c4"); + orc_program_add_constant (p, 2, 0x00000005, "c5"); + orc_program_add_constant (p, 2, 0x00004200, "c6"); + orc_program_add_constant (p, 2, 0x00002080, "c7"); + orc_program_add_constant (p, 2, 0x000000ff, "c8"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C7, + ORC_VAR_D1); + orc_program_append_2 (p, "mulhsw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C8, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + 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 + + +/* video_orc_unpack_BGR16_trunc */ +#ifdef DISABLE_ORC +void +video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + const guint16 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) d1; + ptr4 = (orc_union16 *) s1; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var50.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var48.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +#else +static void +_backup_video_orc_unpack_BGR16_trunc (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union32 *ORC_RESTRICT ptr0; + const orc_union16 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var39; +#else + orc_union16 var39; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var40; +#else + orc_union16 var40; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var41; +#else + orc_union16 var41; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union16 var42; +#else + orc_union16 var42; +#endif + orc_union32 var43; + orc_union16 var44; + orc_union16 var45; + orc_union16 var46; + orc_union16 var47; + orc_union16 var48; + orc_union16 var49; + orc_union16 var50; + orc_union32 var51; + orc_union32 var52; + orc_union64 var53; + + ptr0 = (orc_union32 *) ex->arrays[0]; + ptr4 = (orc_union16 *) ex->arrays[4]; + + /* 1: loadpw */ + var39.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpw */ + var40.i = (int) 0x000007e0; /* 2016 or 9.96036e-321f */ + /* 5: loadpw */ + var41.i = (int) 0x0000001f; /* 31 or 1.5316e-322f */ + /* 10: loadpw */ + var42.i = (int) 0x000000ff; /* 255 or 1.25987e-321f */ + + for (i = 0; i < n; i++) { + /* 0: loadw */ + var44 = ptr4[i]; + /* 2: andw */ + var45.i = var44.i & var39.i; + /* 4: andw */ + var46.i = var44.i & var40.i; + /* 6: andw */ + var47.i = var44.i & var41.i; + /* 7: shruw */ + var48.i = ((orc_uint16) var45.i) >> 8; + /* 8: shruw */ + var49.i = ((orc_uint16) var46.i) >> 3; + /* 9: shlw */ + var50.i = ((orc_uint16) var47.i) << 3; + /* 11: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var42.i; + _dest.x2[1] = var50.i; + var51.i = _dest.i; + } + /* 12: mergewl */ + { + orc_union32 _dest; + _dest.x2[0] = var49.i; + _dest.x2[1] = var48.i; + var52.i = _dest.i; + } + /* 13: mergelq */ + { + orc_union64 _dest; + _dest.x2[0] = var51.i; + _dest.x2[1] = var52.i; + var53.i = _dest.i; + } + /* 14: convsuswb */ + var43.x4[0] = ORC_CLAMP_UB (var53.x4[0]); + var43.x4[1] = ORC_CLAMP_UB (var53.x4[1]); + var43.x4[2] = ORC_CLAMP_UB (var53.x4[2]); + var43.x4[3] = ORC_CLAMP_UB (var53.x4[3]); + /* 15: storel */ + ptr0[i] = var43; + } + +} + +void +video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, + 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, 28, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 117, 110, 112, + 97, 99, 107, 95, 66, 71, 82, 49, 54, 95, 116, 114, 117, 110, 99, 11, + 4, 4, 12, 2, 2, 14, 2, 0, 248, 0, 0, 14, 2, 224, 7, 0, + 0, 14, 2, 31, 0, 0, 0, 14, 2, 8, 0, 0, 0, 14, 2, 3, + 0, 0, 0, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 2, 20, + 2, 20, 4, 20, 4, 20, 8, 82, 32, 4, 73, 35, 32, 16, 73, 34, + 32, 17, 73, 33, 32, 18, 95, 35, 35, 19, 95, 34, 34, 20, 93, 33, + 33, 20, 195, 36, 21, 33, 195, 37, 34, 35, 194, 38, 36, 37, 21, 2, + 160, 0, 38, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_unpack_BGR16_trunc"); + orc_program_set_backup_function (p, _backup_video_orc_unpack_BGR16_trunc); + orc_program_add_destination (p, 4, "d1"); + orc_program_add_source (p, 2, "s1"); + orc_program_add_constant (p, 2, 0x0000f800, "c1"); + orc_program_add_constant (p, 2, 0x000007e0, "c2"); + orc_program_add_constant (p, 2, 0x0000001f, "c3"); + orc_program_add_constant (p, 2, 0x00000008, "c4"); + orc_program_add_constant (p, 2, 0x00000003, "c5"); + orc_program_add_constant (p, 2, 0x000000ff, "c6"); + orc_program_add_temporary (p, 2, "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, 4, "t5"); + orc_program_add_temporary (p, 4, "t6"); + orc_program_add_temporary (p, 8, "t7"); + + orc_program_append_2 (p, "loadw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andw", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shruw", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shlw", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T5, ORC_VAR_C6, ORC_VAR_T2, + ORC_VAR_D1); + orc_program_append_2 (p, "mergewl", 0, ORC_VAR_T6, ORC_VAR_T3, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "mergelq", 0, ORC_VAR_T7, ORC_VAR_T5, ORC_VAR_T6, + ORC_VAR_D1); + orc_program_append_2 (p, "convsuswb", 2, ORC_VAR_D1, ORC_VAR_T7, + 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 + + +/* video_orc_pack_BGR16 */ +#ifdef DISABLE_ORC +void +video_orc_pack_BGR16 (guint16 * ORC_RESTRICT d1, + const guint32 * ORC_RESTRICT s1, int n) +{ + int i; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) d1; + ptr4 = (orc_union32 *) s1; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 11; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 13; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 16; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +#else +static void +_backup_video_orc_pack_BGR16 (OrcExecutor * ORC_RESTRICT ex) +{ + int i; + int n = ex->n; + orc_union16 *ORC_RESTRICT ptr0; + const orc_union32 *ORC_RESTRICT ptr4; +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var37; +#else + orc_union32 var37; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var38; +#else + orc_union32 var38; +#endif +#if defined(__APPLE__) && __GNUC__ == 4 && __GNUC_MINOR__ == 2 && defined (__i386__) + volatile orc_union32 var39; +#else + orc_union32 var39; +#endif + orc_union16 var40; + orc_union32 var41; + orc_union32 var42; + orc_union32 var43; + orc_union32 var44; + orc_union32 var45; + orc_union32 var46; + orc_union32 var47; + orc_union32 var48; + orc_union32 var49; + + ptr0 = (orc_union16 *) ex->arrays[0]; + ptr4 = (orc_union32 *) ex->arrays[4]; + + /* 1: loadpl */ + var37.i = (int) 0x0000f800; /* 63488 or 3.13672e-319f */ + /* 3: loadpl */ + var38.i = (int) 0x00fc0000; /* 16515072 or 8.15953e-317f */ + /* 5: loadpl */ + var39.i = (int) 0xf8000000; /* -134217728 or 2.05568e-314f */ + + for (i = 0; i < n; i++) { + /* 0: loadl */ + var41 = ptr4[i]; + /* 2: andl */ + var42.i = var41.i & var37.i; + /* 4: andl */ + var43.i = var41.i & var38.i; + /* 6: andl */ + var44.i = var41.i & var39.i; + /* 7: shrul */ + var45.i = ((orc_uint32) var42.i) >> 11; + /* 8: shrul */ + var46.i = ((orc_uint32) var43.i) >> 13; + /* 9: shrul */ + var47.i = ((orc_uint32) var44.i) >> 16; + /* 10: orl */ + var48.i = var45.i | var46.i; + /* 11: orl */ + var49.i = var48.i | var47.i; + /* 12: select0lw */ + { + orc_union32 _src; + _src.i = var49.i; + var40.i = _src.x2[0]; + } + /* 13: storew */ + ptr0[i] = var40; + } + +} + +void +video_orc_pack_BGR16 (guint16 * 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, 20, 118, 105, 100, 101, 111, 95, 111, 114, 99, 95, 112, 97, 99, + 107, 95, 66, 71, 82, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 0, + 248, 0, 0, 14, 4, 0, 0, 252, 0, 14, 4, 0, 0, 0, 248, 14, + 4, 11, 0, 0, 0, 14, 4, 13, 0, 0, 0, 14, 4, 16, 0, 0, + 0, 20, 4, 20, 4, 20, 4, 20, 4, 20, 4, 113, 32, 4, 106, 33, + 32, 16, 106, 34, 32, 17, 106, 35, 32, 18, 126, 33, 33, 19, 126, 34, + 34, 20, 126, 35, 35, 21, 123, 36, 33, 34, 123, 36, 36, 35, 190, 0, + 36, 2, 0, + }; + p = orc_program_new_from_static_bytecode (bc); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16); +#else + p = orc_program_new (); + orc_program_set_name (p, "video_orc_pack_BGR16"); + orc_program_set_backup_function (p, _backup_video_orc_pack_BGR16); + orc_program_add_destination (p, 2, "d1"); + orc_program_add_source (p, 4, "s1"); + orc_program_add_constant (p, 4, 0x0000f800, "c1"); + orc_program_add_constant (p, 4, 0x00fc0000, "c2"); + orc_program_add_constant (p, 4, 0xf8000000, "c3"); + orc_program_add_constant (p, 4, 0x0000000b, "c4"); + orc_program_add_constant (p, 4, 0x0000000d, "c5"); + orc_program_add_constant (p, 4, 0x00000010, "c6"); + orc_program_add_temporary (p, 4, "t1"); + orc_program_add_temporary (p, 4, "t2"); + orc_program_add_temporary (p, 4, "t3"); + orc_program_add_temporary (p, 4, "t4"); + orc_program_add_temporary (p, 4, "t5"); + + orc_program_append_2 (p, "loadl", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_D1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_C1, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T3, ORC_VAR_T1, ORC_VAR_C2, + ORC_VAR_D1); + orc_program_append_2 (p, "andl", 0, ORC_VAR_T4, ORC_VAR_T1, ORC_VAR_C3, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C4, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C5, + ORC_VAR_D1); + orc_program_append_2 (p, "shrul", 0, ORC_VAR_T4, ORC_VAR_T4, ORC_VAR_C6, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3, + ORC_VAR_D1); + orc_program_append_2 (p, "orl", 0, ORC_VAR_T5, ORC_VAR_T5, ORC_VAR_T4, + ORC_VAR_D1); + orc_program_append_2 (p, "select0lw", 0, ORC_VAR_D1, ORC_VAR_T5, + 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 + + /* video_orc_resample_bilinear_u32 */ #ifdef DISABLE_ORC void diff --git a/gst-libs/gst/video/video-orc-dist.h b/gst-libs/gst/video/video-orc-dist.h index 849743665..915b5dbbe 100644 --- a/gst-libs/gst/video/video-orc-dist.h +++ b/gst-libs/gst/video/video-orc-dist.h @@ -113,6 +113,18 @@ void video_orc_pack_NV24 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, co void video_orc_unpack_A420 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, const guint8 * ORC_RESTRICT s2, const guint8 * ORC_RESTRICT s3, const guint8 * ORC_RESTRICT s4, int n); void video_orc_pack_A420 (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, guint8 * ORC_RESTRICT d3, guint8 * ORC_RESTRICT d4, const guint8 * ORC_RESTRICT s1, int n); void video_orc_pack_AY (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2, const guint8 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB15_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB15 (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR15_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR15 (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_RGB16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_RGB16 (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16 (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_unpack_BGR16_trunc (guint32 * ORC_RESTRICT d1, const guint16 * ORC_RESTRICT s1, int n); +void video_orc_pack_BGR16 (guint16 * ORC_RESTRICT d1, const guint32 * ORC_RESTRICT s1, int n); void video_orc_resample_bilinear_u32 (guint8 * ORC_RESTRICT d1, const guint8 * ORC_RESTRICT s1, int p1, int p2, int n); void video_orc_merge_linear_u8 (orc_uint8 * ORC_RESTRICT d1, const orc_uint8 * ORC_RESTRICT s1, const orc_uint8 * ORC_RESTRICT s2, int p1, int n); void video_orc_memset_2d (guint8 * ORC_RESTRICT d1, int d1_stride, int p1, int n, int m); |